From 4d035c645584451925ee533e7bd9e1158b5cf7da Mon Sep 17 00:00:00 2001 From: neoraider Date: Wed, 29 Aug 2007 19:54:05 +0000 Subject: zoomedit: Einige Rauminformationen werden jetzt angezeigt & Name kann ge?ndert werden. --- draw.c | 63 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 33 insertions(+), 30 deletions(-) (limited to 'draw.c') diff --git a/draw.c b/draw.c index d91449c..7ce0d7f 100644 --- a/draw.c +++ b/draw.c @@ -4,7 +4,6 @@ #include "geometry.h" #include #include -#include #include @@ -19,7 +18,7 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) { double step = pow(0.1, depth2); double d; int i; - gchar buffer[20]; + gchar *string; cairo_set_font_size(cr, 10.0/scale); @@ -32,13 +31,15 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) { cairo_move_to(cr, d, rect->y); cairo_line_to(cr, d, rect->y+rect->height); - if(step > 0.2) - g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d)); + if(step > 0.5) + string = g_strdup_printf("%i", (int)rint(d)); else - g_snprintf(buffer, sizeof(buffer), "%.*f", -(int)floor(log10(step*1.1)), d+step/10); - buffer[sizeof(buffer)-1] = '\0'; + string = g_strdup_printf("%.*f", -(int)floor(log10(step*1.1)), d+step/10); + cairo_move_to(cr, d+1/scale, rect->y+11/scale); - cairo_show_text(cr, buffer); + cairo_show_text(cr, string); + + g_free(string); } for(d = rect->y - fmod(rect->y, step) - step; d <= rect->y+rect->height; d+=step) { @@ -46,12 +47,14 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) { cairo_line_to(cr, rect->x+rect->width, d); if(step > 0.5) - g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d)); + string = g_strdup_printf("%i", (int)rint(d)); else - g_snprintf(buffer, sizeof(buffer), "%.*f", -(int)floor(log10(step*1.1)), d+step/10); - buffer[sizeof(buffer)-1] = '\0'; + string = g_strdup_printf("%.*f", -(int)floor(log10(step*1.1)), d+step/10); + cairo_move_to(cr, rect->x+3/scale, d+11/scale); - cairo_show_text(cr, buffer); + cairo_show_text(cr, string); + + g_free(string); } cairo_stroke(cr); @@ -60,30 +63,30 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) { } } -static void room2path(cairo_t *cr, const ROOM *room, const RECTANGLE *rect) { +static void polygon2path(cairo_t *cr, const POLYGON *polygon, const RECTANGLE *rect) { int i; - ROOM room2 = {0, NULL}; + POLYGON polygon2 = {0, NULL}; // no vertices - if(room->nVertices == 0) return; + if(polygon->nVertices == 0) return; if(rect) - simplifyPolygon(room, rect, &room2); + simplifyPolygon(polygon, rect, &polygon2); else - room2 = *room; + polygon2 = *polygon; - if(room2.nVertices == 0) return; + if(polygon2.nVertices == 0) return; cairo_new_sub_path(cr); - for(i = 0; i < room2.nVertices; i++) { - cairo_line_to(cr, room2.vertices[i].x, room2.vertices[i].y); + for(i = 0; i < polygon2.nVertices; i++) { + cairo_line_to(cr, polygon2.vertices[i].x, polygon2.vertices[i].y); } cairo_close_path(cr); - if(rect && room2.vertices) - free(room2.vertices); + if(rect && polygon2.vertices) + free(polygon2.vertices); } gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) { @@ -135,7 +138,7 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) { for(i = 0; i < getLevel()->nRooms; i++) { if(&getLevel()->rooms[i] != getActiveRoom()) - room2path(cr, &getLevel()->rooms[i], &rect); + polygon2path(cr, &getLevel()->rooms[i].polygon, &rect); } cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.3); @@ -145,7 +148,7 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_stroke(cr); if(getEditMode() == EDIT_MODE_SELECTED) { - room2path(cr, getActiveRoom(), &rect); + polygon2path(cr, &getActiveRoom()->polygon, &rect); cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.2); cairo_fill_preserve(cr); @@ -171,7 +174,7 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) { cairo_set_line_width(cr, 2.0/scale); cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER); - room2path(cr, getHoveredRoom(), &rect); + polygon2path(cr, &getHoveredRoom()->polygon, &rect); cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.7); cairo_stroke(cr); @@ -209,9 +212,9 @@ double getImageWidth() { if(level) { for(i = 0; i < level->nRooms; i++) { - for(j = 0; j < level->rooms[i].nVertices; j++) { - min = MIN(min, level->rooms[i].vertices[j].x); - max = MAX(max, level->rooms[i].vertices[j].x); + for(j = 0; j < level->rooms[i].polygon.nVertices; j++) { + min = MIN(min, level->rooms[i].polygon.vertices[j].x); + max = MAX(max, level->rooms[i].polygon.vertices[j].x); } } } @@ -226,9 +229,9 @@ double getImageHeight() { if(level) { for(i = 0; i < level->nRooms; i++) { - for(j = 0; j < level->rooms[i].nVertices; j++) { - min = MIN(min, level->rooms[i].vertices[j].y); - max = MAX(max, level->rooms[i].vertices[j].y); + for(j = 0; j < level->rooms[i].polygon.nVertices; j++) { + min = MIN(min, level->rooms[i].polygon.vertices[j].y); + max = MAX(max, level->rooms[i].polygon.vertices[j].y); } } } -- cgit v1.2.3