summaryrefslogtreecommitdiffstats
path: root/draw.c
diff options
context:
space:
mode:
authorneoraider <devnull@localhost>2007-08-29 21:54:05 +0200
committerneoraider <devnull@localhost>2007-08-29 21:54:05 +0200
commit4d035c645584451925ee533e7bd9e1158b5cf7da (patch)
tree14492f3f2501771dca28a4b0cba9376a1bfead85 /draw.c
parent22da7179ace053f399d43bce061d81aac98f3c4c (diff)
downloadzoomedit-4d035c645584451925ee533e7bd9e1158b5cf7da.tar
zoomedit-4d035c645584451925ee533e7bd9e1158b5cf7da.zip
zoomedit: Einige Rauminformationen werden jetzt angezeigt & Name kann ge?ndert werden.
Diffstat (limited to 'draw.c')
-rw-r--r--draw.c63
1 files changed, 33 insertions, 30 deletions
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 <math.h>
#include <gtk/gtk.h>
-#include <glib/gprintf.h>
#include <cairo/cairo.h>
@@ -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);
}
}
}