summaryrefslogtreecommitdiffstats
path: root/Drawer.h
diff options
context:
space:
mode:
Diffstat (limited to 'Drawer.h')
-rw-r--r--Drawer.h57
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_*/