diff options
Diffstat (limited to 'src/libui_sdl/libui/unix/drawmatrix.c')
-rw-r--r-- | src/libui_sdl/libui/unix/drawmatrix.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/libui_sdl/libui/unix/drawmatrix.c b/src/libui_sdl/libui/unix/drawmatrix.c index ac7ac57..f12b303 100644 --- a/src/libui_sdl/libui/unix/drawmatrix.c +++ b/src/libui_sdl/libui/unix/drawmatrix.c @@ -25,35 +25,41 @@ static void c2m(cairo_matrix_t *c, uiDrawMatrix *m) void uiDrawMatrixTranslate(uiDrawMatrix *m, double x, double y) { cairo_matrix_t c; + cairo_matrix_t tmp; m2c(m, &c); - cairo_matrix_translate(&c, x, y); + cairo_matrix_init_translate(&tmp, x, y); + cairo_matrix_multiply(&c, &c, &tmp); c2m(&c, m); } void uiDrawMatrixScale(uiDrawMatrix *m, double xCenter, double yCenter, double x, double y) { cairo_matrix_t c; + cairo_matrix_t tmp; double xt, yt; m2c(m, &c); xt = x; yt = y; scaleCenter(xCenter, yCenter, &xt, &yt); - cairo_matrix_translate(&c, xt, yt); - cairo_matrix_scale(&c, x, y); - cairo_matrix_translate(&c, -xt, -yt); + cairo_matrix_init_translate(&tmp, xt, yt); + cairo_matrix_scale(&tmp, x, y); + cairo_matrix_translate(&tmp, -xt, -yt); + cairo_matrix_multiply(&c, &c, &tmp); c2m(&c, m); } void uiDrawMatrixRotate(uiDrawMatrix *m, double x, double y, double amount) { cairo_matrix_t c; + cairo_matrix_t tmp; m2c(m, &c); - cairo_matrix_translate(&c, x, y); - cairo_matrix_rotate(&c, amount); - cairo_matrix_translate(&c, -x, -y); + cairo_matrix_init_translate(&tmp, x, y); + cairo_matrix_rotate(&tmp, amount); + cairo_matrix_translate(&tmp, -x, -y); + cairo_matrix_multiply(&c, &c, &tmp); c2m(&c, m); } |