summaryrefslogtreecommitdiffstats
path: root/Drawer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Drawer.cpp')
-rw-r--r--Drawer.cpp42
1 files changed, 35 insertions, 7 deletions
diff --git a/Drawer.cpp b/Drawer.cpp
index 1a80997..5b6a6d5 100644
--- a/Drawer.cpp
+++ b/Drawer.cpp
@@ -1,6 +1,5 @@
#include "Drawer.h"
#include "Window.h"
-#include "draw.h"
#include <GL/gl.h>
#include <math.h>
@@ -33,7 +32,7 @@ gboolean Drawer::eventHandler(GtkWidget *widget, GdkEvent *event, Drawer *drawer
return TRUE;
case GDK_EXPOSE:
- drawTopView(widget, &event->expose, drawer->window, drawer);
+ drawer->render();
return TRUE;
case GDK_MOTION_NOTIFY:
@@ -147,7 +146,36 @@ void Drawer::updateHoveredPoint(float x, float y) {
window->getEditManager().setHoveredVertex(&v);
}
-Drawer::Drawer(Window *window, GdkGLConfig *glconfig) {
+void Drawer::render() {
+ GdkGLContext *context = gtk_widget_get_gl_context(drawingArea);
+ GdkGLDrawable *drawable = gtk_widget_get_gl_drawable(drawingArea);
+
+ Rectangle rect(0, 0, drawingArea->allocation.width, drawingArea->allocation.height);
+
+ viewToImage(&rect.getVertex1());
+ viewToImage(&rect.getVertex2());
+
+ if(!gdk_gl_drawable_gl_begin(drawable, context))
+ return;
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+
+ glTranslatef(getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate, 0);
+ glScalef(scale, scale, 1);
+
+ renderer.render(window->getLevel(), rect, scale);
+
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+
+ gdk_gl_drawable_swap_buffers(drawable);
+ gdk_gl_drawable_gl_end(drawable);
+}
+
+Drawer::Drawer(Window *window, GdkGLConfig *glconfig)
+ : renderer(&window->getEditManager())
+{
this->window = window;
zoomExp = 0;
scale = 100;
@@ -196,17 +224,17 @@ void Drawer::zoom(int zoom, float x, float y) {
updateScrollbars(x, y);
}
-void Drawer::imageToView(Vertex *v) {
+void Drawer::imageToView(Vertex *v) const {
v->setX(v->getX()*scale+getImageWidth()/2-xTranslate);
v->setY(v->getY()*scale+getImageHeight()/2-yTranslate);
}
-void Drawer::viewToImage(Vertex *v) {
+void Drawer::viewToImage(Vertex *v) const {
v->setX((v->getX()-getImageWidth()/2+xTranslate)/scale);
v->setY((v->getY()-getImageHeight()/2+yTranslate)/scale);
}
-float Drawer::getImageWidth() {
+float Drawer::getImageWidth() const {
float min = 0, max = 0;
for(Level::iterator room = window->getLevel().begin(); room != window->getLevel().end(); room++) {
@@ -219,7 +247,7 @@ float Drawer::getImageWidth() {
return (max-min+10)*scale;
}
-float Drawer::getImageHeight() {
+float Drawer::getImageHeight() const {
float min = 0, max = 0;
for(Level::iterator room = window->getLevel().begin(); room != window->getLevel().end(); room++) {