static void gimp_rectangle_select_tool_real_select (GimpRectangleSelectTool *rect_sel_tool, GimpChannelOps operation, gint x, gint y, gint w, gint h) { GimpTool *tool = GIMP_TOOL (rect_sel_tool); GimpSelectionOptions *options = GIMP_SELECTION_TOOL_GET_OPTIONS (tool); GimpRectangleSelectOptions *rect_select_options; GimpChannel *channel; rect_select_options = GIMP_RECTANGLE_SELECT_TOOL_GET_OPTIONS (tool); channel = gimp_image_get_mask (gimp_display_get_image (tool->display)); if (rect_select_options->round_corners) { /* To prevent elliptification of the rectangle, * we must cap the corner radius. */ gdouble max = MIN (w / 2.0, h / 2.0); gdouble radius = MIN (rect_select_options->corner_radius, max); gimp_channel_select_round_rect (channel, x, y, w, h, radius, radius, operation, options->antialias, options->feather, options->feather_radius, options->feather_radius, TRUE); } else { gimp_channel_select_rectangle (channel, x, y, w, h, operation, options->feather, options->feather_radius, options->feather_radius, TRUE); } }
static GimpValueArray * image_select_rectangle_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GimpValueArray *args, GError **error) { gboolean success = TRUE; GimpImage *image; gint32 operation; gdouble x; gdouble y; gdouble width; gdouble height; image = gimp_value_get_image (gimp_value_array_index (args, 0), gimp); operation = g_value_get_enum (gimp_value_array_index (args, 1)); x = g_value_get_double (gimp_value_array_index (args, 2)); y = g_value_get_double (gimp_value_array_index (args, 3)); width = g_value_get_double (gimp_value_array_index (args, 4)); height = g_value_get_double (gimp_value_array_index (args, 5)); if (success) { GimpPDBContext *pdb_context = GIMP_PDB_CONTEXT (context); gimp_channel_select_rectangle (gimp_image_get_mask (image), (gint) x, (gint) y, (gint) width, (gint) height, operation, pdb_context->feather, pdb_context->feather_radius_x, pdb_context->feather_radius_y, TRUE); } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }