From 1d6f52984dfef698516ae3fef142c80c2029fc7b Mon Sep 17 00:00:00 2001 From: neoraider Date: Sat, 3 May 2008 13:05:01 +0000 Subject: zoomedit: * Some MapView improvements --- src/Gui/RenderArea.cpp | 4 ++-- src/View/MapView.cpp | 28 ++++++++++++++++++++++++++++ src/View/MapView.h | 2 ++ src/View/TopView.cpp | 5 ++++- src/View/TopView.h | 2 +- src/View/View.h | 2 +- 6 files changed, 38 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Gui/RenderArea.cpp b/src/Gui/RenderArea.cpp index 2611102..b6686f5 100644 --- a/src/Gui/RenderArea.cpp +++ b/src/Gui/RenderArea.cpp @@ -149,8 +149,8 @@ bool RenderArea::onMotionNotifyEvent(GdkEventMotion *event) { return true; } - if(event->state & GDK_BUTTON3_MASK && view) - view->move(this, xHover - event->x, yHover - event->y); + if(view) + view->move(this, xHover - event->x, yHover - event->y, event->state); xHover = event->x; yHover = event->y; diff --git a/src/View/MapView.cpp b/src/View/MapView.cpp index 69c9d2f..5727c86 100644 --- a/src/View/MapView.cpp +++ b/src/View/MapView.cpp @@ -30,6 +30,34 @@ namespace ZoomEdit { namespace View { +void MapView::zoom(Gui::RenderArea*, int zoom, float, float) { + if(!mainArea) + return; + + TopView *mainView = dynamic_cast(mainArea->getView()); + if(!mainView) + return; + + mainView->zoom(mainArea, zoom, 0, 0); +} + +void MapView::move(Gui::RenderArea*, float x, float y, unsigned int state) { + if(!mainArea) + return; + + TopView *mainView = dynamic_cast(mainArea->getView()); + if(!mainView) + return; + + if(!(state & GDK_BUTTON1_MASK)) + return; + + mainView->setXCenter(mainView->getXCenter() - x/scale); + mainView->setYCenter(mainView->getYCenter() - y/scale); + + mainArea->queue_draw(); +} + void MapView::click(Gui::RenderArea *renderArea, float x, float y) { if(!mainArea) return; diff --git a/src/View/MapView.h b/src/View/MapView.h index b60304b..2fb0df4 100644 --- a/src/View/MapView.h +++ b/src/View/MapView.h @@ -52,6 +52,8 @@ class MapView : public View { Gui::RenderArea* getMainArea() {return mainArea;} void setMainArea(Gui::RenderArea *mainArea0) {mainArea = mainArea0;} + virtual void zoom(Gui::RenderArea*, int zoom, float, float); + virtual void move(Gui::RenderArea*, float x, float y, unsigned int state); virtual void click(Gui::RenderArea *renderArea, float x, float y); virtual void render(Gui::RenderArea *renderArea); diff --git a/src/View/TopView.cpp b/src/View/TopView.cpp index e0004fb..29fc242 100644 --- a/src/View/TopView.cpp +++ b/src/View/TopView.cpp @@ -152,7 +152,10 @@ void TopView::zoom(Gui::RenderArea *renderArea, int zoom, float x, float y) { renderArea->queue_draw(); } -void TopView::move(Gui::RenderArea *renderArea, float x, float y) { +void TopView::move(Gui::RenderArea *renderArea, float x, float y, unsigned int state) { + if(!(state & GDK_BUTTON3_MASK)) + return; + xCenter += x/scale; yCenter += y/scale; diff --git a/src/View/TopView.h b/src/View/TopView.h index b6221f9..1fa81ad 100644 --- a/src/View/TopView.h +++ b/src/View/TopView.h @@ -66,7 +66,7 @@ class TopView : public View { void setLevel(Data::Level *level0) {level = level0;} virtual void zoom(Gui::RenderArea *renderArea, int zoom, float x, float y); - virtual void move(Gui::RenderArea *renderArea, float x, float y); + virtual void move(Gui::RenderArea *renderArea, float x, float y, unsigned int state); virtual void render(Gui::RenderArea *renderArea); diff --git a/src/View/View.h b/src/View/View.h index f6a8606..446a4f6 100644 --- a/src/View/View.h +++ b/src/View/View.h @@ -35,7 +35,7 @@ class View { virtual void render(Gui::RenderArea *renderArea) = 0; virtual void zoom(Gui::RenderArea*, int, float, float) {} - virtual void move(Gui::RenderArea*, float, float) {} + virtual void move(Gui::RenderArea*, float, float, unsigned int) {} virtual void click(Gui::RenderArea*, float, float) {} }; -- cgit v1.2.3