app: connect to GimpToolWidget::status and ::status-coords in GimpDrawTool

and remove the callbacks from subclasses.
This commit is contained in:
Michael Natterer 2017-06-26 20:49:14 +02:00
parent 72f8d7d6ac
commit a89e6eeaea
5 changed files with 85 additions and 147 deletions

View File

@ -84,16 +84,6 @@ static void gimp_crop_tool_rectangle_changed (GimpToolWidget
static void gimp_crop_tool_rectangle_response (GimpToolWidget *rectangle,
gint response_id,
GimpCropTool *crop_tool);
static void gimp_crop_tool_rectangle_status (GimpToolWidget *rectangle,
const gchar *status,
GimpCropTool *crop_tool);
static void gimp_crop_tool_rectangle_status_coords (GimpToolWidget *rectangle,
const gchar *title,
gdouble x,
const gchar *separator,
gdouble y,
const gchar *help,
GimpCropTool *crop_tool);
static void gimp_crop_tool_rectangle_change_complete (GimpToolRectangle *rectangle,
GimpCropTool *crop_tool);
@ -273,12 +263,6 @@ gimp_crop_tool_button_press (GimpTool *tool,
g_signal_connect (widget, "response",
G_CALLBACK (gimp_crop_tool_rectangle_response),
crop_tool);
g_signal_connect (widget, "status",
G_CALLBACK (gimp_crop_tool_rectangle_status),
crop_tool);
g_signal_connect (widget, "status-coords",
G_CALLBACK (gimp_crop_tool_rectangle_status_coords),
crop_tool);
g_signal_connect (widget, "change-complete",
G_CALLBACK (gimp_crop_tool_rectangle_change_complete),
crop_tool);
@ -432,40 +416,6 @@ gimp_crop_tool_rectangle_response (GimpToolWidget *rectangle,
}
}
static void
gimp_crop_tool_rectangle_status (GimpToolWidget *rectangle,
const gchar *status,
GimpCropTool *crop_tool)
{
GimpTool *tool = GIMP_TOOL (crop_tool);
if (status)
{
gimp_tool_replace_status (tool, tool->display, "%s", status);
}
else
{
gimp_tool_pop_status (tool, tool->display);
}
}
static void
gimp_crop_tool_rectangle_status_coords (GimpToolWidget *rectangle,
const gchar *title,
gdouble x,
const gchar *separator,
gdouble y,
const gchar *help,
GimpCropTool *crop_tool)
{
GimpTool *tool = GIMP_TOOL (crop_tool);
gimp_tool_pop_status (tool, tool->display);
gimp_tool_push_status_coords (tool, tool->display,
gimp_tool_control_get_precision (tool->control),
title, x, separator, y, help);
}
static void
gimp_crop_tool_rectangle_change_complete (GimpToolRectangle *rectangle,
GimpCropTool *crop_tool)

View File

@ -60,38 +60,49 @@
#define MINIMUM_DRAW_INTERVAL 50000 /* 50000 microseconds == 20 fps */
static void gimp_draw_tool_dispose (GObject *object);
static void gimp_draw_tool_dispose (GObject *object);
static gboolean gimp_draw_tool_has_display (GimpTool *tool,
GimpDisplay *display);
static GimpDisplay * gimp_draw_tool_has_image (GimpTool *tool,
GimpImage *image);
static void gimp_draw_tool_control (GimpTool *tool,
GimpToolAction action,
GimpDisplay *display);
static gboolean gimp_draw_tool_key_press (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
static gboolean gimp_draw_tool_key_release (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
static void gimp_draw_tool_oper_update (GimpTool *tool,
const GimpCoords *coords,
GdkModifierType state,
gboolean proximity,
GimpDisplay *display);
static gboolean gimp_draw_tool_has_display (GimpTool *tool,
GimpDisplay *display);
static GimpDisplay * gimp_draw_tool_has_image (GimpTool *tool,
GimpImage *image);
static void gimp_draw_tool_control (GimpTool *tool,
GimpToolAction action,
GimpDisplay *display);
static gboolean gimp_draw_tool_key_press (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
static gboolean gimp_draw_tool_key_release (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
static void gimp_draw_tool_oper_update (GimpTool *tool,
const GimpCoords *coords,
GdkModifierType state,
gboolean proximity,
GimpDisplay *display);
static void gimp_draw_tool_widget_status (GimpToolWidget *widget,
const gchar *status,
GimpTool *tool);
static void gimp_draw_tool_widget_status_coords
(GimpToolWidget *widget,
const gchar *title,
gdouble x,
const gchar *separator,
gdouble y,
const gchar *help,
GimpTool *tool);
static void gimp_draw_tool_widget_snap_offsets
(GimpToolWidget *widget,
gint offset_x,
gint offset_y,
gint width,
gint height,
GimpTool *tool);
(GimpToolWidget *widget,
gint offset_x,
gint offset_y,
gint width,
gint height,
GimpTool *tool);
static void gimp_draw_tool_draw (GimpDrawTool *draw_tool);
static void gimp_draw_tool_undraw (GimpDrawTool *draw_tool);
static void gimp_draw_tool_real_draw (GimpDrawTool *draw_tool);
static void gimp_draw_tool_draw (GimpDrawTool *draw_tool);
static void gimp_draw_tool_undraw (GimpDrawTool *draw_tool);
static void gimp_draw_tool_real_draw (GimpDrawTool *draw_tool);
G_DEFINE_TYPE (GimpDrawTool, gimp_draw_tool, GIMP_TYPE_TOOL)
@ -248,6 +259,40 @@ gimp_draw_tool_oper_update (GimpTool *tool,
}
}
static void
gimp_draw_tool_widget_status (GimpToolWidget *rectangle,
const gchar *status,
GimpTool *tool)
{
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
if (status)
{
gimp_tool_replace_status (tool, draw_tool->display, "%s", status);
}
else
{
gimp_tool_pop_status (tool, draw_tool->display);
}
}
static void
gimp_draw_tool_widget_status_coords (GimpToolWidget *rectangle,
const gchar *title,
gdouble x,
const gchar *separator,
gdouble y,
const gchar *help,
GimpTool *tool)
{
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
gimp_tool_pop_status (tool, draw_tool->display);
gimp_tool_push_status_coords (tool, draw_tool->display,
gimp_tool_control_get_precision (tool->control),
title, x, separator, y, help);
}
static void
gimp_draw_tool_widget_snap_offsets (GimpToolWidget *widget,
gint offset_x,
@ -529,6 +574,12 @@ gimp_draw_tool_set_widget (GimpDrawTool *draw_tool,
if (draw_tool->widget)
{
g_signal_handlers_disconnect_by_func (draw_tool->widget,
gimp_draw_tool_widget_status,
draw_tool);
g_signal_handlers_disconnect_by_func (draw_tool->widget,
gimp_draw_tool_widget_status_coords,
draw_tool);
g_signal_handlers_disconnect_by_func (draw_tool->widget,
gimp_draw_tool_widget_snap_offsets,
draw_tool);
@ -556,6 +607,12 @@ gimp_draw_tool_set_widget (GimpDrawTool *draw_tool,
gimp_draw_tool_add_item (draw_tool, item);
}
g_signal_connect (draw_tool->widget, "status",
G_CALLBACK (gimp_draw_tool_widget_status),
draw_tool);
g_signal_connect (draw_tool->widget, "status-coords",
G_CALLBACK (gimp_draw_tool_widget_status_coords),
draw_tool);
g_signal_connect (draw_tool->widget, "snap-offsets",
G_CALLBACK (gimp_draw_tool_widget_snap_offsets),
draw_tool);

View File

@ -108,9 +108,6 @@ static void gimp_free_select_tool_polygon_changed (GimpToolWidget
static void gimp_free_select_tool_polygon_response (GimpToolWidget *polygon,
gint response_id,
GimpFreeSelectTool *fst);
static void gimp_free_select_tool_polygon_status (GimpToolWidget *polygon,
const gchar *status,
GimpFreeSelectTool *fst);
G_DEFINE_TYPE (GimpFreeSelectTool, gimp_free_select_tool,
@ -343,9 +340,6 @@ gimp_free_select_tool_button_press (GimpTool *tool,
g_signal_connect (private->polygon, "response",
G_CALLBACK (gimp_free_select_tool_polygon_response),
fst);
g_signal_connect (private->polygon, "status",
G_CALLBACK (gimp_free_select_tool_polygon_status),
fst);
gimp_draw_tool_start (draw_tool, display);
@ -520,20 +514,3 @@ gimp_free_select_tool_polygon_response (GimpToolWidget *polygon,
break;
}
}
static void
gimp_free_select_tool_polygon_status (GimpToolWidget *polygon,
const gchar *status,
GimpFreeSelectTool *fst)
{
GimpTool *tool = GIMP_TOOL (fst);
if (status)
{
gimp_tool_replace_status (tool, tool->display, "%s", status);
}
else
{
gimp_tool_pop_status (tool, tool->display);
}
}

View File

@ -124,9 +124,6 @@ static void gimp_transform_tool_widget_changed (GimpToolWidget
static void gimp_transform_tool_widget_response (GimpToolWidget *widget,
gint response_id,
GimpTransformTool *tr_tool);
static void gimp_transform_tool_widget_status (GimpToolWidget *widget,
const gchar *status,
GimpTransformTool *tr_tool);
static void gimp_transform_tool_halt (GimpTransformTool *tr_tool);
static gboolean gimp_transform_tool_bounds (GimpTransformTool *tr_tool,
@ -1073,23 +1070,6 @@ gimp_transform_tool_widget_response (GimpToolWidget *widget,
}
}
static void
gimp_transform_tool_widget_status (GimpToolWidget *widget,
const gchar *status,
GimpTransformTool *tr_tool)
{
GimpTool *tool = GIMP_TOOL (tr_tool);
if (status)
{
gimp_tool_replace_status (tool, tool->display, "%s", status);
}
else
{
gimp_tool_pop_status (tool, tool->display);
}
}
static void
gimp_transform_tool_halt (GimpTransformTool *tr_tool)
{
@ -1326,9 +1306,6 @@ gimp_transform_tool_get_widget (GimpTransformTool *tr_tool)
g_signal_connect (widget, "response",
G_CALLBACK (gimp_transform_tool_widget_response),
tr_tool);
g_signal_connect (widget, "status",
G_CALLBACK (gimp_transform_tool_widget_status),
tr_tool);
}
return widget;

View File

@ -104,9 +104,6 @@ static void gimp_vector_tool_halt (GimpVectorTool *vector_
static void gimp_vector_tool_path_changed (GimpToolWidget *path,
GimpVectorTool *vector_tool);
static void gimp_vector_tool_path_status (GimpToolWidget *path,
const gchar *status,
GimpVectorTool *vector_tool);
static void gimp_vector_tool_path_begin_change
(GimpToolWidget *path,
const gchar *desc,
@ -415,9 +412,6 @@ gimp_vector_tool_start (GimpVectorTool *vector_tool,
g_signal_connect (widget, "changed",
G_CALLBACK (gimp_vector_tool_path_changed),
vector_tool);
g_signal_connect (widget, "status",
G_CALLBACK (gimp_vector_tool_path_status),
vector_tool);
g_signal_connect (widget, "begin-change",
G_CALLBACK (gimp_vector_tool_path_begin_change),
vector_tool);
@ -483,23 +477,6 @@ gimp_vector_tool_path_changed (GimpToolWidget *path,
g_object_unref (vectors);
}
static void
gimp_vector_tool_path_status (GimpToolWidget *path,
const gchar *status,
GimpVectorTool *vector_tool)
{
GimpTool *tool = GIMP_TOOL (vector_tool);
if (status)
{
gimp_tool_replace_status (tool, tool->display, "%s", status);
}
else
{
gimp_tool_pop_status (tool, tool->display);
}
}
static void
gimp_vector_tool_path_begin_change (GimpToolWidget *path,
const gchar *desc,