From 65bcb3040dfae00625a95ae1ffd02720513ded13 Mon Sep 17 00:00:00 2001 From: neoraider Date: Tue, 23 Oct 2007 19:08:04 +0000 Subject: zoomedit: Renderer in Klasse gekapselt. --- Drawer.cpp | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'Drawer.cpp') 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 #include @@ -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++) { -- cgit v1.2.3