From a79e4304d9ec749d6a87f90a27d7515f4fd8b5b6 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Mon, 23 Sep 2024 15:57:32 +0200 Subject: [PATCH] draw_image(): do RECTORDER() before taking *x1, *y1 --- src/draw.c | 6 ++++-- src/scheduler.c | 1 + src/xinit.c | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/draw.c b/src/draw.c index 5f4b03d3..22f162f5 100644 --- a/src/draw.c +++ b/src/draw.c @@ -4363,8 +4363,8 @@ int draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2, size_t attr_len; if(xctx->only_probes) return 0; - xx1 = *x1; yy1 = *y1; /* image anchor point */ RECTORDER(*x1, *y1, *x2, *y2); + xx1 = *x1; yy1 = *y1; /* image anchor point */ /* screen position */ sx1=X_TO_SCREEN(*x1); @@ -4414,6 +4414,7 @@ int draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2, dbg(1, "draw_image() w=%d, h=%d\n", w, h); x = X_TO_SCREEN(xx1); y = Y_TO_SCREEN(yy1); + dbg(1, "draw_image() x=%g, y=%g\n", x, y); if(r->flags & 2048) { /* resize container rectangle to fit image */ *x2 = *x1 + w; *y2 = *y1 + h; @@ -4432,6 +4433,7 @@ int draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2, scaley = rh/h * xctx->mooz; } } + dbg(1, "draw_image() : rectangle coords: %g %g %g %g\n", *x1, *y1, *x2, *y2); if(dr) { cairo_save(xctx->cairo_ctx); cairo_save(xctx->cairo_save_ctx); @@ -4442,7 +4444,7 @@ int draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2, if(flip && (rot == 0 || rot == 2)) cairo_scale(xctx->cairo_save_ctx, -scalex, scaley); else if(flip && (rot == 1 || rot == 3)) cairo_scale(xctx->cairo_save_ctx, -scalex, scaley); else cairo_scale(xctx->cairo_save_ctx, scalex, scaley); - + cairo_set_source_surface(xctx->cairo_save_ctx, emb_ptr->image, 0. , 0.); cairo_rectangle(xctx->cairo_save_ctx, 0, 0, w , h ); /* cairo_fill(xctx->cairo_save_ctx); diff --git a/src/scheduler.c b/src/scheduler.c index 2997f355..aa93854e 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -3555,6 +3555,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg } if(w == 0) w = (int) fabs(x2 - x1); if(h == 0) h = (int) fabs(y2 - y1); + dbg(1, "w=%d h=%d, lw=%g bbox=%g %g %g %g\n", w, h, xctx->lw, x1, y1, x2, y2); save_restore_zoom(1, &zi); set_viewport_size(w, h, xctx->lw); zoom_box(x1, y1, x2, y2, 1.0); diff --git a/src/xinit.c b/src/xinit.c index dd88c4bf..695dc971 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -2120,6 +2120,7 @@ static void resetcairo(int create, int clear, int force_or_resize) #ifdef __unix__ xctx->cairo_save_sfc = cairo_xlib_surface_create(display, xctx->save_pixmap, visual, xctx->xrect[0].width, xctx->xrect[0].height); + dbg(1, "resetcairo: create cairo_save_sfc: %d %d\n", xctx->xrect[0].width, xctx->xrect[0].height); #else xctx->cairo_save_sfc = cairo_win32_surface_create_with_dib(CAIRO_FORMAT_RGB24, xctx->xrect[0].width, xctx->xrect[0].height);