gboolean gimp_image_pick_color (GimpImage *image, GimpDrawable *drawable, gint x, gint y, gboolean sample_merged, gboolean sample_average, gdouble average_radius, const Babl **sample_format, gpointer pixel, GimpRGB *color) { GimpPickable *pickable; g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE); g_return_val_if_fail (drawable == NULL || GIMP_IS_DRAWABLE (drawable), FALSE); g_return_val_if_fail (drawable == NULL || gimp_item_get_image (GIMP_ITEM (drawable)) == image, FALSE); if (! sample_merged) { if (! drawable) drawable = gimp_image_get_active_drawable (image); if (! drawable) return FALSE; } if (sample_merged) { pickable = GIMP_PICKABLE (image); } else { gint off_x, off_y; gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y); x -= off_x; y -= off_y; pickable = GIMP_PICKABLE (drawable); } /* Do *not* call gimp_pickable_flush() here because it's too expensive * to call it unconditionally each time e.g. the cursor view is updated. * Instead, call gimp_pickable_flush() in the callers if needed. */ if (sample_format) *sample_format = gimp_pickable_get_format (pickable); return gimp_pickable_pick_color (pickable, x, y, sample_average, average_radius, pixel, color); }
static gboolean gimp_image_map_tool_pick_color (GimpColorTool *color_tool, gint x, gint y, GimpImageType *sample_type, GimpRGB *color, gint *color_index) { GimpImageMapTool *tool = GIMP_IMAGE_MAP_TOOL (color_tool); gint off_x, off_y; gimp_item_offsets (GIMP_ITEM (tool->drawable), &off_x, &off_y); *sample_type = gimp_drawable_type (tool->drawable); return gimp_pickable_pick_color (GIMP_PICKABLE (tool->image_map), x - off_x, y - off_y, color_tool->options->sample_average, color_tool->options->average_radius, color, color_index); }
static gboolean gimp_image_map_tool_pick_color (GimpColorTool *color_tool, gint x, gint y, const Babl **sample_format, gpointer pixel, GimpRGB *color) { GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (color_tool); gint off_x, off_y; gimp_item_get_offset (GIMP_ITEM (im_tool->drawable), &off_x, &off_y); *sample_format = gimp_drawable_get_format (im_tool->drawable); return gimp_pickable_pick_color (GIMP_PICKABLE (im_tool->drawable), x - off_x, y - off_y, color_tool->options->sample_average, color_tool->options->average_radius, pixel, color); }