mirror of https://github.com/GNOME/gimp.git
app: add support for picking GEGL relative-coordinate values
Also, don't link relative coordinates by default, and remove some crap heuristics that predate property keys.
This commit is contained in:
parent
6c5515c676
commit
3550132ac7
|
@ -370,16 +370,14 @@ gimp_operation_tool_color_picked (GimpImageMapTool *im_tool,
|
|||
|
||||
if (pspecs[1])
|
||||
{
|
||||
GimpDrawable *drawable = GIMP_TOOL (im_tool)->drawable;
|
||||
GObjectClass *object_class = G_OBJECT_GET_CLASS (tool->config);
|
||||
GParamSpec *pspec_x;
|
||||
GParamSpec *pspec_y;
|
||||
gint width = 1;
|
||||
gint height = 1;
|
||||
GimpImageMapOptions *options = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
|
||||
GimpDrawable *drawable = GIMP_TOOL (im_tool)->drawable;
|
||||
GObjectClass *object_class = G_OBJECT_GET_CLASS (tool->config);
|
||||
GParamSpec *pspec_x;
|
||||
GParamSpec *pspec_y;
|
||||
gint width = 1;
|
||||
gint height = 1;
|
||||
|
||||
/* the operation's coordinate system is the selection bounds of
|
||||
* the drawable
|
||||
*/
|
||||
if (drawable)
|
||||
{
|
||||
gint off_x, off_y;
|
||||
|
@ -389,11 +387,21 @@ gimp_operation_tool_color_picked (GimpImageMapTool *im_tool,
|
|||
x -= off_x;
|
||||
y -= off_y;
|
||||
|
||||
if (gimp_item_mask_intersect (GIMP_ITEM (drawable),
|
||||
&off_x, &off_y, &width, &height))
|
||||
switch (options->region)
|
||||
{
|
||||
x -= off_x;
|
||||
y -= off_y;
|
||||
case GIMP_IMAGE_MAP_REGION_SELECTION:
|
||||
if (gimp_item_mask_intersect (GIMP_ITEM (drawable),
|
||||
&off_x, &off_y, &width, &height))
|
||||
{
|
||||
x -= off_x;
|
||||
y -= off_y;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_IMAGE_MAP_REGION_DRAWABLE:
|
||||
width = gimp_item_get_width (GIMP_ITEM (drawable));
|
||||
height = gimp_item_get_height (GIMP_ITEM (drawable));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -409,6 +417,15 @@ gimp_operation_tool_color_picked (GimpImageMapTool *im_tool,
|
|||
g_value_init (&value_x, G_PARAM_SPEC_VALUE_TYPE (pspec_x));
|
||||
g_value_init (&value_y, G_PARAM_SPEC_VALUE_TYPE (pspec_y));
|
||||
|
||||
#define HAS_KEY(p,k,v) gimp_gegl_param_spec_has_key (p, k, v)
|
||||
|
||||
if (HAS_KEY (pspec_x, "unit", "relative-coordinate") &&
|
||||
HAS_KEY (pspec_y, "unit", "relative-coordinate"))
|
||||
{
|
||||
x /= (gdouble) width;
|
||||
y /= (gdouble) height;
|
||||
}
|
||||
|
||||
if (G_IS_PARAM_SPEC_INT (pspec_x))
|
||||
{
|
||||
g_value_set_int (&value_x, x);
|
||||
|
@ -424,31 +441,6 @@ gimp_operation_tool_color_picked (GimpImageMapTool *im_tool,
|
|||
}
|
||||
else if (G_IS_PARAM_SPEC_DOUBLE (pspec_x))
|
||||
{
|
||||
GParamSpecDouble *dspec_x = G_PARAM_SPEC_DOUBLE (pspec_x);
|
||||
GParamSpecDouble *dspec_y = G_PARAM_SPEC_DOUBLE (pspec_y);
|
||||
|
||||
/* handle what certain well known ops use as extent,
|
||||
* this is by no measure proper code...
|
||||
*/
|
||||
if (dspec_x->minimum == 0.0 && dspec_x->maximum == 1.0 &&
|
||||
dspec_y->minimum == 0.0 && dspec_y->maximum == 1.0)
|
||||
{
|
||||
x /= width;
|
||||
y /= height;
|
||||
}
|
||||
else if (dspec_x->minimum == -1.0 && dspec_x->maximum == 2.0 &&
|
||||
dspec_y->minimum == -1.0 && dspec_y->maximum == 2.0)
|
||||
{
|
||||
x /= width;
|
||||
y /= height;
|
||||
}
|
||||
else if (dspec_x->minimum == -1.0 && dspec_x->maximum == 1.0 &&
|
||||
dspec_y->minimum == -1.0 && dspec_y->maximum == 1.0)
|
||||
{
|
||||
x = x * 2.0 / width - 1.0;
|
||||
y = y * 2.0 / height - 1.0;
|
||||
}
|
||||
|
||||
g_value_set_double (&value_x, x);
|
||||
g_value_set_double (&value_y, y);
|
||||
|
||||
|
|
|
@ -306,7 +306,8 @@ gimp_prop_table_new (GObject *config,
|
|||
0, 0);
|
||||
gtk_widget_show (chain);
|
||||
|
||||
if (! HAS_KEY (pspec, "unit", "pixel-coordinate") &&
|
||||
if (! HAS_KEY (pspec, "unit", "pixel-coordinate") &&
|
||||
! HAS_KEY (pspec, "unit", "relative-coordinate") &&
|
||||
gtk_adjustment_get_value (last_x_adj) ==
|
||||
gtk_adjustment_get_value (adj))
|
||||
{
|
||||
|
@ -328,7 +329,8 @@ gimp_prop_table_new (GObject *config,
|
|||
g_object_set_data (G_OBJECT (last_x_adj), "y-adjustment", adj);
|
||||
|
||||
if (create_picker_func &&
|
||||
HAS_KEY (pspec, "unit", "pixel-coordinate"))
|
||||
(HAS_KEY (pspec, "unit", "pixel-coordinate") ||
|
||||
HAS_KEY (pspec, "unit", "relative-coordinate")))
|
||||
{
|
||||
GtkWidget *button;
|
||||
gchar *pspec_name;
|
||||
|
|
Loading…
Reference in New Issue