[cairo] is skew supposed to move/shift top/left x?
Lawrence D'Oliveiro
ldo at geek-central.gen.nz
Thu Feb 11 05:45:05 UTC 2016
On Wed, 10 Feb 2016 21:38:30 -0700, Mark Olesen wrote:
> When skewing in the x direction, top x seems to move to the right a
> bit.
> /*
> http://cairographics.org/cookbook/matrix_transform/http://cairographics.org/cookbook/matrix_transform/
> Lets take that C = math.cos(A), S = math.sin(A), T = math.tan(A)
> X-skew by A -- mtrx = cairo.Matrix(1,0,T,1,0,0)
> Y-skew by A -- mtrx = cairo.Matrix(1,T,0,1,0,0)
> */
These skew formulas apply about the origin. Therefore for skew along
X, only points on the line through Y = 0 remain unaffected, while for
skew along Y, only the line through X = 0 remains unaffected.
> cairo_matrix_init(
> &matrix,
> 1.0, 0.0,
> skewx, 1.0,
> 0.0, 0.0);
> cairo_transform(cr, &matrix);
> cairo_rectangle(cr, 10., 10., 50., 50.);
Your rectangle is offset from Y = 0, which is why the whole thing gets
skewed.
If you want a more general skew formula with a stationary line somewhere
other than at the origin, you can compose it out of the basic skew
formula combined with additional translations as described here
<http://cairographics.org/cookbook/transform_about_point/>.
More information about the cairo
mailing list