TimelineTrack.js 2.4 KB

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