static void gimp_perspective_clone_tool_control (GimpTool *tool, GimpToolAction action, GimpDisplay *display) { GimpPerspectiveCloneTool *clone_tool = GIMP_PERSPECTIVE_CLONE_TOOL (tool); switch (action) { case GIMP_TOOL_ACTION_PAUSE: break; case GIMP_TOOL_ACTION_RESUME: /* only in the case that "Modify Polygon" mode is set " */ gimp_perspective_clone_tool_bounds (clone_tool, display); gimp_perspective_clone_tool_recalc_matrix (clone_tool); break; case GIMP_TOOL_ACTION_HALT: gimp_perspective_clone_tool_halt (clone_tool); break; case GIMP_TOOL_ACTION_COMMIT: break; } GIMP_TOOL_CLASS (parent_class)->control (tool, action, display); }
static gboolean gimp_perspective_clone_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error) { GimpPerspectiveCloneTool *clone_tool = GIMP_PERSPECTIVE_CLONE_TOOL (tool); if (! GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error)) { return FALSE; } if (display != tool->display) { GimpImage *image = gimp_display_get_image (display); gint i; tool->display = display; tool->drawable = gimp_image_get_active_drawable (image); /* Find the transform bounds initializing */ gimp_perspective_clone_tool_bounds (clone_tool, display); gimp_perspective_clone_tool_prepare (clone_tool); /* Recalculate the transform tool */ gimp_perspective_clone_tool_recalc_matrix (clone_tool); /* start drawing the bounding box and handles... */ gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), display); clone_tool->function = TRANSFORM_CREATING; /* Save the current transformation info */ for (i = 0; i < TRANS_INFO_SIZE; i++) clone_tool->old_trans_info[i] = clone_tool->trans_info[i]; } return TRUE; }
static gboolean gimp_perspective_clone_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error) { GimpPerspectiveCloneTool *clone_tool = GIMP_PERSPECTIVE_CLONE_TOOL (tool); if (! GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error)) { return FALSE; } if (display != tool->display) { GimpDisplayShell *shell = gimp_display_get_shell (display); GimpImage *image = gimp_display_get_image (display); gint i; tool->display = display; tool->drawable = gimp_image_get_active_drawable (image); /* Find the transform bounds initializing */ gimp_perspective_clone_tool_bounds (clone_tool, display); gimp_perspective_clone_tool_prepare (clone_tool); /* Recalculate the transform tool */ gimp_perspective_clone_tool_recalc_matrix (clone_tool, NULL); clone_tool->widget = gimp_tool_transform_grid_new (shell, &clone_tool->transform, clone_tool->x1, clone_tool->y1, clone_tool->x2, clone_tool->y2); g_object_set (clone_tool->widget, "pivot-x", (clone_tool->x1 + clone_tool->x2) / 2.0, "pivot-y", (clone_tool->y1 + clone_tool->y2) / 2.0, "inside-function", GIMP_TRANSFORM_FUNCTION_MOVE, "outside-function", GIMP_TRANSFORM_FUNCTION_ROTATE, "use-corner-handles", TRUE, "use-perspective-handles", TRUE, "use-side-handles", TRUE, "use-shear-handles", TRUE, "use-pivot-handle", TRUE, NULL); g_signal_connect (clone_tool->widget, "changed", G_CALLBACK (gimp_perspective_clone_tool_widget_changed), clone_tool); g_signal_connect (clone_tool->widget, "status", G_CALLBACK (gimp_perspective_clone_tool_widget_status), clone_tool); /* start drawing the bounding box and handles... */ if (gimp_draw_tool_is_active (GIMP_DRAW_TOOL (tool))) gimp_draw_tool_stop (GIMP_DRAW_TOOL (tool)); gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), display); /* Save the current transformation info */ for (i = 0; i < TRANS_INFO_SIZE; i++) clone_tool->old_trans_info[i] = clone_tool->trans_info[i]; } return TRUE; }