mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-27 00:00:07 -06:00
libui/GTK: fix drawmatrix transform order to match Windows. fixes rotation.
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user