app: add status message to the handle transform tool
and fix a few glitches from tool widget porting.
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
Reference in New Issue
Block a user