point0.x = pattern->u.linear.point0.x; point0.y = pattern->u.linear.point0.y; point1.x = pattern->u.linear.point1.x; point1.y = pattern->u.linear.point1.y;
point0.x = pattern->point0.x; point0.y = pattern->point0.y; point1.x = pattern->point1.x; point1.y = pattern->point1.y;
_cairo_image_data_set_linear (cairo_pattern_t *pattern,			      double offset_x,			      double offset_y,			      int *pixels,			      int width,			      int height){    int x, y;    cairo_point_double_t point0, point1;    double px, py, ex, ey;    double a, b, c, d, tx, ty;    double length, start, angle, fx, fy, factor;    cairo_shader_op_t op;    _cairo_pattern_shader_init (pattern, &op);    point0.x = pattern->u.linear.point0.x;    point0.y = pattern->u.linear.point0.y;    point1.x = pattern->u.linear.point1.x;    point1.y = pattern->u.linear.point1.y;    cairo_matrix_get_affine (&pattern->matrix, &a, &b, &c, &d, &tx, &ty);        length = sqrt ((point1.x - point0.x) * (point1.x - point0.x) +		   (point1.y - point0.y) * (point1.y - point0.y));    length = (length) ? 1.0 / length : CAIRO_MAXSHORT;    angle = -atan2 (point1.y - point0.y, point1.x - point0.x);    fx = cos (angle);    fy = -sin (angle);        start = fx * point0.x;    start += fy * point0.y;    for (y = 0; y < height; y++) {	for (x = 0; x < width; x++) {	    px = x + offset_x;	    py = y + offset_y;			    /* transform fragment */	    ex = a * px + c * py + tx;	    ey = b * px + d * py + ty;	    	    factor = ((fx * ex + fy * ey) - start) * length;	    _cairo_pattern_calc_color_at_pixel (&op, factor * 65536, pixels++);	}    }}