diff options
Diffstat (limited to 'Drawer.h')
-rw-r--r-- | Drawer.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Drawer.h b/Drawer.h new file mode 100644 index 0000000..4cc0e2b --- /dev/null +++ b/Drawer.h @@ -0,0 +1,57 @@ +#ifndef DRAWER_H_ +#define DRAWER_H_ + +#include <gtk/gtk.h> +#include <gtk/gtkgl.h> + + +class Window; + + +class Drawer { + private: + GtkWidget *drawer; + GtkWidget *drawingArea; + GtkAdjustment *hAdjustment, *vAdjustment; + int zoomExp; + + Window *window; + + // prevent shallow copy + Drawer(const Drawer &w); + const Drawer& operator=(const Drawer &w); + + void updateViewport(); + void updateScrolling(); + void updateScrollbars(float x = 0.5f, float y = 0.5f); + + void updateHoveredPoint(float x, float y); + + gint getWidth() const { + return drawingArea->allocation.width; + } + + gint getHeight() const { + return drawingArea->allocation.height; + } + + static void realize(GtkWidget *widget, Drawer *drawer); + static gboolean eventHandler(GtkWidget *widget, GdkEvent *event, Drawer *drawer); + static void valueChanged(GtkAdjustment *adjustment, Drawer *drawer); + + public: + Drawer(Window *window, GdkGLConfig *glconfig); + virtual ~Drawer(); + + void zoom(int zoom, float x = 0.5f, float y = 0.5f); + + GtkWidget *getWidget() { + return drawer; + } + + void update() { + gtk_widget_queue_draw(drawingArea); + } +}; + +#endif /*DRAWER_H_*/ |