TimelineTrack.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. const startInterval = this.interval.start;
  15. const stopInterval = this.interval.stop;
  16. const spanStart = renderState.startJulian;
  17. const spanStop = JulianDate.addSeconds(
  18. renderState.startJulian,
  19. renderState.duration,
  20. new JulianDate()
  21. );
  22. if (
  23. JulianDate.lessThan(startInterval, spanStart) &&
  24. JulianDate.greaterThan(stopInterval, spanStop)
  25. ) {
  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 (
  30. JulianDate.lessThanOrEquals(startInterval, spanStop) &&
  31. JulianDate.greaterThanOrEquals(stopInterval, spanStart)
  32. ) {
  33. //The track only takes up some of the visible span, compute that span.
  34. let x;
  35. let start, stop;
  36. for (x = 0; x < renderState.timeBarWidth; ++x) {
  37. const currentTime = JulianDate.addSeconds(
  38. renderState.startJulian,
  39. (x / renderState.timeBarWidth) * renderState.duration,
  40. new JulianDate()
  41. );
  42. if (
  43. !defined(start) &&
  44. JulianDate.greaterThanOrEquals(currentTime, startInterval)
  45. ) {
  46. start = x;
  47. } else if (
  48. !defined(stop) &&
  49. JulianDate.greaterThanOrEquals(currentTime, stopInterval)
  50. ) {
  51. stop = x;
  52. }
  53. }
  54. context.fillStyle = this.backgroundColor.toCssColorString();
  55. context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);
  56. if (defined(start)) {
  57. if (!defined(stop)) {
  58. stop = renderState.timeBarWidth;
  59. }
  60. context.fillStyle = this.color.toCssColorString();
  61. context.fillRect(
  62. start,
  63. renderState.y,
  64. Math.max(stop - start, 1),
  65. this.height
  66. );
  67. }
  68. }
  69. };
  70. export default TimelineTrack;