summaryrefslogtreecommitdiffstats
path: root/src/Gui/RenderArea.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Gui/RenderArea.cpp')
-rw-r--r--src/Gui/RenderArea.cpp56
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;