zoomedit: Ein paar kleine Bugs gel?st.
This commit is contained in:
parent
f10436d816
commit
22da7179ac
1 changed files with 19 additions and 14 deletions
33
draw.c
33
draw.c
|
@ -32,8 +32,6 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) {
|
||||||
cairo_move_to(cr, d, rect->y);
|
cairo_move_to(cr, d, rect->y);
|
||||||
cairo_line_to(cr, d, rect->y+rect->height);
|
cairo_line_to(cr, d, rect->y+rect->height);
|
||||||
|
|
||||||
cairo_stroke(cr);
|
|
||||||
|
|
||||||
if(step > 0.2)
|
if(step > 0.2)
|
||||||
g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d));
|
g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d));
|
||||||
else
|
else
|
||||||
|
@ -47,8 +45,6 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) {
|
||||||
cairo_move_to(cr, rect->x, d);
|
cairo_move_to(cr, rect->x, d);
|
||||||
cairo_line_to(cr, rect->x+rect->width, d);
|
cairo_line_to(cr, rect->x+rect->width, d);
|
||||||
|
|
||||||
cairo_stroke(cr);
|
|
||||||
|
|
||||||
if(step > 0.5)
|
if(step > 0.5)
|
||||||
g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d));
|
g_snprintf(buffer, sizeof(buffer), "%i", (int)rint(d));
|
||||||
else
|
else
|
||||||
|
@ -58,6 +54,8 @@ static void drawGrid(cairo_t *cr, const RECTANGLE *rect) {
|
||||||
cairo_show_text(cr, buffer);
|
cairo_show_text(cr, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cairo_stroke(cr);
|
||||||
|
|
||||||
step *= 10;
|
step *= 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +88,8 @@ static void room2path(cairo_t *cr, const ROOM *room, const RECTANGLE *rect) {
|
||||||
|
|
||||||
gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
RECTANGLE rect = {-1, -1, widget->allocation.width+2, widget->allocation.height+2};
|
VERTEX v1 = {-1, -1}, v2 = {widget->allocation.width+1, widget->allocation.height+1};
|
||||||
|
RECTANGLE rect;
|
||||||
static GdkPixmap *pixmap = NULL;
|
static GdkPixmap *pixmap = NULL;
|
||||||
static double lastImageWidth = 0.0, lastImageHeight = 0.0;
|
static double lastImageWidth = 0.0, lastImageHeight = 0.0;
|
||||||
static gint lastWidth = 0.0, lastHeight = 0.0;
|
static gint lastWidth = 0.0, lastHeight = 0.0;
|
||||||
|
@ -99,6 +98,14 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
||||||
|
|
||||||
if(getLevel() == NULL) return FALSE;
|
if(getLevel() == NULL) return FALSE;
|
||||||
|
|
||||||
|
viewToImage(&v1);
|
||||||
|
viewToImage(&v2);
|
||||||
|
|
||||||
|
rect.x = v1.x;
|
||||||
|
rect.y = v1.y;
|
||||||
|
rect.width = v2.x-v1.x;
|
||||||
|
rect.height = v2.y-v1.y;
|
||||||
|
|
||||||
if(pixmap == NULL || lastImageWidth != getImageWidth() || lastImageHeight != getImageHeight() ||
|
if(pixmap == NULL || lastImageWidth != getImageWidth() || lastImageHeight != getImageHeight() ||
|
||||||
lastWidth != widget->allocation.width || lastHeight != widget->allocation.height || repaint)
|
lastWidth != widget->allocation.width || lastHeight != widget->allocation.height || repaint)
|
||||||
{
|
{
|
||||||
|
@ -115,19 +122,15 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
||||||
|
|
||||||
cr = gdk_cairo_create(GDK_DRAWABLE(pixmap));
|
cr = gdk_cairo_create(GDK_DRAWABLE(pixmap));
|
||||||
|
|
||||||
cairo_set_source_rgb(cr, 0, 0, 0);
|
|
||||||
cairo_rectangle(cr, 0, 0, widget->allocation.width, widget->allocation.height);
|
|
||||||
cairo_fill(cr);
|
|
||||||
|
|
||||||
cairo_translate(cr, getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate);
|
cairo_translate(cr, getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate);
|
||||||
cairo_scale(cr, scale, scale);
|
cairo_scale(cr, scale, scale);
|
||||||
|
|
||||||
cairo_device_to_user(cr, &rect.x, &rect.y);
|
|
||||||
cairo_device_to_user_distance(cr, &rect.width, &rect.height);
|
|
||||||
|
|
||||||
cairo_set_line_width(cr, 1.0/scale);
|
cairo_set_line_width(cr, 1.0/scale);
|
||||||
cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
|
cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
|
||||||
|
|
||||||
|
cairo_set_source_rgb(cr, 0, 0, 0);
|
||||||
|
cairo_paint(cr);
|
||||||
|
|
||||||
drawGrid(cr, &rect);
|
drawGrid(cr, &rect);
|
||||||
|
|
||||||
for(i = 0; i < getLevel()->nRooms; i++) {
|
for(i = 0; i < getLevel()->nRooms; i++) {
|
||||||
|
@ -157,7 +160,9 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
||||||
|
|
||||||
gdk_draw_drawable(GDK_DRAWABLE(widget->window), widget->style->fg_gc[GTK_WIDGET_STATE(widget)], GDK_DRAWABLE(pixmap), 0, 0, 0, 0, -1, -1);
|
gdk_draw_drawable(GDK_DRAWABLE(widget->window), widget->style->fg_gc[GTK_WIDGET_STATE(widget)], GDK_DRAWABLE(pixmap), 0, 0, 0, 0, -1, -1);
|
||||||
|
|
||||||
if(getHoveredRoom() != NULL && getHoveredRoom() != getActiveRoom()) {
|
if(getHoveredRoom() != NULL && getHoveredRoom() != getActiveRoom() &&
|
||||||
|
(getEditMode() == EDIT_MODE_VIEW || getEditMode() == EDIT_MODE_SELECTED))
|
||||||
|
{
|
||||||
cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
|
cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
|
||||||
|
|
||||||
cairo_translate(cr, getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate);
|
cairo_translate(cr, getImageWidth()/2-xTranslate, getImageHeight()/2-yTranslate);
|
||||||
|
@ -166,7 +171,7 @@ gboolean drawTopView(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
|
||||||
cairo_set_line_width(cr, 2.0/scale);
|
cairo_set_line_width(cr, 2.0/scale);
|
||||||
cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
|
cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER);
|
||||||
|
|
||||||
room2path(cr, getHoveredRoom(), NULL);
|
room2path(cr, getHoveredRoom(), &rect);
|
||||||
|
|
||||||
cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.7);
|
cairo_set_source_rgba(cr, 0.0, 0.7, 1.0, 0.7);
|
||||||
cairo_stroke(cr);
|
cairo_stroke(cr);
|
||||||
|
|
Reference in a new issue