GimpCanvasItem * gimp_draw_tool_add_transform_preview (GimpDrawTool *draw_tool, GimpDrawable *drawable, const GimpMatrix3 *transform, gdouble x1, gdouble y1, gdouble x2, gdouble y2, gboolean perspective, gdouble opacity) { GimpCanvasItem *item; g_return_val_if_fail (GIMP_IS_DRAW_TOOL (draw_tool), NULL); g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL); g_return_val_if_fail (transform != NULL, NULL); item = gimp_canvas_transform_preview_new (gimp_display_get_shell (draw_tool->display), drawable, transform, x1, y1, x2, y2, perspective, opacity); gimp_draw_tool_add_preview (draw_tool, item); g_object_unref (item); return item; }
static void gimp_n_point_deformation_tool_draw (GimpDrawTool *draw_tool) { GimpNPointDeformationTool *npd_tool; GimpNPointDeformationOptions *npd_options; NPDModel *model; gint x0, y0, x1, y1; gint i; npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (draw_tool); npd_options = GIMP_N_POINT_DEFORMATION_TOOL_GET_OPTIONS (npd_tool); model = npd_tool->model; g_return_if_fail (model != NULL); /* draw lattice */ if (npd_options->mesh_visible) gimp_n_point_deformation_tool_draw_lattice (npd_tool); x0 = MIN (npd_tool->start_x, npd_tool->cursor_x); y0 = MIN (npd_tool->start_y, npd_tool->cursor_y); x1 = MAX (npd_tool->start_x, npd_tool->cursor_x); y1 = MAX (npd_tool->start_y, npd_tool->cursor_y); for (i = 0; i < model->control_points->len; i++) { NPDControlPoint *cp = &g_array_index (model->control_points, NPDControlPoint, i); NPDPoint p = cp->point; GimpHandleType handle_type; p.x += npd_tool->offset_x; p.y += npd_tool->offset_y; handle_type = GIMP_HANDLE_CIRCLE; /* check if cursor is hovering over a control point or if a * control point is situated in an area defined by rubber band */ if (cp == npd_tool->hovering_cp || (npd_tool->rubber_band && gimp_n_point_deformation_tool_is_cp_in_area (cp, x0, y0, x1, y1, npd_tool->offset_x, npd_tool->offset_y, npd_tool->cp_scaled_radius))) { handle_type = GIMP_HANDLE_FILLED_CIRCLE; } gimp_draw_tool_add_handle (draw_tool, handle_type, p.x, p.y, GIMP_TOOL_HANDLE_SIZE_CIRCLE, GIMP_TOOL_HANDLE_SIZE_CIRCLE, GIMP_HANDLE_ANCHOR_CENTER); if (g_list_find (npd_tool->selected_cps, cp)) { gimp_draw_tool_add_handle (draw_tool, GIMP_HANDLE_SQUARE, p.x, p.y, GIMP_TOOL_HANDLE_SIZE_CIRCLE, GIMP_TOOL_HANDLE_SIZE_CIRCLE, GIMP_HANDLE_ANCHOR_CENTER); } } if (npd_tool->rubber_band) { /* draw a rubber band */ gimp_draw_tool_add_rectangle (draw_tool, FALSE, x0, y0, x1 - x0, y1 - y0); } if (npd_tool->preview_buffer) { GimpCanvasItem *item; item = gimp_canvas_buffer_preview_new (gimp_display_get_shell (draw_tool->display), npd_tool->preview_buffer); gimp_draw_tool_add_preview (draw_tool, item); g_object_unref (item); } GIMP_DRAW_TOOL_CLASS (parent_class)->draw (draw_tool); }