summaryrefslogtreecommitdiff
path: root/src/components/app/map
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-26 19:34:17 +0200
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-26 19:34:17 +0200
commit3ccc6c95acfe71fee5884ccb32c685adc53127cf (patch)
treebb6535ba87b91552e32964689f50f22401a6fe6a /src/components/app/map
parent9ed6d7932876cb7654ad154d028ba41bef12a7b5 (diff)
Refactor zooming logic out to action
This also enables a more straight-forward implementation of the functionality that the zoom buttons offer.
Diffstat (limited to 'src/components/app/map')
-rw-r--r--src/components/app/map/MapStageComponent.js41
-rw-r--r--src/components/app/map/controls/ZoomControlComponent.js13
2 files changed, 9 insertions, 45 deletions
diff --git a/src/components/app/map/MapStageComponent.js b/src/components/app/map/MapStageComponent.js
index b8e3c3f7..20389758 100644
--- a/src/components/app/map/MapStageComponent.js
+++ b/src/components/app/map/MapStageComponent.js
@@ -6,13 +6,7 @@ import ObjectHoverLayer from "../../../containers/app/map/layers/ObjectHoverLaye
import RoomHoverLayer from "../../../containers/app/map/layers/RoomHoverLayer";
import jQuery from "../../../util/jquery";
import {NAVBAR_HEIGHT} from "../../navigation/Navbar";
-import {
- MAP_MAX_SCALE,
- MAP_MIN_SCALE,
- MAP_MOVE_PIXELS_PER_EVENT,
- MAP_SCALE_PER_EVENT,
- MAP_SIZE_IN_PIXELS
-} from "./MapConstants";
+import {MAP_MOVE_PIXELS_PER_EVENT} from "./MapConstants";
class MapStageComponent extends React.Component {
state = {
@@ -54,20 +48,7 @@ class MapStageComponent extends React.Component {
updateScale(e) {
e.preventDefault();
- const mousePointsTo = {
- x: this.state.mouseX / this.props.mapScale - this.props.mapPosition.x / this.props.mapScale,
- y: this.state.mouseY / this.props.mapScale - this.props.mapPosition.y / this.props.mapScale,
- };
- const newScale = e.deltaY < 0 ?
- this.props.mapScale * MAP_SCALE_PER_EVENT :
- this.props.mapScale / MAP_SCALE_PER_EVENT;
- const boundedScale = Math.min(Math.max(MAP_MIN_SCALE, newScale), MAP_MAX_SCALE);
-
- const newX = -(mousePointsTo.x - this.state.mouseX / boundedScale) * boundedScale;
- const newY = -(mousePointsTo.y - this.state.mouseY / boundedScale) * boundedScale;
-
- this.setPositionWithBoundsCheck(newX, newY);
- this.props.setMapScale(boundedScale);
+ this.props.zoomInOnPosition(e.deltaY < 0, this.state.mouseX, this.state.mouseY);
}
updateMousePosition() {
@@ -95,26 +76,16 @@ class MapStageComponent extends React.Component {
}
moveWithDelta(deltaX, deltaY) {
- this.setPositionWithBoundsCheck(this.props.mapPosition.x + deltaX, this.props.mapPosition.y + deltaY);
- }
-
- setPositionWithBoundsCheck(newX, newY) {
- const scaledMapSize = MAP_SIZE_IN_PIXELS * this.props.mapScale;
- const updatedX = newX > 0 ? 0 :
- (newX < -scaledMapSize + this.props.mapDimensions.width
- ? -scaledMapSize + this.props.mapDimensions.width : newX);
- const updatedY = newY > 0 ? 0 :
- (newY < -scaledMapSize + this.props.mapDimensions.height
- ? -scaledMapSize + this.props.mapDimensions.height : newY);
-
- this.props.setMapPosition(updatedX, updatedY);
+ this.props.setMapPositionWithBoundsCheck(this.props.mapPosition.x + deltaX, this.props.mapPosition.y + deltaY);
}
render() {
return (
<Shortcuts name="MAP" handler={this.handleShortcuts.bind(this)} targetNodeSelector="body">
<Stage
- ref={(stage) => {this.stage = stage;}}
+ ref={(stage) => {
+ this.stage = stage;
+ }}
width={this.props.mapDimensions.width}
height={this.props.mapDimensions.height}
onMouseMove={this.updateMousePosition.bind(this)}
diff --git a/src/components/app/map/controls/ZoomControlComponent.js b/src/components/app/map/controls/ZoomControlComponent.js
index c5628d16..8406e8c1 100644
--- a/src/components/app/map/controls/ZoomControlComponent.js
+++ b/src/components/app/map/controls/ZoomControlComponent.js
@@ -1,26 +1,19 @@
import React from "react";
-import {MAP_MAX_SCALE, MAP_MIN_SCALE, MAP_SCALE_PER_EVENT} from "../MapConstants";
-
-const ZoomControlComponent = ({mapScale, setMapScale}) => {
- const zoom = (out) => {
- const newScale = out ? mapScale / MAP_SCALE_PER_EVENT : mapScale * MAP_SCALE_PER_EVENT;
- const boundedScale = Math.min(Math.max(MAP_MIN_SCALE, newScale), MAP_MAX_SCALE);
- setMapScale(boundedScale);
- };
+const ZoomControlComponent = ({zoomInOnCenter}) => {
return (
<span>
<button
className="btn btn-default btn-circle btn-sm mr-1"
title="Zoom in"
- onClick={() => zoom(false)}
+ onClick={() => zoomInOnCenter(true)}
>
<span className="fa fa-plus"/>
</button>
<button
className="btn btn-default btn-circle btn-sm mr-1"
title="Zoom out"
- onClick={() => zoom(true)}
+ onClick={() => zoomInOnCenter(false)}
>
<span className="fa fa-minus"/>
</button>