diff options
-rw-r--r-- | src/Gui/RenderArea.cpp | 38 | ||||
-rw-r--r-- | src/Gui/RenderArea.h | 29 | ||||
-rw-r--r-- | src/View/TopView.cpp | 44 | ||||
-rw-r--r-- | src/View/TopView.h | 4 | ||||
-rw-r--r-- | src/View/View.h | 7 |
5 files changed, 69 insertions, 53 deletions
diff --git a/src/Gui/RenderArea.cpp b/src/Gui/RenderArea.cpp index 7aa2745..6b6b8ed 100644 --- a/src/Gui/RenderArea.cpp +++ b/src/Gui/RenderArea.cpp @@ -102,10 +102,8 @@ bool RenderArea::onExposeEvent(GdkEventExpose*) { glScalef(scale, scale, 1); glTranslatef(-xCenter, -yCenter, 0); - drawGrid(); - if(view) - view->render(); + view->render(this); glMatrixMode(GL_MODELVIEW); glPopMatrix(); @@ -219,39 +217,5 @@ void RenderArea::updateScrolling() { queue_draw(); } -void RenderArea::drawGrid() { - float depth = 1.25f + 0.04f*zoomLevel; - float depth2 = std::floor(depth); - float step = std::pow(0.1f, depth2); - float f; - int i; - float x1 = xCenter-getViewWidth()/2, y1 = yCenter-getViewHeight()/2; - float x2 = xCenter+getViewWidth()/2, y2 = yCenter+getViewHeight()/2; - - - glLineWidth(1.0f); - - glBegin(GL_LINES); - - for(i = 0; 0.4f*(depth-depth2+i-1) < 0.5f; i++) { - f = std::min(0.4f*(depth-depth2+i), 0.5f); - glColor3f(f, f, f); - - for(f = x1 - std::fmod(x1, step); f <= x2; f+=step) { - glVertex2f(f, y1); - glVertex2f(f, y2); - } - - for(f = y1 - std::fmod(y1, step); f <= y2; f+=step) { - glVertex2f(x1, f); - glVertex2f(x2, f); - } - - step *= 10; - } - - glEnd(); -} - } } diff --git a/src/Gui/RenderArea.h b/src/Gui/RenderArea.h index 123c50f..c47c56d 100644 --- a/src/Gui/RenderArea.h +++ b/src/Gui/RenderArea.h @@ -43,6 +43,22 @@ class RenderArea : public Gtk::DrawingArea { queue_draw(); } + float getViewWidth() const { + return get_width()/scale; + } + + float getViewHeight() const { + return get_height()/scale; + } + + float getImageWidth() const {return 10;} + float getImageHeight() const {return 10;} + + float getScale() const {return scale;} + + float getXCenter() const {return xCenter;} + float getYCenter() const {return yCenter;} + private: static GdkGLConfig *glconfig; @@ -67,19 +83,6 @@ class RenderArea : public Gtk::DrawingArea { void updateScrollbars(float x = 0.5f, float y = 0.5f); void updateScrolling(); - void drawGrid(); - - float getViewWidth() const { - return get_width()/scale; - } - - float getViewHeight() const { - return get_height()/scale; - } - - float getImageWidth() const {return 10;} - float getImageHeight() const {return 10;} - bool gdkGLBegin() { GtkWidget *widget = GTK_WIDGET(gobj()); diff --git a/src/View/TopView.cpp b/src/View/TopView.cpp index 38d4824..684f4ef 100644 --- a/src/View/TopView.cpp +++ b/src/View/TopView.cpp @@ -21,11 +21,51 @@ #include <Data/Level.h> #include <Data/Room.h> #include <Data/Triangle.h> +#include <Gui/RenderArea.h> #include <GL/gl.h> +#include <cmath> namespace ZoomEdit { namespace View { +void TopView::drawGrid(Gui::RenderArea *renderArea) { + float depth = std::log10(renderArea->getScale())-0.75f; + float depth2 = std::floor(depth); + float step = std::pow(0.1f, depth2); + float x1, x2; + float y1, y2; + float width = renderArea->getViewWidth(); + float height = renderArea->getViewHeight(); + + x1 = x2 = renderArea->getXCenter(); + y1 = y2 = renderArea->getYCenter(); + x1 -= width/2; x2 += width/2; + y1 -= height/2; y2 += height/2; + + glLineWidth(1.0f); + + glBegin(GL_LINES); + + for(int i = 0; 0.4f*(depth-depth2+i-1) < 0.5f; i++) { + float f = std::min(0.4f*(depth-depth2+i), 0.5f); + glColor3f(f, f, f); + + for(f = x1 - std::fmod(x1, step); f <= x2; f+=step) { + glVertex2f(f, y1); + glVertex2f(f, y2); + } + + for(f = y1 - std::fmod(y1, step); f <= y2; f+=step) { + glVertex2f(x1, f); + glVertex2f(x2, f); + } + + step *= 10; + } + + glEnd(); +} + void TopView::renderRoom(Data::Room *room) { const std::list<Data::Triangle*> &floor = room->getFloorTriangles(); @@ -43,7 +83,9 @@ void TopView::renderRoom(Data::Room *room) { glEnd(); } -void TopView::render() { +void TopView::render(Gui::RenderArea *renderArea) { + drawGrid(renderArea); + if(!level) return; diff --git a/src/View/TopView.h b/src/View/TopView.h index 5141e51..844faa5 100644 --- a/src/View/TopView.h +++ b/src/View/TopView.h @@ -35,6 +35,8 @@ class TopView : public View { private: Data::Level *level; + void drawGrid(Gui::RenderArea *renderArea); + void renderRoom(Data::Room *room); public: @@ -43,7 +45,7 @@ class TopView : public View { Data::Level* getLevel() {return level;} void setLevel(Data::Level *level0) {level = level0;} - virtual void render(); + virtual void render(Gui::RenderArea *renderArea); }; } diff --git a/src/View/View.h b/src/View/View.h index 32c201e..cdf27aa 100644 --- a/src/View/View.h +++ b/src/View/View.h @@ -21,13 +21,18 @@ #define ZOOMEDIT_VIEW_H_ namespace ZoomEdit { + +namespace Gui { +class RenderArea; +} + namespace View { class View { public: virtual ~View() {} - virtual void render() = 0; + virtual void render(Gui::RenderArea *renderArea) = 0; }; } |