app: add an own GimpCanvasItem API for transforming coords
and use it in all subclasses. Removes all gimpdisplayshell-transform dependency from all item implementations.
This commit is contained in:
@ -32,7 +32,6 @@
|
||||
|
||||
#include "gimpcanvasarc.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -224,25 +223,24 @@ gimp_canvas_arc_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_arc_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *center_x,
|
||||
gdouble *center_y,
|
||||
gdouble *radius_x,
|
||||
gdouble *radius_y)
|
||||
gimp_canvas_arc_transform (GimpCanvasItem *item,
|
||||
gdouble *center_x,
|
||||
gdouble *center_y,
|
||||
gdouble *radius_x,
|
||||
gdouble *radius_y)
|
||||
{
|
||||
GimpCanvasArcPrivate *private = GET_PRIVATE (item);
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->center_x - private->radius_x,
|
||||
private->center_y - private->radius_y,
|
||||
&x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->center_x + private->radius_x,
|
||||
private->center_y + private->radius_y,
|
||||
&x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->center_x - private->radius_x,
|
||||
private->center_y - private->radius_y,
|
||||
&x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->center_x + private->radius_x,
|
||||
private->center_y + private->radius_y,
|
||||
&x2, &y2);
|
||||
|
||||
x1 = floor (x1);
|
||||
y1 = floor (y1);
|
||||
@ -271,7 +269,7 @@ gimp_canvas_arc_draw (GimpCanvasItem *item,
|
||||
gdouble center_x, center_y;
|
||||
gdouble radius_x, radius_y;
|
||||
|
||||
gimp_canvas_arc_transform (item, shell,
|
||||
gimp_canvas_arc_transform (item,
|
||||
¢er_x, ¢er_y,
|
||||
&radius_x, &radius_y);
|
||||
|
||||
@ -298,7 +296,7 @@ gimp_canvas_arc_get_extents (GimpCanvasItem *item,
|
||||
gdouble center_x, center_y;
|
||||
gdouble radius_x, radius_y;
|
||||
|
||||
gimp_canvas_arc_transform (item, shell,
|
||||
gimp_canvas_arc_transform (item,
|
||||
¢er_x, ¢er_y,
|
||||
&radius_x, &radius_y);
|
||||
|
||||
|
@ -34,7 +34,6 @@
|
||||
|
||||
#include "gimpcanvasboundary.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -217,9 +216,8 @@ gimp_canvas_boundary_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_boundary_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
GimpSegment *segs)
|
||||
gimp_canvas_boundary_transform (GimpCanvasItem *item,
|
||||
GimpSegment *segs)
|
||||
{
|
||||
GimpCanvasBoundaryPrivate *private = GET_PRIVATE (item);
|
||||
gint i;
|
||||
@ -231,32 +229,39 @@ gimp_canvas_boundary_transform (GimpCanvasItem *item,
|
||||
gdouble tx, ty;
|
||||
|
||||
gimp_matrix3_transform_point (private->transform,
|
||||
private->segs[i].x1, private->segs[i].y1,
|
||||
private->segs[i].x1,
|
||||
private->segs[i].y1,
|
||||
&tx, &ty);
|
||||
gimp_display_shell_transform_xy (shell,
|
||||
tx + private->offset_x,
|
||||
ty + private->offset_y,
|
||||
&segs[i].x1, &segs[i].y1);
|
||||
gimp_canvas_item_transform_xy (item,
|
||||
tx + private->offset_x,
|
||||
ty + private->offset_y,
|
||||
&segs[i].x1, &segs[i].y1);
|
||||
|
||||
gimp_matrix3_transform_point (private->transform,
|
||||
private->segs[i].x2, private->segs[i].y2,
|
||||
private->segs[i].x2,
|
||||
private->segs[i].y2,
|
||||
&tx, &ty);
|
||||
gimp_display_shell_transform_xy (shell,
|
||||
tx + private->offset_x,
|
||||
ty + private->offset_y,
|
||||
&segs[i].x2, &segs[i].y2);
|
||||
gimp_canvas_item_transform_xy (item,
|
||||
tx + private->offset_x,
|
||||
ty + private->offset_y,
|
||||
&segs[i].x2, &segs[i].y2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_display_shell_transform_segments (shell,
|
||||
private->segs, segs,
|
||||
private->n_segs,
|
||||
private->offset_x,
|
||||
private->offset_y);
|
||||
|
||||
for (i = 0; i < private->n_segs; i++)
|
||||
{
|
||||
gimp_canvas_item_transform_xy (item,
|
||||
private->segs[i].x1 + private->offset_x,
|
||||
private->segs[i].y1 + private->offset_y,
|
||||
&segs[i].x1,
|
||||
&segs[i].y1);
|
||||
gimp_canvas_item_transform_xy (item,
|
||||
private->segs[i].x2 + private->offset_x,
|
||||
private->segs[i].y2 + private->offset_y,
|
||||
&segs[i].x2,
|
||||
&segs[i].y2);
|
||||
|
||||
/* If this segment is a closing segment && the segments lie inside
|
||||
* the region, OR if this is an opening segment and the segments
|
||||
* lie outside the region...
|
||||
@ -290,7 +295,7 @@ gimp_canvas_boundary_draw (GimpCanvasItem *item,
|
||||
|
||||
segs = g_new0 (GimpSegment, private->n_segs);
|
||||
|
||||
gimp_canvas_boundary_transform (item, shell, segs);
|
||||
gimp_canvas_boundary_transform (item, segs);
|
||||
|
||||
gimp_cairo_add_segments (cr, segs, private->n_segs);
|
||||
|
||||
@ -311,7 +316,7 @@ gimp_canvas_boundary_get_extents (GimpCanvasItem *item,
|
||||
|
||||
segs = g_new0 (GimpSegment, private->n_segs);
|
||||
|
||||
gimp_canvas_boundary_transform (item, shell, segs);
|
||||
gimp_canvas_boundary_transform (item, segs);
|
||||
|
||||
x1 = MIN (segs[0].x1, segs[0].x2);
|
||||
y1 = MIN (segs[0].y1, segs[0].y2);
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvascorner.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -238,12 +237,11 @@ gimp_canvas_corner_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_corner_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
gimp_canvas_corner_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
{
|
||||
GimpCanvasCornerPrivate *private = GET_PRIVATE (item);
|
||||
gdouble rx, ry;
|
||||
@ -251,18 +249,18 @@ gimp_canvas_corner_transform (GimpCanvasItem *item,
|
||||
gint top_and_bottom_handle_x_offset;
|
||||
gint left_and_right_handle_y_offset;
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
&rx, &ry);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
&rw, &rh);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
&rx, &ry);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
&rw, &rh);
|
||||
|
||||
rw -= rx;
|
||||
rh -= ry;
|
||||
@ -401,7 +399,7 @@ gimp_canvas_corner_draw (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_corner_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_corner_transform (item, &x, &y, &w, &h);
|
||||
|
||||
cairo_rectangle (cr, x, y, w, h);
|
||||
|
||||
@ -416,7 +414,7 @@ gimp_canvas_corner_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_corner_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_corner_transform (item, &x, &y, &w, &h);
|
||||
|
||||
rectangle.x = floor (x - 1.5);
|
||||
rectangle.y = floor (y - 1.5);
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
#include "gimpcanvascursor.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
#define GIMP_CURSOR_SIZE 7
|
||||
|
@ -33,10 +33,8 @@
|
||||
#include "core/gimpimage.h"
|
||||
|
||||
#include "gimpcanvasgrid.h"
|
||||
#include "gimpdisplay.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -193,7 +191,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GimpCanvasGridPrivate *private = GET_PRIVATE (item);
|
||||
GimpImage *image = gimp_display_get_image (shell->display);
|
||||
GimpImage *image = gimp_canvas_item_get_image (item);
|
||||
gdouble x, y;
|
||||
gdouble dx1, dy1, dx2, dy2;
|
||||
gint x0, x1, x2, x3;
|
||||
@ -239,7 +237,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
if (x < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, x, 0, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, x, 0, &x_real, &y_real);
|
||||
|
||||
if (x_real < x1 || x_real >= x2)
|
||||
continue;
|
||||
@ -249,7 +247,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
if (y < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, x, y, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, x, y, &x_real, &y_real);
|
||||
|
||||
if (y_real >= y1 && y_real < y2)
|
||||
{
|
||||
@ -266,7 +264,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
if (x < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, x, 0, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, x, 0, &x_real, &y_real);
|
||||
|
||||
if (x_real + CROSSHAIR < x1 || x_real - CROSSHAIR >= x2)
|
||||
continue;
|
||||
@ -276,7 +274,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
if (y < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, x, y, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, x, y, &x_real, &y_real);
|
||||
|
||||
if (y_real + CROSSHAIR < y1 || y_real - CROSSHAIR >= y2)
|
||||
continue;
|
||||
@ -311,15 +309,15 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
case GIMP_GRID_ON_OFF_DASH:
|
||||
case GIMP_GRID_DOUBLE_DASH:
|
||||
case GIMP_GRID_SOLID:
|
||||
gimp_display_shell_transform_xy (shell, 0, 0, &x0, &y0);
|
||||
gimp_display_shell_transform_xy (shell, width, height, &x3, &y3);
|
||||
gimp_canvas_item_transform_xy (item, 0, 0, &x0, &y0);
|
||||
gimp_canvas_item_transform_xy (item, width, height, &x3, &y3);
|
||||
|
||||
for (x = x_offset; x < width; x += private->grid->xspacing)
|
||||
{
|
||||
if (x < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, x, 0, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, x, 0, &x_real, &y_real);
|
||||
|
||||
if (x_real >= x1 && x_real < x2)
|
||||
{
|
||||
@ -333,7 +331,7 @@ gimp_canvas_grid_draw (GimpCanvasItem *item,
|
||||
if (y < 0)
|
||||
continue;
|
||||
|
||||
gimp_display_shell_transform_xy (shell, 0, y, &x_real, &y_real);
|
||||
gimp_canvas_item_transform_xy (item, 0, y, &x_real, &y_real);
|
||||
|
||||
if (y_real >= y1 && y_real < y2)
|
||||
{
|
||||
@ -351,7 +349,7 @@ static cairo_region_t *
|
||||
gimp_canvas_grid_get_extents (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell)
|
||||
{
|
||||
GimpImage *image = gimp_display_get_image (shell->display);
|
||||
GimpImage *image = gimp_canvas_item_get_image (item);
|
||||
cairo_rectangle_int_t rectangle;
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
@ -363,8 +361,8 @@ gimp_canvas_grid_get_extents (GimpCanvasItem *item,
|
||||
w = gimp_image_get_width (image);
|
||||
h = gimp_image_get_height (image);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell, 0, 0, &x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell, w, h, &x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item, 0, 0, &x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item, w, h, &x2, &y2);
|
||||
|
||||
rectangle.x = floor (x1);
|
||||
rectangle.y = floor (y1);
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvasgroup.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "gimpcanvasguide.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -176,17 +175,17 @@ gimp_canvas_guide_get_property (GObject *object,
|
||||
|
||||
static void
|
||||
gimp_canvas_guide_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x1,
|
||||
gdouble *y1,
|
||||
gdouble *x2,
|
||||
gdouble *y2)
|
||||
{
|
||||
GimpCanvasGuidePrivate *private = GET_PRIVATE (item);
|
||||
GtkWidget *canvas = gimp_canvas_item_get_canvas (item);
|
||||
GtkAllocation allocation;
|
||||
gint x, y;
|
||||
|
||||
gtk_widget_get_allocation (shell->canvas, &allocation);
|
||||
gtk_widget_get_allocation (canvas, &allocation);
|
||||
|
||||
*x1 = 0;
|
||||
*y1 = 0;
|
||||
@ -196,12 +195,12 @@ gimp_canvas_guide_transform (GimpCanvasItem *item,
|
||||
switch (private->orientation)
|
||||
{
|
||||
case GIMP_ORIENTATION_HORIZONTAL:
|
||||
gimp_display_shell_transform_xy (shell, 0, private->position, &x, &y);
|
||||
gimp_canvas_item_transform_xy (item, 0, private->position, &x, &y);
|
||||
*y1 = *y2 = y + 0.5;
|
||||
break;
|
||||
|
||||
case GIMP_ORIENTATION_VERTICAL:
|
||||
gimp_display_shell_transform_xy (shell, private->position, 0, &x, &y);
|
||||
gimp_canvas_item_transform_xy (item, private->position, 0, &x, &y);
|
||||
*x1 = *x2 = x + 0.5;
|
||||
break;
|
||||
|
||||
@ -218,7 +217,7 @@ gimp_canvas_guide_draw (GimpCanvasItem *item,
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_canvas_guide_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_guide_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
cairo_move_to (cr, x1, y1);
|
||||
cairo_line_to (cr, x2, y2);
|
||||
@ -234,7 +233,7 @@ gimp_canvas_guide_get_extents (GimpCanvasItem *item,
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_canvas_guide_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_guide_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
rectangle.x = MIN (x1, x2) - 1.5;
|
||||
rectangle.y = MIN (y1, y2) - 1.5;
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include "gimpcanvashandle.h"
|
||||
#include "gimpcanvasitem-utils.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -252,16 +251,15 @@ gimp_canvas_handle_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_handle_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
gimp_canvas_handle_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
{
|
||||
GimpCanvasHandlePrivate *private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x, private->y,
|
||||
x, y);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x, private->y,
|
||||
x, y);
|
||||
|
||||
switch (private->type)
|
||||
{
|
||||
@ -302,10 +300,11 @@ gimp_canvas_handle_draw (GimpCanvasItem *item,
|
||||
GimpCanvasHandlePrivate *private = GET_PRIVATE (item);
|
||||
gdouble x, y, tx, ty;
|
||||
|
||||
gimp_canvas_handle_transform (item, shell, &x, &y);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x, private->y,
|
||||
&tx, &ty);
|
||||
gimp_canvas_handle_transform (item, &x, &y);
|
||||
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x, private->y,
|
||||
&tx, &ty);
|
||||
|
||||
switch (private->type)
|
||||
{
|
||||
@ -388,7 +387,7 @@ gimp_canvas_handle_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_handle_transform (item, shell, &x, &y);
|
||||
gimp_canvas_handle_transform (item, &x, &y);
|
||||
|
||||
switch (private->type)
|
||||
{
|
||||
@ -429,14 +428,15 @@ gimp_canvas_handle_hit (GimpCanvasItem *item,
|
||||
GimpCanvasHandlePrivate *private = GET_PRIVATE (item);
|
||||
gdouble handle_tx, handle_ty;
|
||||
gdouble mx, my, tx, ty, mmx, mmy;
|
||||
gdouble diamond_offset_x = 0.0, diamond_offset_y = 0.0;
|
||||
gdouble diamond_offset_x = 0.0;
|
||||
gdouble diamond_offset_y = 0.0;
|
||||
gdouble angle = -private->start_angle;
|
||||
|
||||
gimp_canvas_handle_transform (item, shell, &handle_tx, &handle_ty);
|
||||
gimp_canvas_handle_transform (item, &handle_tx, &handle_ty);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
x, y,
|
||||
&mx, &my);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
x, y,
|
||||
&mx, &my);
|
||||
|
||||
switch (private->type)
|
||||
{
|
||||
@ -447,9 +447,9 @@ gimp_canvas_handle_hit (GimpCanvasItem *item,
|
||||
diamond_offset_y = private->height / 2.0;
|
||||
case GIMP_HANDLE_SQUARE:
|
||||
case GIMP_HANDLE_FILLED_SQUARE:
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x, private->y,
|
||||
&tx, &ty);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x, private->y,
|
||||
&tx, &ty);
|
||||
mmx = mx - tx; mmy = my - ty;
|
||||
mx = cos (angle) * mmx - sin (angle) * mmy + tx + diamond_offset_x;
|
||||
my = sin (angle) * mmx + cos (angle) * mmy + ty + diamond_offset_y;
|
||||
|
@ -30,8 +30,10 @@
|
||||
#include "core/gimpmarshal.h"
|
||||
|
||||
#include "gimpcanvasitem.h"
|
||||
#include "gimpdisplay.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -334,6 +336,30 @@ gimp_canvas_item_real_hit (GimpCanvasItem *item,
|
||||
|
||||
/* public functions */
|
||||
|
||||
GimpImage *
|
||||
gimp_canvas_item_get_image (GimpCanvasItem *item)
|
||||
{
|
||||
GimpCanvasItemPrivate *private;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_CANVAS_ITEM (item), NULL);
|
||||
|
||||
private = GET_PRIVATE (item);
|
||||
|
||||
return gimp_display_get_image (private->shell->display);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_canvas_item_get_canvas (GimpCanvasItem *item)
|
||||
{
|
||||
GimpCanvasItemPrivate *private;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_CANVAS_ITEM (item), NULL);
|
||||
|
||||
private = GET_PRIVATE (item);
|
||||
|
||||
return private->shell->canvas;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_canvas_item_draw (GimpCanvasItem *item,
|
||||
cairo_t *cr)
|
||||
@ -580,6 +606,38 @@ gimp_canvas_item_resume_filling (GimpCanvasItem *item)
|
||||
private->suspend_filling--;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_canvas_item_transform_xy (GimpCanvasItem *item,
|
||||
gdouble x,
|
||||
gdouble y,
|
||||
gint *tx,
|
||||
gint *ty)
|
||||
{
|
||||
GimpCanvasItemPrivate *private;
|
||||
|
||||
g_return_if_fail (GIMP_IS_CANVAS_ITEM (item));
|
||||
|
||||
private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy (private->shell, x, y, tx, ty);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_canvas_item_transform_xy_f (GimpCanvasItem *item,
|
||||
gdouble x,
|
||||
gdouble y,
|
||||
gdouble *tx,
|
||||
gdouble *ty)
|
||||
{
|
||||
GimpCanvasItemPrivate *private;
|
||||
|
||||
g_return_if_fail (GIMP_IS_CANVAS_ITEM (item));
|
||||
|
||||
private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (private->shell, x, y, tx, ty);
|
||||
}
|
||||
|
||||
|
||||
/* protected functions */
|
||||
|
||||
|
@ -71,6 +71,9 @@ struct _GimpCanvasItemClass
|
||||
|
||||
GType gimp_canvas_item_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GimpImage * gimp_canvas_item_get_image (GimpCanvasItem *item);
|
||||
GtkWidget * gimp_canvas_item_get_canvas (GimpCanvasItem *item);
|
||||
|
||||
void gimp_canvas_item_draw (GimpCanvasItem *item,
|
||||
cairo_t *cr);
|
||||
cairo_region_t * gimp_canvas_item_get_extents (GimpCanvasItem *item);
|
||||
@ -99,6 +102,17 @@ void gimp_canvas_item_resume_stroking (GimpCanvasItem *item);
|
||||
void gimp_canvas_item_suspend_filling (GimpCanvasItem *item);
|
||||
void gimp_canvas_item_resume_filling (GimpCanvasItem *item);
|
||||
|
||||
void gimp_canvas_item_transform_xy (GimpCanvasItem *item,
|
||||
gdouble x,
|
||||
gdouble y,
|
||||
gint *tx,
|
||||
gint *ty);
|
||||
void gimp_canvas_item_transform_xy_f (GimpCanvasItem *item,
|
||||
gdouble x,
|
||||
gdouble y,
|
||||
gdouble *tx,
|
||||
gdouble *ty);
|
||||
|
||||
|
||||
/* protected */
|
||||
|
||||
|
@ -36,7 +36,6 @@
|
||||
#include "gimpcanvaslayerboundary.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvasline.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -184,21 +183,20 @@ gimp_canvas_line_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_line_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x1,
|
||||
gdouble *y1,
|
||||
gdouble *x2,
|
||||
gdouble *y2)
|
||||
gimp_canvas_line_transform (GimpCanvasItem *item,
|
||||
gdouble *x1,
|
||||
gdouble *y1,
|
||||
gdouble *x2,
|
||||
gdouble *y2)
|
||||
{
|
||||
GimpCanvasLinePrivate *private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x1, private->y1,
|
||||
x1, y1);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x2, private->y2,
|
||||
x2, y2);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x1, private->y1,
|
||||
x1, y1);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x2, private->y2,
|
||||
x2, y2);
|
||||
|
||||
*x1 = floor (*x1) + 0.5;
|
||||
*y1 = floor (*y1) + 0.5;
|
||||
@ -214,7 +212,7 @@ gimp_canvas_line_draw (GimpCanvasItem *item,
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_canvas_line_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_line_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
cairo_move_to (cr, x1, y1);
|
||||
cairo_line_to (cr, x2, y2);
|
||||
@ -230,7 +228,7 @@ gimp_canvas_line_get_extents (GimpCanvasItem *item,
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_canvas_line_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_line_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
if (x1 == x2 || y1 == y2)
|
||||
{
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include "gimpcanvaspath.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include "gimpcanvaspen.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
|
@ -32,7 +32,6 @@
|
||||
|
||||
#include "gimpcanvaspolygon.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -198,20 +197,19 @@ gimp_canvas_polygon_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_polygon_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
GimpVector2 *points)
|
||||
gimp_canvas_polygon_transform (GimpCanvasItem *item,
|
||||
GimpVector2 *points)
|
||||
{
|
||||
GimpCanvasPolygonPrivate *private = GET_PRIVATE (item);
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < private->n_points; i++)
|
||||
{
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->points[i].x,
|
||||
private->points[i].y,
|
||||
&points[i].x,
|
||||
&points[i].y);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->points[i].x,
|
||||
private->points[i].y,
|
||||
&points[i].x,
|
||||
&points[i].y);
|
||||
|
||||
points[i].x = floor (points[i].x) + 0.5;
|
||||
points[i].y = floor (points[i].y) + 0.5;
|
||||
@ -229,7 +227,7 @@ gimp_canvas_polygon_draw (GimpCanvasItem *item,
|
||||
|
||||
points = g_new0 (GimpVector2, private->n_points);
|
||||
|
||||
gimp_canvas_polygon_transform (item, shell, points);
|
||||
gimp_canvas_polygon_transform (item, points);
|
||||
|
||||
cairo_move_to (cr, points[0].x, points[0].y);
|
||||
|
||||
@ -258,7 +256,7 @@ gimp_canvas_polygon_get_extents (GimpCanvasItem *item,
|
||||
|
||||
points = g_new0 (GimpVector2, private->n_points);
|
||||
|
||||
gimp_canvas_polygon_transform (item, shell, points);
|
||||
gimp_canvas_polygon_transform (item, points);
|
||||
|
||||
x1 = floor (points[0].x - 1.5);
|
||||
y1 = floor (points[0].y - 1.5);
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include "gimpcanvasitem-utils.h"
|
||||
#include "gimpcanvasprogress.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
|
||||
|
||||
@ -233,17 +232,17 @@ gimp_canvas_progress_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static PangoLayout *
|
||||
gimp_canvas_progress_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gint *width,
|
||||
gint *height)
|
||||
gimp_canvas_progress_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gint *width,
|
||||
gint *height)
|
||||
{
|
||||
GimpCanvasProgressPrivate *private = GET_PRIVATE (item);
|
||||
GtkWidget *canvas = gimp_canvas_item_get_canvas (item);
|
||||
PangoLayout *layout;
|
||||
|
||||
layout = gimp_canvas_get_layout (GIMP_CANVAS (shell->canvas), "%s",
|
||||
layout = gimp_canvas_get_layout (GIMP_CANVAS (canvas), "%s",
|
||||
private->text);
|
||||
|
||||
pango_layout_get_pixel_size (layout, width, height);
|
||||
@ -251,9 +250,9 @@ gimp_canvas_progress_transform (GimpCanvasItem *item,
|
||||
*width += 2 * BORDER;
|
||||
*height += 3 * BORDER + 2 * RADIUS;
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x, private->y,
|
||||
x, y);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x, private->y,
|
||||
x, y);
|
||||
|
||||
gimp_canvas_item_shift_to_north_west (private->anchor,
|
||||
*x, *y,
|
||||
@ -273,10 +272,11 @@ gimp_canvas_progress_draw (GimpCanvasItem *item,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GimpCanvasProgressPrivate *private = GET_PRIVATE (item);
|
||||
GtkWidget *canvas = gimp_canvas_item_get_canvas (item);
|
||||
gdouble x, y;
|
||||
gint width, height;
|
||||
|
||||
gimp_canvas_progress_transform (item, shell, &x, &y, &width, &height);
|
||||
gimp_canvas_progress_transform (item, &x, &y, &width, &height);
|
||||
|
||||
cairo_move_to (cr, x, y);
|
||||
cairo_line_to (cr, x + width, y);
|
||||
@ -291,7 +291,7 @@ gimp_canvas_progress_draw (GimpCanvasItem *item,
|
||||
cairo_move_to (cr, x + BORDER, y + BORDER);
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0);
|
||||
pango_cairo_show_layout (cr,
|
||||
gimp_canvas_get_layout (GIMP_CANVAS (shell->canvas),
|
||||
gimp_canvas_get_layout (GIMP_CANVAS (canvas),
|
||||
"%s", private->text));
|
||||
|
||||
gimp_display_shell_set_tool_bg_style (shell, cr);
|
||||
@ -314,7 +314,7 @@ gimp_canvas_progress_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gint width, height;
|
||||
|
||||
gimp_canvas_progress_transform (item, shell, &x, &y, &width, &height);
|
||||
gimp_canvas_progress_transform (item, &x, &y, &width, &height);
|
||||
|
||||
/* add 1px on each side because fill()'s default impl does the same */
|
||||
rectangle.x = (gint) x - 1;
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include "gimpcanvasproxygroup.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvasrectangle.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -198,29 +197,28 @@ gimp_canvas_rectangle_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_rectangle_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
gimp_canvas_rectangle_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
{
|
||||
GimpCanvasRectanglePrivate *private = GET_PRIVATE (item);
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
&x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
&x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
&x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
&x2, &y2);
|
||||
|
||||
x1 = floor (x1);
|
||||
y1 = floor (y1);
|
||||
@ -255,7 +253,7 @@ gimp_canvas_rectangle_draw (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_rectangle_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_rectangle_transform (item, &x, &y, &w, &h);
|
||||
|
||||
cairo_rectangle (cr, x, y, w, h);
|
||||
|
||||
@ -274,7 +272,7 @@ gimp_canvas_rectangle_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_rectangle_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_rectangle_transform (item, &x, &y, &w, &h);
|
||||
|
||||
if (private->filled)
|
||||
{
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvasrectangleguides.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
#define SQRT5 2.236067977
|
||||
@ -215,27 +214,26 @@ gimp_canvas_rectangle_guides_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_rectangle_guides_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x1,
|
||||
gdouble *y1,
|
||||
gdouble *x2,
|
||||
gdouble *y2)
|
||||
gimp_canvas_rectangle_guides_transform (GimpCanvasItem *item,
|
||||
gdouble *x1,
|
||||
gdouble *y1,
|
||||
gdouble *x2,
|
||||
gdouble *y2)
|
||||
{
|
||||
GimpCanvasRectangleGuidesPrivate *private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
x1, y1);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
x2, y2);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
x1, y1);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
x2, y2);
|
||||
|
||||
*x1 = floor (*x1) + 0.5;
|
||||
*y1 = floor (*y1) + 0.5;
|
||||
@ -280,7 +278,7 @@ gimp_canvas_rectangle_guides_draw (GimpCanvasItem *item,
|
||||
gdouble x2, y2;
|
||||
gint i;
|
||||
|
||||
gimp_canvas_rectangle_guides_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_rectangle_guides_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
switch (private->type)
|
||||
{
|
||||
@ -371,7 +369,7 @@ gimp_canvas_rectangle_guides_get_extents (GimpCanvasItem *item,
|
||||
gdouble x1, y1;
|
||||
gdouble x2, y2;
|
||||
|
||||
gimp_canvas_rectangle_guides_transform (item, shell, &x1, &y1, &x2, &y2);
|
||||
gimp_canvas_rectangle_guides_transform (item, &x1, &y1, &x2, &y2);
|
||||
|
||||
rectangle.x = floor (x1 - 1.5);
|
||||
rectangle.y = floor (y1 - 1.5);
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include "gimpcanvassamplepoint.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-style.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
#define GIMP_SAMPLE_POINT_DRAW_SIZE 10
|
||||
@ -197,17 +196,16 @@ gimp_canvas_sample_point_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_sample_point_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
gimp_canvas_sample_point_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y)
|
||||
{
|
||||
GimpCanvasSamplePointPrivate *private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
private->x + 0.5,
|
||||
private->y + 0.5,
|
||||
x, y);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
private->x + 0.5,
|
||||
private->y + 0.5,
|
||||
x, y);
|
||||
|
||||
*x = floor (*x) + 0.5;
|
||||
*y = floor (*y) + 0.5;
|
||||
@ -225,7 +223,7 @@ gimp_canvas_sample_point_draw (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gint x1, x2, y1, y2;
|
||||
|
||||
gimp_canvas_sample_point_transform (item, shell, &x, &y);
|
||||
gimp_canvas_sample_point_transform (item, &x, &y);
|
||||
|
||||
x1 = x - GIMP_SAMPLE_POINT_DRAW_SIZE;
|
||||
x2 = x + GIMP_SAMPLE_POINT_DRAW_SIZE;
|
||||
@ -265,7 +263,7 @@ gimp_canvas_sample_point_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gint x1, x2, y1, y2;
|
||||
|
||||
gimp_canvas_sample_point_transform (item, shell, &x, &y);
|
||||
gimp_canvas_sample_point_transform (item, &x, &y);
|
||||
|
||||
x1 = floor (x - GIMP_SAMPLE_POINT_DRAW_SIZE);
|
||||
x2 = ceil (x + GIMP_SAMPLE_POINT_DRAW_SIZE);
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "gimpcanvastextcursor.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
enum
|
||||
@ -198,27 +197,26 @@ gimp_canvas_text_cursor_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_canvas_text_cursor_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
gimp_canvas_text_cursor_transform (GimpCanvasItem *item,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h)
|
||||
{
|
||||
GimpCanvasTextCursorPrivate *private = GET_PRIVATE (item);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
x, y);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
w, h);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MIN (private->x,
|
||||
private->x + private->width),
|
||||
MIN (private->y,
|
||||
private->y + private->height),
|
||||
x, y);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
MAX (private->x,
|
||||
private->x + private->width),
|
||||
MAX (private->y,
|
||||
private->y + private->height),
|
||||
w, h);
|
||||
|
||||
*w -= *x;
|
||||
*h -= *y;
|
||||
@ -247,7 +245,7 @@ gimp_canvas_text_cursor_draw (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_text_cursor_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_text_cursor_transform (item, &x, &y, &w, &h);
|
||||
|
||||
if (private->overwrite)
|
||||
{
|
||||
@ -277,7 +275,7 @@ gimp_canvas_text_cursor_get_extents (GimpCanvasItem *item,
|
||||
gdouble x, y;
|
||||
gdouble w, h;
|
||||
|
||||
gimp_canvas_text_cursor_transform (item, shell, &x, &y, &w, &h);
|
||||
gimp_canvas_text_cursor_transform (item, &x, &y, &w, &h);
|
||||
|
||||
if (private->overwrite)
|
||||
{
|
||||
|
@ -29,11 +29,10 @@
|
||||
#include "display-types.h"
|
||||
|
||||
#include "core/gimp-transform-utils.h"
|
||||
#include "core/gimp-utils.h"
|
||||
|
||||
#include "gimpcanvastransformguides.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
#include "core/gimp-utils.h"
|
||||
|
||||
|
||||
#define SQRT5 2.236067977
|
||||
@ -257,16 +256,15 @@ gimp_canvas_transform_guides_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_canvas_transform_guides_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
gdouble *tx1,
|
||||
gdouble *ty1,
|
||||
gdouble *tx2,
|
||||
gdouble *ty2,
|
||||
gdouble *tx3,
|
||||
gdouble *ty3,
|
||||
gdouble *tx4,
|
||||
gdouble *ty4)
|
||||
gimp_canvas_transform_guides_transform (GimpCanvasItem *item,
|
||||
gdouble *tx1,
|
||||
gdouble *ty1,
|
||||
gdouble *tx2,
|
||||
gdouble *ty2,
|
||||
gdouble *tx3,
|
||||
gdouble *ty3,
|
||||
gdouble *tx4,
|
||||
gdouble *ty4)
|
||||
{
|
||||
GimpCanvasTransformGuidesPrivate *private = GET_PRIVATE (item);
|
||||
|
||||
@ -290,19 +288,19 @@ gimp_canvas_transform_guides_transform (GimpCanvasItem *item,
|
||||
}
|
||||
|
||||
static void
|
||||
draw_line (cairo_t *cr,
|
||||
GimpDisplayShell *shell,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble x1,
|
||||
gdouble y1,
|
||||
gdouble x2,
|
||||
gdouble y2)
|
||||
draw_line (cairo_t *cr,
|
||||
GimpCanvasItem *item,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble x1,
|
||||
gdouble y1,
|
||||
gdouble x2,
|
||||
gdouble y2)
|
||||
{
|
||||
gimp_matrix3_transform_point (transform, x1, y1, &x1, &y1);
|
||||
gimp_matrix3_transform_point (transform, x2, y2, &x2, &y2);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell, x1, y1, &x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell, x2, y2, &x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item, x1, y1, &x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item, x2, y2, &x2, &y2);
|
||||
|
||||
x1 = floor (x1) + 0.5;
|
||||
y1 = floor (y1) + 0.5;
|
||||
@ -314,25 +312,25 @@ draw_line (cairo_t *cr,
|
||||
}
|
||||
|
||||
static void
|
||||
draw_hline (cairo_t *cr,
|
||||
GimpDisplayShell *shell,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble x1,
|
||||
gdouble x2,
|
||||
gdouble y)
|
||||
draw_hline (cairo_t *cr,
|
||||
GimpCanvasItem *item,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble x1,
|
||||
gdouble x2,
|
||||
gdouble y)
|
||||
{
|
||||
draw_line (cr, shell, transform, x1, y, x2, y);
|
||||
draw_line (cr, item, transform, x1, y, x2, y);
|
||||
}
|
||||
|
||||
static void
|
||||
draw_vline (cairo_t *cr,
|
||||
GimpDisplayShell *shell,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble y1,
|
||||
gdouble y2,
|
||||
gdouble x)
|
||||
draw_vline (cairo_t *cr,
|
||||
GimpCanvasItem *item,
|
||||
GimpMatrix3 *transform,
|
||||
gdouble y1,
|
||||
gdouble y2,
|
||||
gdouble x)
|
||||
{
|
||||
draw_line (cr, shell, transform, x, y1, x, y2);
|
||||
draw_line (cr, item, transform, x, y1, x, y2);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -348,16 +346,16 @@ gimp_canvas_transform_guides_draw (GimpCanvasItem *item,
|
||||
gboolean convex;
|
||||
gint i;
|
||||
|
||||
convex = gimp_canvas_transform_guides_transform (item, shell,
|
||||
convex = gimp_canvas_transform_guides_transform (item,
|
||||
&x1, &y1,
|
||||
&x2, &y2,
|
||||
&x3, &y3,
|
||||
&x4, &y4);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell, x1, y1, &x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell, x2, y2, &x2, &y2);
|
||||
gimp_display_shell_transform_xy_f (shell, x3, y3, &x3, &y3);
|
||||
gimp_display_shell_transform_xy_f (shell, x4, y4, &x4, &y4);
|
||||
gimp_canvas_item_transform_xy_f (item, x1, y1, &x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item, x2, y2, &x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item, x3, y3, &x3, &y3);
|
||||
gimp_canvas_item_transform_xy_f (item, x4, y4, &x4, &y4);
|
||||
|
||||
x1 = floor (x1) + 0.5;
|
||||
y1 = floor (y1) + 0.5;
|
||||
@ -386,48 +384,48 @@ gimp_canvas_transform_guides_draw (GimpCanvasItem *item,
|
||||
break;
|
||||
|
||||
case GIMP_GUIDES_CENTER_LINES:
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2, (private->y1 + private->y2) / 2);
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2, (private->x1 + private->x2) / 2);
|
||||
break;
|
||||
|
||||
case GIMP_GUIDES_THIRDS:
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2, (2 * private->y1 + private->y2) / 3);
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2, (private->y1 + 2 * private->y2) / 3);
|
||||
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2, (2 * private->x1 + private->x2) / 3);
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2, (private->x1 + 2 * private->x2) / 3);
|
||||
break;
|
||||
|
||||
case GIMP_GUIDES_FIFTHS:
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2,
|
||||
private->y1 + i * (private->y2 - private->y1) / 5);
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2,
|
||||
private->x1 + i * (private->x2 - private->x1) / 5);
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GUIDES_GOLDEN:
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2,
|
||||
(2 * private->y1 + (1 + SQRT5) * private->y2) / (3 + SQRT5));
|
||||
draw_hline (cr, shell, &private->transform,
|
||||
draw_hline (cr, item, &private->transform,
|
||||
private->x1, private->x2,
|
||||
((1 + SQRT5) * private->y1 + 2 * private->y2) / (3 + SQRT5));
|
||||
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2,
|
||||
(2 * private->x1 + (1 + SQRT5) * private->x2) / (3 + SQRT5));
|
||||
draw_vline (cr, shell, &private->transform,
|
||||
draw_vline (cr, item, &private->transform,
|
||||
private->y1, private->y2,
|
||||
((1 + SQRT5) * private->x1 + 2 * private->x2) / (3 + SQRT5));
|
||||
break;
|
||||
@ -444,25 +442,25 @@ gimp_canvas_transform_guides_draw (GimpCanvasItem *item,
|
||||
private->y2 - private->y1);
|
||||
|
||||
/* diagonal from the top-left edge */
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
private->x1, private->y1,
|
||||
private->x1 + square_side,
|
||||
private->y1 + square_side);
|
||||
|
||||
/* diagonal from the top-right edge */
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
private->x2, private->y1,
|
||||
private->x2 - square_side,
|
||||
private->y1 + square_side);
|
||||
|
||||
/* diagonal from the bottom-left edge */
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
private->x1, private->y2,
|
||||
private->x1 + square_side,
|
||||
private->y2 - square_side);
|
||||
|
||||
/* diagonal from the bottom-right edge */
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
private->x2, private->y2,
|
||||
private->x2 - square_side,
|
||||
private->y2 - square_side);
|
||||
@ -504,7 +502,7 @@ gimp_canvas_transform_guides_draw (GimpCanvasItem *item,
|
||||
gdouble x = private->x1 + (((gdouble) i) / (ngx + 1) *
|
||||
(private->x2 - private->x1));
|
||||
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
x, private->y1,
|
||||
x, private->y2);
|
||||
}
|
||||
@ -514,7 +512,7 @@ gimp_canvas_transform_guides_draw (GimpCanvasItem *item,
|
||||
gdouble y = private->y1 + (((gdouble) i) / (ngy + 1) *
|
||||
(private->y2 - private->y1));
|
||||
|
||||
draw_line (cr, shell, &private->transform,
|
||||
draw_line (cr, item, &private->transform,
|
||||
private->x1, y,
|
||||
private->x2, y);
|
||||
}
|
||||
@ -534,16 +532,16 @@ gimp_canvas_transform_guides_get_extents (GimpCanvasItem *item,
|
||||
gdouble x4, y4;
|
||||
cairo_rectangle_int_t extents;
|
||||
|
||||
gimp_canvas_transform_guides_transform (item, shell,
|
||||
gimp_canvas_transform_guides_transform (item,
|
||||
&x1, &y1,
|
||||
&x2, &y2,
|
||||
&x3, &y3,
|
||||
&x4, &y4);
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell, x1, y1, &x1, &y1);
|
||||
gimp_display_shell_transform_xy_f (shell, x2, y2, &x2, &y2);
|
||||
gimp_display_shell_transform_xy_f (shell, x3, y3, &x3, &y3);
|
||||
gimp_display_shell_transform_xy_f (shell, x4, y4, &x4, &y4);
|
||||
gimp_canvas_item_transform_xy_f (item, x1, y1, &x1, &y1);
|
||||
gimp_canvas_item_transform_xy_f (item, x2, y2, &x2, &y2);
|
||||
gimp_canvas_item_transform_xy_f (item, x3, y3, &x3, &y3);
|
||||
gimp_canvas_item_transform_xy_f (item, x4, y4, &x4, &y4);
|
||||
|
||||
extents.x = (gint) floor (MIN4 (x1, x2, x3, x4) - 1.5);
|
||||
extents.y = (gint) floor (MIN4 (y1, y2, y3, y4) - 1.5);
|
||||
|
@ -38,7 +38,6 @@
|
||||
#include "gimpcanvas.h"
|
||||
#include "gimpcanvastransformpreview.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
#define INT_MULT(a,b,t) ((t) = (a) * (b) + 0x80, ((((t) >> 8) + (t)) >> 8))
|
||||
@ -344,7 +343,6 @@ gimp_canvas_transform_preview_get_property (GObject *object,
|
||||
|
||||
static gboolean
|
||||
gimp_canvas_transform_preview_transform (GimpCanvasItem *item,
|
||||
GimpDisplayShell *shell,
|
||||
cairo_rectangle_int_t *extents)
|
||||
{
|
||||
GimpCanvasTransformPreviewPrivate *private = GET_PRIVATE (item);
|
||||
@ -379,18 +377,18 @@ gimp_canvas_transform_preview_transform (GimpCanvasItem *item,
|
||||
gdouble dx3, dy3;
|
||||
gdouble dx4, dy4;
|
||||
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
tx1, ty1,
|
||||
&dx1, &dy1);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
tx2, ty2,
|
||||
&dx2, &dy2);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
tx3, ty3,
|
||||
&dx3, &dy3);
|
||||
gimp_display_shell_transform_xy_f (shell,
|
||||
tx4, ty4,
|
||||
&dx4, &dy4);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
tx1, ty1,
|
||||
&dx1, &dy1);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
tx2, ty2,
|
||||
&dx2, &dy2);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
tx3, ty3,
|
||||
&dx3, &dy3);
|
||||
gimp_canvas_item_transform_xy_f (item,
|
||||
tx4, ty4,
|
||||
&dx4, &dy4);
|
||||
|
||||
extents->x = (gint) floor (MIN4 (dx1, dx2, dx3, dx4));
|
||||
extents->y = (gint) floor (MIN4 (dy1, dy2, dy3, dy4));
|
||||
@ -431,7 +429,7 @@ gimp_canvas_transform_preview_draw (GimpCanvasItem *item,
|
||||
opacity = private->opacity * 255.999;
|
||||
|
||||
/* only draw convex polygons */
|
||||
if (! gimp_canvas_transform_preview_transform (item, shell, NULL))
|
||||
if (! gimp_canvas_transform_preview_transform (item, NULL))
|
||||
return;
|
||||
|
||||
mask = NULL;
|
||||
@ -485,9 +483,9 @@ gimp_canvas_transform_preview_draw (GimpCanvasItem *item,
|
||||
tx2, ty2, \
|
||||
&tx1, &ty1); \
|
||||
\
|
||||
gimp_display_shell_transform_xy_f (shell, \
|
||||
tx1, ty1, \
|
||||
&tx2, &ty2); \
|
||||
gimp_canvas_item_transform_xy_f (item, \
|
||||
tx1, ty1, \
|
||||
&tx2, &ty2); \
|
||||
x[sub][index] = (gint) tx2; \
|
||||
y[sub][index] = (gint) ty2; \
|
||||
\
|
||||
@ -568,7 +566,7 @@ gimp_canvas_transform_preview_get_extents (GimpCanvasItem *item,
|
||||
{
|
||||
cairo_rectangle_int_t rectangle;
|
||||
|
||||
if (gimp_canvas_transform_preview_transform (item, shell, &rectangle))
|
||||
if (gimp_canvas_transform_preview_transform (item, &rectangle))
|
||||
return cairo_region_create_rectangle (&rectangle);
|
||||
|
||||
return NULL;
|
||||
|
Reference in New Issue
Block a user