zoomedit:

* Moved grid drawing code to TopView
This commit is contained in:
neoraider 2008-04-15 10:26:05 +00:00
parent 85e58bd658
commit 7c929e6e1c
5 changed files with 69 additions and 53 deletions

View file

@ -102,10 +102,8 @@ bool RenderArea::onExposeEvent(GdkEventExpose*) {
glScalef(scale, scale, 1); glScalef(scale, scale, 1);
glTranslatef(-xCenter, -yCenter, 0); glTranslatef(-xCenter, -yCenter, 0);
drawGrid();
if(view) if(view)
view->render(); view->render(this);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glPopMatrix(); glPopMatrix();
@ -219,39 +217,5 @@ void RenderArea::updateScrolling() {
queue_draw(); 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();
}
} }
} }

View file

@ -43,6 +43,22 @@ class RenderArea : public Gtk::DrawingArea {
queue_draw(); 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: private:
static GdkGLConfig *glconfig; static GdkGLConfig *glconfig;
@ -67,19 +83,6 @@ class RenderArea : public Gtk::DrawingArea {
void updateScrollbars(float x = 0.5f, float y = 0.5f); void updateScrollbars(float x = 0.5f, float y = 0.5f);
void updateScrolling(); 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() { bool gdkGLBegin() {
GtkWidget *widget = GTK_WIDGET(gobj()); GtkWidget *widget = GTK_WIDGET(gobj());

View file

@ -21,11 +21,51 @@
#include <Data/Level.h> #include <Data/Level.h>
#include <Data/Room.h> #include <Data/Room.h>
#include <Data/Triangle.h> #include <Data/Triangle.h>
#include <Gui/RenderArea.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <cmath>
namespace ZoomEdit { namespace ZoomEdit {
namespace View { 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) { void TopView::renderRoom(Data::Room *room) {
const std::list<Data::Triangle*> &floor = room->getFloorTriangles(); const std::list<Data::Triangle*> &floor = room->getFloorTriangles();
@ -43,7 +83,9 @@ void TopView::renderRoom(Data::Room *room) {
glEnd(); glEnd();
} }
void TopView::render() { void TopView::render(Gui::RenderArea *renderArea) {
drawGrid(renderArea);
if(!level) if(!level)
return; return;

View file

@ -35,6 +35,8 @@ class TopView : public View {
private: private:
Data::Level *level; Data::Level *level;
void drawGrid(Gui::RenderArea *renderArea);
void renderRoom(Data::Room *room); void renderRoom(Data::Room *room);
public: public:
@ -43,7 +45,7 @@ class TopView : public View {
Data::Level* getLevel() {return level;} Data::Level* getLevel() {return level;}
void setLevel(Data::Level *level0) {level = level0;} void setLevel(Data::Level *level0) {level = level0;}
virtual void render(); virtual void render(Gui::RenderArea *renderArea);
}; };
} }

View file

@ -21,13 +21,18 @@
#define ZOOMEDIT_VIEW_H_ #define ZOOMEDIT_VIEW_H_
namespace ZoomEdit { namespace ZoomEdit {
namespace Gui {
class RenderArea;
}
namespace View { namespace View {
class View { class View {
public: public:
virtual ~View() {} virtual ~View() {}
virtual void render() = 0; virtual void render(Gui::RenderArea *renderArea) = 0;
}; };
} }