From be93031e1c1bf226cda3f7a3a489d28a6694d1e3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 28 Jun 2018 15:56:39 +0200 Subject: [PATCH] ASPECT RATIO global const eliminated --- BottomSpace/ChartAspectRatio.js | 116 ++++++++++++++++++++++++++++ BottomSpace/DeleteTradingHistory.js | 2 +- Canvas.js | 17 +++- Globals.js | 3 - Images/scale.y.png | Bin 0 -> 19485 bytes Project.njsproj | 3 + Scales/ChartGrid.js | 2 +- Scales/RightScale.js | 7 -- Scripts/AppLoader.js | 1 + Spaces/BottomSpace.js | 8 ++ TimeMachine.js | 4 +- TimelineChart.js | 3 +- 12 files changed, 148 insertions(+), 18 deletions(-) create mode 100644 BottomSpace/ChartAspectRatio.js create mode 100644 Images/scale.y.png diff --git a/BottomSpace/ChartAspectRatio.js b/BottomSpace/ChartAspectRatio.js new file mode 100644 index 000000000..72bc2066d --- /dev/null +++ b/BottomSpace/ChartAspectRatio.js @@ -0,0 +1,116 @@ +function newChartAspectRatio() { + + let thisObject = { + aspectRatio: undefined, + draw: draw, + getContainer: getContainer, + initialize: initialize + }; + + let container = newContainer(); + container.initialize(); + thisObject.container = container; + + thisObject.container.frame.width = 50; + thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT; + + container.frame.position.x = viewPort.visibleArea.topRight.x - thisObject.container.frame.width * 2; + container.frame.position.y = viewPort.visibleArea.bottomLeft.y; + + container.isDraggeable = false; + container.isClickeable = false; + container.isWheeleable = true; + + thisObject.aspectRatio = {}; + + const INITIAL_Y_ASPECT_RATIO = 2 / 10; + const MIN_Y_ASPECT_RATIO = 1 / 10; + const MAX_Y_ASPECT_RATIO = 10 / 10; + + thisObject.aspectRatio.x = 1; + thisObject.aspectRatio.y = INITIAL_Y_ASPECT_RATIO; + + canDrawIcon = false; + + return thisObject; + + function initialize() { + + icon = new Image(); + + icon.onload = onImageLoad; + + function onImageLoad() { + canDrawIcon = true; + } + + icon.src = "Images/scale.y.png"; + + thisObject.container.eventHandler.listenToEvent('Mouse Wheel', onMouseWheel); + + } + + function onMouseWheel(pDelta) { + + if (pDelta < 0) { + pDelta = -0.1; + } else { + pDelta = 0.1; + } + + thisObject.aspectRatio.y = thisObject.aspectRatio.y + pDelta; + thisObject.aspectRatio.y = Math.round(thisObject.aspectRatio.y * 100) / 100; + + if (thisObject.aspectRatio.y < MIN_Y_ASPECT_RATIO) { + + thisObject.aspectRatio.y = MIN_Y_ASPECT_RATIO; + + } + + if (thisObject.aspectRatio.y > MAX_Y_ASPECT_RATIO) { + + thisObject.aspectRatio.y = MAX_Y_ASPECT_RATIO; + + } + } + + function getContainer(point) { + + let container; + + /* First we check if this point is inside this object UI. */ + + if (thisObject.container.frame.isThisPointHere(point, true) === true) { + + return this.container; + + } else { + + /* This point does not belong to this space. */ + + return undefined; + } + } + + function draw() { + + thisObject.container.frame.draw(false, false); + + if (canDrawIcon === false) { return; } + + let breakpointsHeight = 15; + + let imageHeight = 30; + let imageWidth = 15; + + let imagePoint = { + x: 10, + y: thisObject.container.frame.height / 2 - imageHeight / 2 + breakpointsHeight + }; + + imagePoint = thisObject.container.frame.frameThisPoint(imagePoint); + + browserCanvasContext.drawImage(icon, imagePoint.x, imagePoint.y, imageWidth, imageHeight); + } + +} \ No newline at end of file diff --git a/BottomSpace/DeleteTradingHistory.js b/BottomSpace/DeleteTradingHistory.js index 443245862..5ae15b60a 100644 --- a/BottomSpace/DeleteTradingHistory.js +++ b/BottomSpace/DeleteTradingHistory.js @@ -12,7 +12,7 @@ function newDeleteTradingHistory() { container.initialize(); thisObject.container = container; - thisObject.container.frame.width = 150; + thisObject.container.frame.width = 50; thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT; container.frame.position.x = viewPort.visibleArea.topRight.x; diff --git a/Canvas.js b/Canvas.js index d211c78d4..93c76a614 100644 --- a/Canvas.js +++ b/Canvas.js @@ -94,6 +94,9 @@ function newCanvas() { thisObject.topSpace = newTopSpace(); thisObject.topSpace.initialize(); + thisObject.bottomSpace = newBottomSpace(); + thisObject.bottomSpace.initialize(); + thisObject.panelsSpace = newPanelsSpace(); thisObject.panelsSpace.initialize(); @@ -103,9 +106,6 @@ function newCanvas() { thisObject.chartSpace = newChartSpace(); thisObject.chartSpace.initialize(onCharSpaceInitialized); - thisObject.bottomSpace = newBottomSpace(); - thisObject.bottomSpace.initialize(); - function onCharSpaceInitialized(err) { try { @@ -527,6 +527,17 @@ function newCanvas() { return false; // This instructs the browser not to take the event and scroll the page. } + /* We try the Bottom Space. */ + + let bottomContainer = canvas.bottomSpace.getContainer({ x: event.pageX, y: event.pageY }); + + if (bottomContainer !== undefined && bottomContainer.isWheeleable === true) { + + bottomContainer.eventHandler.raiseEvent("Mouse Wheel", event.wheelDelta); + return false; // This instructs the browser not to take the event and scroll the page. + + } + /* Finally we try the Chart Space. */ let chartContainer = canvas.chartSpace.getContainer({ x: event.pageX, y: event.pageY }); diff --git a/Globals.js b/Globals.js index bdb5f0323..6fb75afad 100644 --- a/Globals.js +++ b/Globals.js @@ -129,9 +129,6 @@ const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000; const EARLIEST_DATE = new Date(2014, 0, 18, 4, 26, 8); -const MIN_CHART_ASPECT_RATIO = 2 / 10; -let CHART_ASPECT_RATIO = MIN_CHART_ASPECT_RATIO; - const TOP_SPACE_HEIGHT = 50; const BOTTOM_SPACE_HEIGHT = 50; diff --git a/Images/scale.y.png b/Images/scale.y.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc07879cc8c3a307fc0c3987f2ce3dc46355896 GIT binary patch literal 19485 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 Code + + Code + Code diff --git a/Scales/ChartGrid.js b/Scales/ChartGrid.js index 2e2aae1eb..e322c44c7 100644 --- a/Scales/ChartGrid.js +++ b/Scales/ChartGrid.js @@ -67,7 +67,7 @@ const basePeriod = { x: 8 * 60 * 60 * 1000, - y: timeLineCoordinateSystem.max.y / 1000 / CHART_ASPECT_RATIO + y: timeLineCoordinateSystem.max.y / 1000 / canvas.bottomSpace.chartAspectRatio.aspectRatio.y }; let period = { diff --git a/Scales/RightScale.js b/Scales/RightScale.js index 64699373f..72e31101c 100644 --- a/Scales/RightScale.js +++ b/Scales/RightScale.js @@ -39,13 +39,6 @@ pDelta = 0.1; } - CHART_ASPECT_RATIO = CHART_ASPECT_RATIO + pDelta; - - if (CHART_ASPECT_RATIO < MIN_CHART_ASPECT_RATIO) { - - CHART_ASPECT_RATIO = MIN_CHART_ASPECT_RATIO; - - } } function getContainer(point) { diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js index 3a734a7e6..092c0c761 100644 --- a/Scripts/AppLoader.js +++ b/Scripts/AppLoader.js @@ -30,6 +30,7 @@ "Globals.js", "BottomSpace/DeleteTradingHistory.js", + "BottomSpace/ChartAspectRatio.js", "TopSpace/PlayStopButton.js", "TopSpace/CompanyLogo.js", diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js index 0dcff73e4..fef962e70 100644 --- a/Spaces/BottomSpace.js +++ b/Spaces/BottomSpace.js @@ -3,6 +3,7 @@ function newBottomSpace() { var thisObject = { deleteTradingHistory: undefined, + chartAspectRatio: undefined, container: undefined, draw: draw, getContainer: getContainer, // returns the inner most container that holds the point received by parameter. @@ -28,6 +29,9 @@ function newBottomSpace() { thisObject.deleteTradingHistory = newDeleteTradingHistory(); thisObject.deleteTradingHistory.initialize(); + thisObject.chartAspectRatio = newChartAspectRatio(); + thisObject.chartAspectRatio.initialize(); + } function getContainer(point) { @@ -37,6 +41,9 @@ function newBottomSpace() { container = thisObject.deleteTradingHistory.getContainer(point); if (container !== undefined) { return container; } + container = thisObject.chartAspectRatio.getContainer(point); + if (container !== undefined) { return container; } + /* The point does not belong to any inner container, so we return the current container. */ return thisObject.container; @@ -49,6 +56,7 @@ function newBottomSpace() { drawBackground(); thisObject.deleteTradingHistory.draw(); + thisObject.chartAspectRatio.draw(); } diff --git a/TimeMachine.js b/TimeMachine.js index 22010f5fd..db8301d17 100644 --- a/TimeMachine.js +++ b/TimeMachine.js @@ -61,7 +61,7 @@ function newTimeMachine() { timelineChart.container.parentContainer = thisObject.container; timelineChart.container.frame.width = thisObject.container.frame.width * 1; - timelineChart.container.frame.height = thisObject.container.frame.height * 1 * CHART_ASPECT_RATIO; + timelineChart.container.frame.height = thisObject.container.frame.height * 1 * canvas.bottomSpace.chartAspectRatio.aspectRatio.y; timelineChart.container.frame.position.x = thisObject.container.frame.width / 2 - timelineChart.container.frame.width / 2; timelineChart.container.frame.position.y = timelineChart.container.frame.height * 1.5 * iteration; @@ -116,7 +116,7 @@ function newTimeMachine() { timelineChart.container.parentContainer = thisObject.container; timelineChart.container.frame.width = thisObject.container.frame.width * 1; - timelineChart.container.frame.height = thisObject.container.frame.height * 1 * CHART_ASPECT_RATIO; + timelineChart.container.frame.height = thisObject.container.frame.height * 1 * canvas.bottomSpace.chartAspectRatio.aspectRatio.y; timelineChart.container.frame.position.x = thisObject.container.frame.width / 2 - timelineChart.container.frame.width / 2; timelineChart.container.frame.position.y = timelineChart.container.frame.height * 1.5 * iteration; diff --git a/TimelineChart.js b/TimelineChart.js index e23cabe96..68e80c155 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -946,7 +946,8 @@ if (thisObject.container.frame.isInViewPort()) { - thisObject.container.frame.height = CHART_SPACE_HEIGHT * CHART_ASPECT_RATIO; + thisObject.container.frame.height = CHART_SPACE_HEIGHT * canvas.bottomSpace.chartAspectRatio.aspectRatio.y; + recalculateScale(); this.container.frame.draw();