#ifndef ZOOMEDIT_GUI_RENDERAREA_H_ #define ZOOMEDIT_GUI_RENDERAREA_H_ #include #include #include #include namespace ZoomEdit { namespace Gui { class RenderArea : public Gtk::DrawingArea { public: RenderArea(BaseObjectType *cobject, const Glib::RefPtr &xml); private: static GdkGLConfig *glconfig; Gtk::HScrollbar *hScrollbar; Gtk::VScrollbar *vScrollbar; float xCenter, yCenter; int zoomLevel; float scale; void onRealize(); bool onConfigureEvent(GdkEventConfigure *event); bool onExposeEvent(GdkEventExpose *event); bool onScrollEvent(GdkEventScroll *event); void zoom(int zoom, float x = 0.5f, float y = 0.5f); void updateViewport(); void updateScrollbars(float x = 0.5f, float y = 0.5f); 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() { GtkWidget *widget = GTK_WIDGET(gobj()); return gdk_gl_drawable_gl_begin(gtk_widget_get_gl_drawable(widget), gtk_widget_get_gl_context(widget)); } void gdkSwapBuffers() { gdk_gl_drawable_swap_buffers(gtk_widget_get_gl_drawable(GTK_WIDGET(gobj()))); } void gdkGLEnd() { gdk_gl_drawable_gl_end(gtk_widget_get_gl_drawable(GTK_WIDGET(gobj()))); } }; } } #endif /*ZOOMEDIT_GUI_RENDERAREA_H_*/