void fallbackScale(uiDrawMatrix *m, double xCenter, double yCenter, double x, double y) { uiDrawMatrix m2; setIdentity(&m2); m2.M11 = x; m2.M22 = y; scaleCenter(xCenter, yCenter, &x, &y); m2.M31 = x; m2.M32 = y; fallbackMultiply(m, &m2); }
void uiDrawMatrixScale(uiDrawMatrix *m, double xCenter, double yCenter, double x, double y) { cairo_matrix_t c; double xt, yt; m2c(m, &c); // TODO explain why the translation must come first xt = x; yt = y; scaleCenter(xCenter, yCenter, &xt, &yt); cairo_matrix_translate(&c, xt, yt); cairo_matrix_scale(&c, x, y); // TODO undo the translation? c2m(&c, m); }