app: add status message to the handle transform tool

and fix a few glitches from tool widget porting.
This commit is contained in:
Michael Natterer
2017-06-19 22:52:26 +02:00
parent 4a05ddebab
commit 96da8c1505
2 changed files with 85 additions and 23 deletions

View File

@ -33,6 +33,8 @@
#include "core/gimp-transform-utils.h" #include "core/gimp-transform-utils.h"
#include "core/gimp-utils.h" #include "core/gimp-utils.h"
#include "widgets/gimpwidgets-utils.h"
#include "gimpcanvashandle.h" #include "gimpcanvashandle.h"
#include "gimpdisplayshell.h" #include "gimpdisplayshell.h"
#include "gimptoolhandlegrid.h" #include "gimptoolhandlegrid.h"
@ -112,24 +114,24 @@ static void gimp_tool_handle_grid_motion (GimpToolWidget *widge
const GimpCoords *coords, const GimpCoords *coords,
guint32 time, guint32 time,
GdkModifierType state); GdkModifierType state);
static void gimp_tool_handle_grid_hover (GimpToolWidget *widget, static void gimp_tool_handle_grid_hover (GimpToolWidget *widget,
const GimpCoords *coords, const GimpCoords *coords,
GdkModifierType state, GdkModifierType state,
gboolean proximity); gboolean proximity);
static gboolean gimp_tool_handle_grid_get_cursor (GimpToolWidget *widget, static gboolean gimp_tool_handle_grid_get_cursor (GimpToolWidget *widget,
const GimpCoords *coords, const GimpCoords *coords,
GdkModifierType state, GdkModifierType state,
GimpCursorType *cursor, GimpCursorType *cursor,
GimpToolCursorType *tool_cursor, GimpToolCursorType *tool_cursor,
GimpCursorModifier *cursor_modifier); GimpCursorModifier *cursor_modifier);
static void gimp_tool_handle_grid_update_hilight (GimpToolHandleGrid *grid); static void gimp_tool_handle_grid_update_hilight (GimpToolHandleGrid *grid);
static void gimp_tool_handle_grid_update_matrix (GimpToolHandleGrid *grid); static void gimp_tool_handle_grid_update_matrix (GimpToolHandleGrid *grid);
static gboolean is_handle_position_valid (GimpToolHandleGrid *grid, static gboolean is_handle_position_valid (GimpToolHandleGrid *grid,
gint handle); gint handle);
static void handle_micro_move (GimpToolHandleGrid *grid, static void handle_micro_move (GimpToolHandleGrid *grid,
gint handle); gint handle);
static inline gdouble calc_angle (gdouble ax, static inline gdouble calc_angle (gdouble ax,
gdouble ay, gdouble ay,
@ -735,7 +737,7 @@ gimp_tool_handle_grid_motion (GimpToolWidget *widget,
{ {
case 1: case 1:
/* move */ /* move */
for (i = 1; i < 4; i++) for (i = 0; i < 4; i++)
{ {
newpos_x[i] = oldpos_x[i] + diff_y; newpos_x[i] = oldpos_x[i] + diff_y;
newpos_y[i] = oldpos_y[i] + diff_y; newpos_y[i] = oldpos_y[i] + diff_y;
@ -810,6 +812,7 @@ gimp_tool_handle_grid_hover (GimpToolWidget *widget,
{ {
GimpToolHandleGrid *grid = GIMP_TOOL_HANDLE_GRID (widget); GimpToolHandleGrid *grid = GIMP_TOOL_HANDLE_GRID (widget);
GimpToolHandleGridPrivate *private = grid->private; GimpToolHandleGridPrivate *private = grid->private;
gchar *status = NULL;
gint i; gint i;
private->mouse_x = coords->x; private->mouse_x = coords->x;
@ -828,6 +831,60 @@ gimp_tool_handle_grid_hover (GimpToolWidget *widget,
} }
} }
if (proximity)
{
GdkModifierType extend_mask = gimp_get_extend_selection_mask ();
GdkModifierType toggle_mask = gimp_get_toggle_behavior_mask ();
switch (private->handle_mode)
{
case GIMP_HANDLE_MODE_ADD_TRANSFORM:
if (private->handle > 0)
{
const gchar *s = NULL;
switch (private->n_handles)
{
case 1:
s = _("Click-Drag to move");
break;
case 2:
s = _("Click-Drag to rotate and scale");
break;
case 3:
s = _("Click-Drag to shear and scale");
break;
case 4:
s = _("Click-Drag to change perspective");
break;
}
status = gimp_suggest_modifiers (s,
extend_mask | toggle_mask,
NULL, NULL, NULL);
}
else
{
if (private->n_handles < 4)
status = g_strdup (_("Click to add a handle"));
}
break;
case GIMP_HANDLE_MODE_MOVE:
if (private->handle > 0)
status = g_strdup (_("Click-Drag to move this handle"));
break;
case GIMP_HANDLE_MODE_REMOVE:
if (private->handle > 0)
status = g_strdup (_("Click-Drag to remove this handle"));
break;
}
}
gimp_tool_widget_status (widget, status);
g_free (status);
gimp_tool_handle_grid_update_hilight (grid); gimp_tool_handle_grid_update_hilight (grid);
} }

View File

@ -312,10 +312,14 @@ gimp_handle_transform_tool_prepare (GimpTransformTool *tr_tool)
static GimpToolWidget * static GimpToolWidget *
gimp_handle_transform_tool_get_widget (GimpTransformTool *tr_tool) gimp_handle_transform_tool_get_widget (GimpTransformTool *tr_tool)
{ {
GimpTool *tool = GIMP_TOOL (tr_tool); GimpTool *tool = GIMP_TOOL (tr_tool);
GimpTransformOptions *options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (tr_tool); GimpTransformOptions *options;
GimpDisplayShell *shell = gimp_display_get_shell (tool->display); GimpHandleTransformOptions *ht_options;
GimpToolWidget *widget; GimpDisplayShell *shell = gimp_display_get_shell (tool->display);
GimpToolWidget *widget;
options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (tr_tool);
ht_options = GIMP_HANDLE_TRANSFORM_TOOL_GET_OPTIONS (tr_tool);
widget = gimp_tool_handle_grid_new (shell, widget = gimp_tool_handle_grid_new (shell,
tr_tool->x1, tr_tool->x1,
@ -344,8 +348,9 @@ gimp_handle_transform_tool_get_widget (GimpTransformTool *tr_tool)
NULL); NULL);
g_object_set (widget, g_object_set (widget,
"guide-type", options->grid_type, "guide-type", options->grid_type,
"n-guides", options->grid_size, "n-guides", options->grid_size,
"handle-mode", ht_options->handle_mode,
NULL); NULL);
g_signal_connect (widget, "changed", g_signal_connect (widget, "changed",