mirror of https://github.com/GNOME/gimp.git
Bill Skaggs <weskaggs@primate.ucdavis.edu>
Trying to implement some usability recommendations from Peter Sikking: bigger handles, more feedback to user. * app/display/gimpcanvas.[ch]: add GIMP_CANVAS_STYLE_XOR_STIPPLED to set of styles. * app/tools/gimpdrawtool.[ch] (gimp_draw_tool_draw_rectangle_stippled): new function. Needs a better stipple pattern, though. * app/tools/gimprectangletool.c: bigger handles in corners, and highlight thing that user is currently moving.
This commit is contained in:
parent
769fd8c5a3
commit
3c2c165b9c
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2006-09-14 Bill Skaggs <weskaggs@primate.ucdavis.edu>
|
||||||
|
|
||||||
|
Trying to implement some usability recommendations from
|
||||||
|
Peter Sikking: bigger handles, more feedback to user.
|
||||||
|
|
||||||
|
* app/display/gimpcanvas.[ch]: add
|
||||||
|
GIMP_CANVAS_STYLE_XOR_STIPPLED to set of styles.
|
||||||
|
|
||||||
|
* app/tools/gimpdrawtool.[ch]
|
||||||
|
(gimp_draw_tool_draw_rectangle_stippled): new function.
|
||||||
|
Needs a better stipple pattern, though.
|
||||||
|
|
||||||
|
* app/tools/gimprectangletool.c: bigger handles in corners,
|
||||||
|
and highlight thing that user is currently moving.
|
||||||
|
|
||||||
2006-09-14 Bill Skaggs <weskaggs@primate.ucdavis.edu>
|
2006-09-14 Bill Skaggs <weskaggs@primate.ucdavis.edu>
|
||||||
|
|
||||||
* app/widgets/gimprectangletool.c: even if constraining to boundaries,
|
* app/widgets/gimprectangletool.c: even if constraining to boundaries,
|
||||||
|
|
|
@ -217,6 +217,12 @@ gimp_canvas_gc_new (GimpCanvas *canvas,
|
||||||
values.graphics_exposures = TRUE;
|
values.graphics_exposures = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GIMP_CANVAS_STYLE_XOR_STIPPLED:
|
||||||
|
mask |= GDK_GC_FILL | GDK_GC_STIPPLE;
|
||||||
|
values.fill = GDK_STIPPLED;
|
||||||
|
values.stipple = canvas->stipple[0];
|
||||||
|
/* fallthrough */
|
||||||
|
|
||||||
case GIMP_CANVAS_STYLE_XOR_DOTTED:
|
case GIMP_CANVAS_STYLE_XOR_DOTTED:
|
||||||
case GIMP_CANVAS_STYLE_XOR_DASHED:
|
case GIMP_CANVAS_STYLE_XOR_DASHED:
|
||||||
mask |= GDK_GC_LINE_STYLE;
|
mask |= GDK_GC_LINE_STYLE;
|
||||||
|
|
|
@ -31,6 +31,7 @@ typedef enum
|
||||||
GIMP_CANVAS_STYLE_XOR,
|
GIMP_CANVAS_STYLE_XOR,
|
||||||
GIMP_CANVAS_STYLE_XOR_DASHED,
|
GIMP_CANVAS_STYLE_XOR_DASHED,
|
||||||
GIMP_CANVAS_STYLE_XOR_DOTTED,
|
GIMP_CANVAS_STYLE_XOR_DOTTED,
|
||||||
|
GIMP_CANVAS_STYLE_XOR_STIPPLED,
|
||||||
GIMP_CANVAS_STYLE_SELECTION_IN,
|
GIMP_CANVAS_STYLE_SELECTION_IN,
|
||||||
GIMP_CANVAS_STYLE_SELECTION_OUT,
|
GIMP_CANVAS_STYLE_SELECTION_OUT,
|
||||||
GIMP_CANVAS_STYLE_LAYER_BOUNDARY,
|
GIMP_CANVAS_STYLE_LAYER_BOUNDARY,
|
||||||
|
|
|
@ -563,6 +563,63 @@ gimp_draw_tool_draw_rectangle (GimpDrawTool *draw_tool,
|
||||||
w - 1, h - 1);
|
w - 1, h - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gimp_draw_tool_draw_rectangle_stippled:
|
||||||
|
* @draw_tool: the #GimpDrawTool
|
||||||
|
* @x: horizontal image coordinate
|
||||||
|
* @y: vertical image coordinate
|
||||||
|
* @width: width in image coordinates
|
||||||
|
* @height: height in image coordinates
|
||||||
|
* @use_offsets: whether to use the image pixel offsets of the tool's display
|
||||||
|
*
|
||||||
|
* This function takes image space coordinates and transforms them to
|
||||||
|
* screen window coordinates, then draws the resulting rectangle, filling
|
||||||
|
* it with the default stipple pattern.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gimp_draw_tool_draw_rectangle_stippled (GimpDrawTool *draw_tool,
|
||||||
|
gdouble x,
|
||||||
|
gdouble y,
|
||||||
|
gdouble width,
|
||||||
|
gdouble height,
|
||||||
|
gboolean use_offsets)
|
||||||
|
{
|
||||||
|
GimpDisplayShell *shell;
|
||||||
|
gint tx1, ty1;
|
||||||
|
gint tx2, ty2;
|
||||||
|
guint w, h;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_DRAW_TOOL (draw_tool));
|
||||||
|
|
||||||
|
shell = GIMP_DISPLAY_SHELL (draw_tool->display->shell);
|
||||||
|
|
||||||
|
gimp_display_shell_transform_xy (shell,
|
||||||
|
MIN (x, x + width), MIN (y, y + height),
|
||||||
|
&tx1, &ty1,
|
||||||
|
use_offsets);
|
||||||
|
gimp_display_shell_transform_xy (shell,
|
||||||
|
MAX (x, x + width), MAX (y, y + height),
|
||||||
|
&tx2, &ty2,
|
||||||
|
use_offsets);
|
||||||
|
|
||||||
|
tx1 = CLAMP (tx1, -1, shell->disp_width + 1);
|
||||||
|
ty1 = CLAMP (ty1, -1, shell->disp_height + 1);
|
||||||
|
tx2 = CLAMP (tx2, -1, shell->disp_width + 1);
|
||||||
|
ty2 = CLAMP (ty2, -1, shell->disp_height + 1);
|
||||||
|
|
||||||
|
tx2 -= tx1;
|
||||||
|
ty2 -= ty1;
|
||||||
|
w = MAX (0, tx2);
|
||||||
|
h = MAX (0, ty2);
|
||||||
|
|
||||||
|
if (w > 0 && h > 0)
|
||||||
|
gimp_canvas_draw_rectangle (GIMP_CANVAS (shell->canvas),
|
||||||
|
GIMP_CANVAS_STYLE_XOR_STIPPLED,
|
||||||
|
TRUE,
|
||||||
|
tx1, ty1,
|
||||||
|
w - 1, h - 1);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_draw_tool_draw_arc (GimpDrawTool *draw_tool,
|
gimp_draw_tool_draw_arc (GimpDrawTool *draw_tool,
|
||||||
gboolean filled,
|
gboolean filled,
|
||||||
|
|
|
@ -116,6 +116,12 @@ void gimp_draw_tool_draw_rectangle (GimpDrawTool *draw_tool,
|
||||||
gdouble width,
|
gdouble width,
|
||||||
gdouble height,
|
gdouble height,
|
||||||
gboolean use_offsets);
|
gboolean use_offsets);
|
||||||
|
void gimp_draw_tool_draw_rectangle_stippled (GimpDrawTool *draw_tool,
|
||||||
|
gdouble x,
|
||||||
|
gdouble y,
|
||||||
|
gdouble width,
|
||||||
|
gdouble height,
|
||||||
|
gboolean use_offsets);
|
||||||
void gimp_draw_tool_draw_arc (GimpDrawTool *draw_tool,
|
void gimp_draw_tool_draw_arc (GimpDrawTool *draw_tool,
|
||||||
gboolean filled,
|
gboolean filled,
|
||||||
gdouble x,
|
gdouble x,
|
||||||
|
|
|
@ -854,7 +854,9 @@ gimp_rectangle_tool_button_press (GimpTool *tool,
|
||||||
private->lastx = x;
|
private->lastx = x;
|
||||||
private->lasty = y;
|
private->lasty = y;
|
||||||
|
|
||||||
|
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
|
||||||
gimp_tool_control_activate (tool->control);
|
gimp_tool_control_activate (tool->control);
|
||||||
|
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -873,7 +875,9 @@ gimp_rectangle_tool_button_release (GimpTool *tool,
|
||||||
|
|
||||||
options = GIMP_RECTANGLE_TOOL_GET_OPTIONS (tool);
|
options = GIMP_RECTANGLE_TOOL_GET_OPTIONS (tool);
|
||||||
|
|
||||||
|
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
|
||||||
gimp_tool_control_halt (tool->control);
|
gimp_tool_control_halt (tool->control);
|
||||||
|
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
|
||||||
|
|
||||||
private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (tool);
|
private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (tool);
|
||||||
g_object_get (rectangle, "function", &function, NULL);
|
g_object_get (rectangle, "function", &function, NULL);
|
||||||
|
@ -1884,7 +1888,7 @@ gimp_rectangle_tool_cursor_update (GimpTool *tool,
|
||||||
gimp_tool_control_set_cursor_modifier (tool->control, modifier);
|
gimp_tool_control_set_cursor_modifier (tool->control, modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ANCHOR_SIZE 6
|
#define ANCHOR_SIZE 20
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_rectangle_tool_draw (GimpDrawTool *draw_tool)
|
gimp_rectangle_tool_draw (GimpDrawTool *draw_tool)
|
||||||
|
@ -1892,9 +1896,13 @@ gimp_rectangle_tool_draw (GimpDrawTool *draw_tool)
|
||||||
GimpRectangleToolPrivate *private;
|
GimpRectangleToolPrivate *private;
|
||||||
gint x1, x2, y1, y2;
|
gint x1, x2, y1, y2;
|
||||||
guint function;
|
guint function;
|
||||||
|
gboolean button1_down;
|
||||||
|
GimpTool *tool;
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_RECTANGLE_TOOL (draw_tool));
|
g_return_if_fail (GIMP_IS_RECTANGLE_TOOL (draw_tool));
|
||||||
|
|
||||||
|
tool = GIMP_TOOL (draw_tool);
|
||||||
|
|
||||||
private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (draw_tool);
|
private = GIMP_RECTANGLE_TOOL_GET_PRIVATE (draw_tool);
|
||||||
|
|
||||||
g_object_get (GIMP_RECTANGLE_TOOL (draw_tool), "function", &function, NULL);
|
g_object_get (GIMP_RECTANGLE_TOOL (draw_tool), "function", &function, NULL);
|
||||||
|
@ -1910,18 +1918,104 @@ gimp_rectangle_tool_draw (GimpDrawTool *draw_tool)
|
||||||
gimp_draw_tool_draw_rectangle (draw_tool, FALSE,
|
gimp_draw_tool_draw_rectangle (draw_tool, FALSE,
|
||||||
x1, y1, x2 - x1, y2 - y1, FALSE);
|
x1, y1, x2 - x1, y2 - y1, FALSE);
|
||||||
|
|
||||||
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
|
||||||
x1, y1, ANCHOR_SIZE, ANCHOR_SIZE,
|
button1_down = gimp_tool_control_is_active (tool->control);
|
||||||
GTK_ANCHOR_NORTH_WEST, FALSE);
|
|
||||||
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
if (button1_down)
|
||||||
x2, y1, ANCHOR_SIZE, ANCHOR_SIZE,
|
{
|
||||||
GTK_ANCHOR_NORTH_EAST, FALSE);
|
GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (tool->display->shell);
|
||||||
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
gdouble handle_w;
|
||||||
x1, y2, ANCHOR_SIZE, ANCHOR_SIZE,
|
gdouble handle_h;
|
||||||
GTK_ANCHOR_SOUTH_WEST, FALSE);
|
gint X1, Y1;
|
||||||
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
gint X2, Y2;
|
||||||
x2, y2, ANCHOR_SIZE, ANCHOR_SIZE,
|
gboolean do_it = TRUE;
|
||||||
GTK_ANCHOR_SOUTH_EAST, FALSE);
|
|
||||||
|
handle_w = private->dcw / SCALEFACTOR_X (shell);
|
||||||
|
handle_h = private->dch / SCALEFACTOR_Y (shell);
|
||||||
|
|
||||||
|
switch (private->function)
|
||||||
|
{
|
||||||
|
case RECT_RESIZING_LEFT:
|
||||||
|
X1 = x1;
|
||||||
|
X2 = x1 + handle_w / 2;
|
||||||
|
Y1 = y1;
|
||||||
|
Y2 = y2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_RIGHT:
|
||||||
|
X1 = x2 - handle_w / 2;
|
||||||
|
X2 = x2;
|
||||||
|
Y1 = y1;
|
||||||
|
Y2 = y2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_TOP:
|
||||||
|
X1 = x1 + handle_w;
|
||||||
|
X2 = x2 - handle_w;
|
||||||
|
Y1 = y1;
|
||||||
|
Y2 = y1 + handle_h / 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_BOTTOM:
|
||||||
|
X1 = x1;
|
||||||
|
X2 = x2;
|
||||||
|
Y1 = y2 - handle_h / 2;
|
||||||
|
Y2 = y2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_UPPER_LEFT:
|
||||||
|
X1 = x1;
|
||||||
|
X2 = x1 + handle_w;
|
||||||
|
Y1 = y1;
|
||||||
|
Y2 = y1 + handle_h;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_UPPER_RIGHT:
|
||||||
|
X1 = x2 - handle_w;
|
||||||
|
X2 = x2;
|
||||||
|
Y1 = y1;
|
||||||
|
Y2 = y1 + handle_h;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_LOWER_LEFT:
|
||||||
|
X1 = x1;
|
||||||
|
X2 = x1 + handle_w;
|
||||||
|
Y1 = y2 - handle_h;
|
||||||
|
Y2 = y2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECT_RESIZING_LOWER_RIGHT:
|
||||||
|
X1 = x2 - handle_w;
|
||||||
|
X2 = x2;
|
||||||
|
Y1 = y2 - handle_h;
|
||||||
|
Y2 = y2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
do_it = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_it)
|
||||||
|
gimp_draw_tool_draw_rectangle_stippled (draw_tool,
|
||||||
|
X1, Y1, X2 - X1, Y2 - Y1,
|
||||||
|
FALSE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
||||||
|
x1, y1, ANCHOR_SIZE, ANCHOR_SIZE,
|
||||||
|
GTK_ANCHOR_NORTH_WEST, FALSE);
|
||||||
|
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
||||||
|
x2, y1, ANCHOR_SIZE, ANCHOR_SIZE,
|
||||||
|
GTK_ANCHOR_NORTH_EAST, FALSE);
|
||||||
|
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
||||||
|
x1, y2, ANCHOR_SIZE, ANCHOR_SIZE,
|
||||||
|
GTK_ANCHOR_SOUTH_WEST, FALSE);
|
||||||
|
gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE,
|
||||||
|
x2, y2, ANCHOR_SIZE, ANCHOR_SIZE,
|
||||||
|
GTK_ANCHOR_SOUTH_EAST, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
gimp_rectangle_tool_draw_guides (draw_tool);
|
gimp_rectangle_tool_draw_guides (draw_tool);
|
||||||
}
|
}
|
||||||
|
@ -2048,8 +2142,8 @@ gimp_rectangle_tool_configure (GimpRectangleTool *rectangle)
|
||||||
&dx2, &dy2,
|
&dx2, &dy2,
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
#define SRW 10
|
#define SRW 20
|
||||||
#define SRH 10
|
#define SRH 20
|
||||||
|
|
||||||
dcw = ((dx2 - dx1) < SRW) ? (dx2 - dx1) : SRW;
|
dcw = ((dx2 - dx1) < SRW) ? (dx2 - dx1) : SRW;
|
||||||
dch = ((dy2 - dy1) < SRH) ? (dy2 - dy1) : SRH;
|
dch = ((dy2 - dy1) < SRH) ? (dy2 - dy1) : SRH;
|
||||||
|
|
Loading…
Reference in New Issue