#include "draw.h" #include "level.h" #include #include 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; }