zoomedit:
* Moved grid drawing code to TopView
This commit is contained in:
parent
85e58bd658
commit
7c929e6e1c
5 changed files with 69 additions and 53 deletions
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue