TimelineTrack.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*global define*/
  2. define([
  3. '../../Core/Color',
  4. '../../Core/defined',
  5. '../../Core/JulianDate'
  6. ], function(
  7. Color,
  8. defined,
  9. JulianDate) {
  10. "use strict";
  11. /**
  12. * @private
  13. */
  14. function TimelineTrack(interval, pixelHeight, color, backgroundColor) {
  15. this.interval = interval;
  16. this.height = pixelHeight;
  17. this.color = color || new Color(0.5, 0.5, 0.5, 1.0);
  18. this.backgroundColor = backgroundColor || new Color(0.0, 0.0, 0.0, 0.0);
  19. }
  20. TimelineTrack.prototype.render = function(context, renderState) {
  21. var startInterval = this.interval.start;
  22. var stopInterval = this.interval.stop;
  23. var spanStart = renderState.startJulian;
  24. var spanStop = JulianDate.addSeconds(renderState.startJulian, renderState.duration, new JulianDate());
  25. if (JulianDate.lessThan(startInterval, spanStart) && JulianDate.greaterThan(stopInterval, spanStop)) {
  26. //The track takes up the entire visible span.
  27. context.fillStyle = this.color.toCssColorString();
  28. context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);
  29. } else if (JulianDate.lessThanOrEquals(startInterval, spanStop) && JulianDate.greaterThanOrEquals(stopInterval, spanStart)) {
  30. //The track only takes up some of the visible span, compute that span.
  31. var x;
  32. var start, stop;
  33. for (x = 0; x < renderState.timeBarWidth; ++x) {
  34. var currentTime = JulianDate.addSeconds(renderState.startJulian, (x / renderState.timeBarWidth) * renderState.duration, new JulianDate());
  35. if (!defined(start) && JulianDate.greaterThanOrEquals(currentTime, startInterval)) {
  36. start = x;
  37. } else if (!defined(stop) && JulianDate.greaterThanOrEquals(currentTime, stopInterval)) {
  38. stop = x;
  39. }
  40. }
  41. context.fillStyle = this.backgroundColor.toCssColorString();
  42. context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);
  43. if (defined(start)) {
  44. if (!defined(stop)) {
  45. stop = renderState.timeBarWidth;
  46. }
  47. context.fillStyle = this.color.toCssColorString();
  48. context.fillRect(start, renderState.y, Math.max(stop - start, 1), this.height);
  49. }
  50. }
  51. };
  52. return TimelineTrack;
  53. });