mirror of https://github.com/GNOME/gimp.git
app: add crosshair drawing to GimpCanvasAnchor and use it in GimpPaintTool
instead of drawing the crosshair cursor manually.
This commit is contained in:
parent
dd169a6a36
commit
c17e8b0412
|
@ -92,6 +92,7 @@ gimp_handle_type_get_type (void)
|
|||
{ GIMP_HANDLE_DIAMOND, "GIMP_HANDLE_DIAMOND", "diamond" },
|
||||
{ GIMP_HANDLE_FILLED_DIAMOND, "GIMP_HANDLE_FILLED_DIAMOND", "filled-diamond" },
|
||||
{ GIMP_HANDLE_CROSS, "GIMP_HANDLE_CROSS", "cross" },
|
||||
{ GIMP_HANDLE_CROSSHAIR, "GIMP_HANDLE_CROSSHAIR", "crosshair" },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
|
@ -104,6 +105,7 @@ gimp_handle_type_get_type (void)
|
|||
{ GIMP_HANDLE_DIAMOND, "GIMP_HANDLE_DIAMOND", NULL },
|
||||
{ GIMP_HANDLE_FILLED_DIAMOND, "GIMP_HANDLE_FILLED_DIAMOND", NULL },
|
||||
{ GIMP_HANDLE_CROSS, "GIMP_HANDLE_CROSS", NULL },
|
||||
{ GIMP_HANDLE_CROSSHAIR, "GIMP_HANDLE_CROSSHAIR", NULL },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -60,7 +60,8 @@ typedef enum
|
|||
GIMP_HANDLE_FILLED_CIRCLE,
|
||||
GIMP_HANDLE_DIAMOND,
|
||||
GIMP_HANDLE_FILLED_DIAMOND,
|
||||
GIMP_HANDLE_CROSS
|
||||
GIMP_HANDLE_CROSS,
|
||||
GIMP_HANDLE_CROSSHAIR
|
||||
} GimpHandleType;
|
||||
|
||||
|
||||
|
|
|
@ -272,6 +272,7 @@ gimp_canvas_handle_transform (GimpCanvasItem *item,
|
|||
case GIMP_HANDLE_CIRCLE:
|
||||
case GIMP_HANDLE_FILLED_CIRCLE:
|
||||
case GIMP_HANDLE_CROSS:
|
||||
case GIMP_HANDLE_CROSSHAIR:
|
||||
case GIMP_HANDLE_DIAMOND:
|
||||
case GIMP_HANDLE_FILLED_DIAMOND:
|
||||
gimp_canvas_item_shift_to_center (private->anchor,
|
||||
|
@ -369,6 +370,22 @@ gimp_canvas_handle_draw (GimpCanvasItem *item,
|
|||
_gimp_canvas_item_stroke (item, cr);
|
||||
break;
|
||||
|
||||
case GIMP_HANDLE_CROSSHAIR:
|
||||
cairo_move_to (cr, x - private->width / 2, y);
|
||||
cairo_line_to (cr, x - private->width * 0.4, y);
|
||||
|
||||
cairo_move_to (cr, x + private->width / 2 - 0.5, y);
|
||||
cairo_line_to (cr, x + private->width * 0.4, y);
|
||||
|
||||
cairo_move_to (cr, x, y - private->height / 2);
|
||||
cairo_line_to (cr, x, y - private->height * 0.4 - 0.5);
|
||||
|
||||
cairo_move_to (cr, x, y + private->height / 2 - 0.5);
|
||||
cairo_line_to (cr, x, y + private->height * 0.4 - 0.5);
|
||||
|
||||
_gimp_canvas_item_stroke (item, cr);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -399,6 +416,7 @@ gimp_canvas_handle_get_extents (GimpCanvasItem *item)
|
|||
case GIMP_HANDLE_CIRCLE:
|
||||
case GIMP_HANDLE_FILLED_CIRCLE:
|
||||
case GIMP_HANDLE_CROSS:
|
||||
case GIMP_HANDLE_CROSSHAIR:
|
||||
case GIMP_HANDLE_DIAMOND:
|
||||
case GIMP_HANDLE_FILLED_DIAMOND:
|
||||
rectangle.x = x - private->width / 2 - 2.0;
|
||||
|
@ -453,6 +471,7 @@ gimp_canvas_handle_hit (GimpCanvasItem *item,
|
|||
case GIMP_HANDLE_CIRCLE:
|
||||
case GIMP_HANDLE_FILLED_CIRCLE:
|
||||
case GIMP_HANDLE_CROSS:
|
||||
case GIMP_HANDLE_CROSSHAIR:
|
||||
{
|
||||
gint width = private->width;
|
||||
|
||||
|
|
|
@ -1033,6 +1033,7 @@ gimp_draw_tool_on_handle (GimpDrawTool *draw_tool,
|
|||
case GIMP_HANDLE_SQUARE:
|
||||
case GIMP_HANDLE_FILLED_SQUARE:
|
||||
case GIMP_HANDLE_CROSS:
|
||||
case GIMP_HANDLE_CROSSHAIR:
|
||||
gimp_canvas_item_shift_to_north_west (anchor,
|
||||
handle_tx, handle_ty,
|
||||
width, height,
|
||||
|
|
|
@ -22,10 +22,11 @@
|
|||
#include "gimptool.h"
|
||||
|
||||
|
||||
#define GIMP_TOOL_HANDLE_SIZE_CIRCLE 13
|
||||
#define GIMP_TOOL_HANDLE_SIZE_CROSS 15
|
||||
#define GIMP_TOOL_HANDLE_SIZE_LARGE 25
|
||||
#define GIMP_TOOL_HANDLE_SIZE_SMALL 7
|
||||
#define GIMP_TOOL_HANDLE_SIZE_CIRCLE 13
|
||||
#define GIMP_TOOL_HANDLE_SIZE_CROSS 15
|
||||
#define GIMP_TOOL_HANDLE_SIZE_CROSSHAIR 43
|
||||
#define GIMP_TOOL_HANDLE_SIZE_LARGE 25
|
||||
#define GIMP_TOOL_HANDLE_SIZE_SMALL 7
|
||||
|
||||
|
||||
#define GIMP_TYPE_DRAW_TOOL (gimp_draw_tool_get_type ())
|
||||
|
|
|
@ -795,39 +795,26 @@ gimp_paint_tool_draw (GimpDrawTool *draw_tool)
|
|||
}
|
||||
else if (paint_tool->draw_circle)
|
||||
{
|
||||
/** Lets make a sensible fallback cursor
|
||||
/* Lets make a sensible fallback cursor
|
||||
*
|
||||
* Sensible cursor is
|
||||
* * crossed to indicate draw point
|
||||
* * reactive to options alterations
|
||||
* * not a full circle that would be in the way */
|
||||
* * not a full circle that would be in the way
|
||||
*/
|
||||
gint size = (gint) paint_tool->circle_radius;
|
||||
|
||||
|
||||
/* size as it could be */
|
||||
gint size = (gint) paint_tool->circle_radius;
|
||||
gdouble view_scale = MAX (core->cur_coords.xscale, core->cur_coords.xscale);
|
||||
gdouble cross_size = 25.0 / view_scale;
|
||||
gdouble cross_gap = 18.0 / view_scale;
|
||||
|
||||
/* Cross to mark the spot*/
|
||||
gimp_draw_tool_add_line (draw_tool,
|
||||
cur_x + cross_gap, cur_y,
|
||||
cur_x + cross_size, cur_y);
|
||||
|
||||
gimp_draw_tool_add_line (draw_tool,
|
||||
cur_x - cross_size, cur_y,
|
||||
cur_x - cross_gap, cur_y);
|
||||
|
||||
gimp_draw_tool_add_line (draw_tool,
|
||||
cur_x, cur_y - cross_size,
|
||||
cur_x, cur_y - cross_gap);
|
||||
|
||||
gimp_draw_tool_add_line (draw_tool,
|
||||
cur_x, cur_y + cross_gap,
|
||||
cur_x, cur_y + cross_size);
|
||||
/* Cross to mark the spot */
|
||||
gimp_draw_tool_add_handle (draw_tool,
|
||||
GIMP_HANDLE_CROSSHAIR,
|
||||
cur_x, cur_y,
|
||||
GIMP_TOOL_HANDLE_SIZE_CROSSHAIR,
|
||||
GIMP_TOOL_HANDLE_SIZE_CROSSHAIR,
|
||||
GIMP_HANDLE_ANCHOR_CENTER);
|
||||
|
||||
#define TICKMARK_ANGLE 48
|
||||
#define ROTATION_ANGLE G_PI / 4
|
||||
|
||||
/* marks for indicating full size */
|
||||
gimp_draw_tool_add_arc (draw_tool,
|
||||
FALSE,
|
||||
|
@ -870,10 +857,10 @@ gimp_paint_tool_draw (GimpDrawTool *draw_tool)
|
|||
*/
|
||||
if (! line_drawn)
|
||||
gimp_draw_tool_add_handle (draw_tool,
|
||||
GIMP_HANDLE_CIRCLE,
|
||||
GIMP_HANDLE_CROSSHAIR,
|
||||
cur_x, cur_y,
|
||||
GIMP_TOOL_HANDLE_SIZE_SMALL,
|
||||
GIMP_TOOL_HANDLE_SIZE_SMALL,
|
||||
GIMP_TOOL_HANDLE_SIZE_CROSSHAIR,
|
||||
GIMP_TOOL_HANDLE_SIZE_CROSSHAIR,
|
||||
GIMP_HANDLE_ANCHOR_CENTER);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue