summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Gui/RenderArea.cpp38
-rw-r--r--src/Gui/RenderArea.h29
-rw-r--r--src/View/TopView.cpp44
-rw-r--r--src/View/TopView.h4
-rw-r--r--src/View/View.h7
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;
};
}