[cairo] Coordinate from device to user space without a context

Donn donn.ingle at gmail.com
Thu Nov 7 07:09:09 CET 2013


On 07/11/2013 03:44, ed44 wrote:
>> public void move(double mx, double my) {
>>   double xnew = mymatrix.xx * mx + mymatrix.x0;
>>   double ynew = mymatrix.yy * my + mymatrix.y0;
>>   stdout.printf("mx my: %G|%G maps to xnew ynew: %G|%G\n",mx,my, xnew,
>> ynew);
>>   x=xnew; y=ynew;
> With that matrix, points are transformed from user space to device space
> ( coords to pixels here).
> You need the other way around.

I don't know which forumula to use. I'm that thick :P
(I thought Bryce's use of "x_new" meant the new value I needed from the 
mouse's x going in.)


> Using the cairo matrix api you could do :
> --get the matrix
> --invert the matrix
> --cairo_matrix_transform_point_with_that_matrix.
Gave this a go. It's promising, but has a weird result:

   public void move(double mx, double my) {
     var tm = mymatrix; //copies on assignment.
     tm.invert();
     double px = mx; double py=my;
     stdout.printf("BEFORE mx my: %G | %G\n", px, py);
     tm.transform_point(ref px, ref py);
     stdout.printf("AFTER mx my: %G | %G\n", px, py);
     x=px;y=py;

The dragged object jumps left, then right, then left, etc. Here's some 
output. Look at the x coords for example.

DRAGGING 3
BEFORE mx my: 201,665 | 252,93
AFTER mx my: 1,6646 | 2,93018
DRAGGING 3
BEFORE mx my: 200,665 | 252,93
AFTER mx my: -51 | 0
DRAGGING 3
BEFORE mx my: 199,665 | 252,93
AFTER mx my: 0,664597 | 2,93018
DRAGGING 3
BEFORE mx my: 198,665 | 252,93
AFTER mx my: -52 | 0
DROPPED 3



Thanks for your help,
\d


More information about the cairo mailing list