static GimpValueArray * image_select_round_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; gdouble corner_radius_x; gdouble corner_radius_y; 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)); corner_radius_x = g_value_get_double (gimp_value_array_index (args, 6)); corner_radius_y = g_value_get_double (gimp_value_array_index (args, 7)); if (success) { GimpPDBContext *pdb_context = GIMP_PDB_CONTEXT (context); gimp_channel_select_round_rect (gimp_image_get_mask (image), (gint) x, (gint) y, (gint) width, (gint) height, corner_radius_x, corner_radius_y, operation, pdb_context->antialias, 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); }
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); } }