diff options
Diffstat (limited to 'src/Gui/RenderArea.cpp')
-rw-r--r-- | src/Gui/RenderArea.cpp | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/src/Gui/RenderArea.cpp b/src/Gui/RenderArea.cpp index b6686f5..41f76a6 100644 --- a/src/Gui/RenderArea.cpp +++ b/src/Gui/RenderArea.cpp @@ -52,35 +52,45 @@ RenderArea::RenderArea(BaseObjectType *cobject, const Glib::RefPtr<Gnome::Glade: gtk_widget_set_gl_capability(GTK_WIDGET(cobject), glconfig, 0, TRUE, GDK_GL_RGBA_TYPE); } +void RenderArea::setView(View::View *view0) { + view = view0; + + if(viewUpdate) + viewUpdate.disconnect(); + + if(view) { + viewUpdate = view->signalUpdate().connect(sigc::mem_fun(this, &RenderArea::queue_draw)); + + if(is_realized()) { + if(!gdkGLBegin()) + return; + + view->init(); + view->resize(get_width(), get_height()); + + gdkGLEnd(); + + queue_draw(); + } + } +} + void RenderArea::onRealize() { if(!gdkGLBegin()) return; - glClearColor(0, 0, 0, 0); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); + if(view) + view->init(); gdkGLEnd(); } -bool RenderArea::onConfigureEvent(GdkEventConfigure*) { +bool RenderArea::onConfigureEvent(GdkEventConfigure *event) { if(!gdkGLBegin()) return false; - glViewport(0, 0, get_width(), get_height()); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - if(get_width() != 0 && get_height() != 0) - glScalef(2.0f/get_width(), -2.0f/get_height(), 1); + if(view) + view->resize(event->width, event->height); gdkGLEnd(); @@ -94,7 +104,7 @@ bool RenderArea::onExposeEvent(GdkEventExpose*) { return false; if(view) - view->render(this); + view->render(); gdkSwapBuffers(); gdkGLEnd(); @@ -106,10 +116,10 @@ bool RenderArea::onScrollEvent(GdkEventScroll *event) { if(view) { switch(event->direction) { case GDK_SCROLL_UP: - view->zoom(this, 1, event->x - get_width()/2, event->y - get_height()/2); + view->zoom(1, event->x - get_width()/2, event->y - get_height()/2); return true; case GDK_SCROLL_DOWN: - view->zoom(this, -1, event->x - get_width()/2, event->y - get_height()/2); + view->zoom(-1, event->x - get_width()/2, event->y - get_height()/2); return true; default: return false; @@ -121,7 +131,7 @@ bool RenderArea::onScrollEvent(GdkEventScroll *event) { bool RenderArea::onButtonPressEvent(GdkEventButton *event) { if(view && event->button == 1) - view->click(this, event->x, event->y); + view->click(event->x, event->y); return true; } @@ -150,7 +160,7 @@ bool RenderArea::onMotionNotifyEvent(GdkEventMotion *event) { } if(view) - view->move(this, xHover - event->x, yHover - event->y, event->state); + view->move(xHover - event->x, yHover - event->y, event->state); xHover = event->x; yHover = event->y; |