From 1a2e3a11fcbf880e479806d188bf2b265451d91d Mon Sep 17 00:00:00 2001 From: jacob1 Date: Sat, 10 Jan 2015 13:35:23 -0500 Subject: [PATCH] cancel drawing when the mouse moves in / out of the zoom window, fixes #228 --- src/gui/game/GameController.cpp | 14 ++++++++++++++ src/gui/game/GameController.h | 1 + src/gui/game/GameModel.cpp | 14 ++++++++++++++ src/gui/game/GameModel.h | 1 + src/gui/game/GameView.cpp | 18 ++++++++++++++---- src/gui/game/GameView.h | 1 + 6 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/gui/game/GameController.cpp b/src/gui/game/GameController.cpp index 6837318aa..14eb60d5f 100644 --- a/src/gui/game/GameController.cpp +++ b/src/gui/game/GameController.cpp @@ -379,6 +379,20 @@ void GameController::AdjustZoomSize(int direction, bool logarithmic) gameModel->SetZoomFactor(newZoomFactor); } +bool GameController::MouseInZoom(ui::Point position) +{ + if(position.X >= XRES) + position.X = XRES-1; + if(position.Y >= YRES) + position.Y = YRES-1; + if(position.Y < 0) + position.Y = 0; + if(position.X < 0) + position.X = 0; + + return gameModel->MouseInZoom(position); +} + ui::Point GameController::PointTranslate(ui::Point point) { if(point.X >= XRES) diff --git a/src/gui/game/GameController.h b/src/gui/game/GameController.h index c62a4836d..492eb9abe 100644 --- a/src/gui/game/GameController.h +++ b/src/gui/game/GameController.h @@ -141,6 +141,7 @@ public: void FrameStep(); void TranslateSave(ui::Point point); void TransformSave(matrix2d transform); + bool MouseInZoom(ui::Point position); ui::Point PointTranslate(ui::Point point); ui::Point NormaliseBlockCoord(ui::Point point); std::string ElementResolve(int type, int ctype); diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp index 87c7e26d8..b04b91343 100644 --- a/src/gui/game/GameModel.cpp +++ b/src/gui/game/GameModel.cpp @@ -691,6 +691,20 @@ ui::Point GameModel::GetZoomPosition() return ren->zoomScopePosition; } +bool GameModel::MouseInZoom(ui::Point position) +{ + if (!GetZoomEnabled()) + return false; + + int zoomFactor = GetZoomFactor(); + ui::Point zoomWindowPosition = GetZoomWindowPosition(); + ui::Point zoomWindowSize = ui::Point(GetZoomSize()*zoomFactor, GetZoomSize()*zoomFactor); + + if (position.X >= zoomWindowPosition.X && position.X >= zoomWindowPosition.Y && position.X <= zoomWindowPosition.X+zoomWindowSize.X && position.Y <= zoomWindowPosition.Y+zoomWindowSize.Y) + return true; + return false; +} + ui::Point GameModel::AdjustZoomCoords(ui::Point position) { if (!GetZoomEnabled()) diff --git a/src/gui/game/GameModel.h b/src/gui/game/GameModel.h index c4c8de811..581ceab1d 100644 --- a/src/gui/game/GameModel.h +++ b/src/gui/game/GameModel.h @@ -181,6 +181,7 @@ public: int GetZoomFactor(); void SetZoomPosition(ui::Point position); ui::Point GetZoomPosition(); + bool MouseInZoom(ui::Point position); ui::Point AdjustZoomCoords(ui::Point position); void SetZoomWindowPosition(ui::Point position); ui::Point GetZoomWindowPosition(); diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp index a3be1c0e1..3e11488bc 100644 --- a/src/gui/game/GameView.cpp +++ b/src/gui/game/GameView.cpp @@ -158,6 +158,7 @@ GameView::GameView(): toolIndex(0), zoomEnabled(false), zoomCursorFixed(false), + mouseInZoom(false), drawPoint1(0, 0), drawPoint2(0, 0), drawMode(DrawPoints), @@ -1040,6 +1041,7 @@ void GameView::setToolButtonOffset(int offset) void GameView::OnMouseMove(int x, int y, int dx, int dy) { + bool newMouseInZoom = c->MouseInZoom(ui::Point(x, y)); mousePosition = c->PointTranslate(ui::Point(x, y)); currentMouse = ui::Point(x, y); if (selectMode != SelectNone) @@ -1048,13 +1050,21 @@ void GameView::OnMouseMove(int x, int y, int dx, int dy) selectPoint1 = c->PointTranslate(ui::Point(x, y)); if (selectPoint1.X != -1) selectPoint2 = c->PointTranslate(ui::Point(x, y)); - return; } - if (isMouseDown && drawMode == DrawPoints) + else if (isMouseDown) { - pointQueue.push(ui::Point(c->PointTranslate(ui::Point(x-dx, y-dy)))); - pointQueue.push(ui::Point(c->PointTranslate(ui::Point(x, y)))); + if (newMouseInZoom == mouseInZoom) + { + if (drawMode == DrawPoints) + { + pointQueue.push(ui::Point(c->PointTranslate(ui::Point(x-dx, y-dy)))); + pointQueue.push(ui::Point(c->PointTranslate(ui::Point(x, y)))); + } + } + else if (drawMode == DrawPoints || drawMode == DrawFill) + isMouseDown = false; } + mouseInZoom = newMouseInZoom; } void GameView::OnMouseDown(int x, int y, unsigned button) diff --git a/src/gui/game/GameView.h b/src/gui/game/GameView.h index 5ccc8ca3c..80a58f54d 100644 --- a/src/gui/game/GameView.h +++ b/src/gui/game/GameView.h @@ -43,6 +43,7 @@ private: bool isMouseDown; bool zoomEnabled; bool zoomCursorFixed; + bool mouseInZoom; bool drawSnap; bool shiftBehaviour; bool ctrlBehaviour;