static void gimp_source_tool_draw (GimpDrawTool *draw_tool) { GimpSourceTool *source_tool = GIMP_SOURCE_TOOL (draw_tool); GimpSourceOptions *options = GIMP_SOURCE_TOOL_GET_OPTIONS (draw_tool); GimpSourceCore *source; source = GIMP_SOURCE_CORE (GIMP_PAINT_TOOL (draw_tool)->core); if (options->use_source && source->src_drawable && source_tool->src_display) { GimpDisplay *tmp_display = draw_tool->display; gint off_x; gint off_y; draw_tool->display = source_tool->src_display; gimp_item_offsets (GIMP_ITEM (source->src_drawable), &off_x, &off_y); if (source_tool->show_source_outline) gimp_brush_tool_draw_brush (GIMP_BRUSH_TOOL (source_tool), source_tool->src_x + off_x, source_tool->src_y + off_y, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_CROSS, source_tool->src_x + off_x, source_tool->src_y + off_y, TARGET_SIZE, TARGET_SIZE, GTK_ANCHOR_CENTER, FALSE); draw_tool->display = tmp_display; } GIMP_DRAW_TOOL_CLASS (parent_class)->draw (draw_tool); }
static void gimp_align_tool_draw (GimpDrawTool *draw_tool) { GimpAlignTool *align_tool = GIMP_ALIGN_TOOL (draw_tool); GList *list; gint x, y, w, h; /* draw rubber-band rectangle */ x = MIN (align_tool->x1, align_tool->x0); y = MIN (align_tool->y1, align_tool->y0); w = MAX (align_tool->x1, align_tool->x0) - x; h = MAX (align_tool->y1, align_tool->y0) - y; gimp_draw_tool_draw_rectangle (draw_tool, FALSE, x, y,w, h, FALSE); for (list = g_list_first (align_tool->selected_objects); list; list = g_list_next (list)) { if (GIMP_IS_ITEM (list->data)) { GimpItem *item = GIMP_ITEM (list->data); if (GIMP_IS_VECTORS (list->data)) { gdouble x1_f, y1_f, x2_f, y2_f; gimp_vectors_bounds (GIMP_VECTORS (item), &x1_f, &y1_f, &x2_f, &y2_f); x = ROUND (x1_f); y = ROUND (y1_f); w = ROUND (x2_f - x1_f); h = ROUND (y2_f - y1_f); } else { gimp_item_offsets (item, &x, &y); w = gimp_item_width (item); h = gimp_item_height (item); } gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x, y, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_NORTH_WEST, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x + w, y, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_NORTH_EAST, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x, y + h, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_SOUTH_WEST, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x + w, y + h, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_SOUTH_EAST, FALSE); } else if (GIMP_IS_GUIDE (list->data)) { GimpGuide *guide = GIMP_GUIDE (list->data); GimpImage *image = GIMP_TOOL (draw_tool)->display->image; gint x, y; gint w, h; switch (gimp_guide_get_orientation (guide)) { case GIMP_ORIENTATION_VERTICAL: x = gimp_guide_get_position (guide); h = gimp_image_get_height (image); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x, h, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_SOUTH, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, x, 0, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_NORTH, FALSE); break; case GIMP_ORIENTATION_HORIZONTAL: y = gimp_guide_get_position (guide); w = gimp_image_get_width (image); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, w, y, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_EAST, FALSE); gimp_draw_tool_draw_handle (draw_tool, GIMP_HANDLE_FILLED_SQUARE, 0, y, MARKER_WIDTH, MARKER_WIDTH, GTK_ANCHOR_WEST, FALSE); break; default: break; } } } }