summaryrefslogtreecommitdiffstats
path: root/draw.c
diff options
context:
space:
mode:
authorneoraider <devnull@localhost>2007-06-21 21:52:03 +0200
committerneoraider <devnull@localhost>2007-06-21 21:52:03 +0200
commit84361f7a9e03f76e7ea90f48239825dc5bca07e9 (patch)
tree60eb7a4611cef032d0d4689f2fc19a769353c8e1 /draw.c
downloadzoomedit-84361f7a9e03f76e7ea90f48239825dc5bca07e9.tar
zoomedit-84361f7a9e03f76e7ea90f48239825dc5bca07e9.zip
zoomedit: Added level editor zoomedit.
Diffstat (limited to 'draw.c')
-rw-r--r--draw.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/draw.c b/draw.c
new file mode 100644
index 0000000..11840ee
--- /dev/null
+++ b/draw.c
@@ -0,0 +1,86 @@
+#include "draw.h"
+#include "level.h"
+#include <gtk/gtk.h>
+#include <cairo/cairo.h>
+
+
+static double scale = 100.0;
+static double xTranslate = 0.0, yTranslate = 0.0;
+
+static void room2path(cairo_t *cr, ROOM *room) {
+ int i;
+
+
+ if(room->nVertices == 0) return;
+
+ cairo_move_to(cr, room->vertices[0].x, room->vertices[0].y);
+
+ for(i = 1; i < room->nVertices; i++)
+ cairo_line_to(cr, room->vertices[i].x, room->vertices[i].y);
+
+ cairo_close_path(cr);
+}
+
+gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
+ VERTEX vertices[4] = {{-1,-1}, {-1,1}, {1,1}, {1,-1}};
+ ROOM room = {sizeof(vertices)/sizeof(vertices[0]), vertices};
+ LEVEL lvl = {1, &room};
+ cairo_t *cr;
+ int i;
+
+
+ cr = gdk_cairo_create(widget->window);
+
+ cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height);
+ cairo_clip(cr);
+
+ cairo_translate(cr, getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate);
+ cairo_scale(cr, scale, scale);
+
+ cairo_set_line_width(cr, 1.0/scale);
+
+ for(i = 0; i < lvl.nRooms; i++)
+ room2path(cr, &lvl.rooms[i]);
+
+ cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.3);
+ cairo_fill_preserve(cr);
+
+ cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.7);
+ cairo_stroke(cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+double getScale() {
+ return scale;
+}
+
+void setScale(double s) {
+ scale = s;
+}
+
+double getImageWidth() {
+ return 5*scale;
+}
+
+double getImageHeight() {
+ return 5*scale;
+}
+
+double getXTranslate() {
+ return xTranslate;
+}
+
+void setXTranslate(double x) {
+ xTranslate = x;
+}
+
+double getYTranslate() {
+ return yTranslate;
+}
+
+void setYTranslate(double y) {
+ yTranslate = y;
+}