mirror of https://github.com/GNOME/gimp.git
Issue #1805 - Sample Points keep resetting themselves to "Pixel"
Rename XCF property PROP_SAMPLE_POINT to PROP_OLD_SAMPLE_POINT and add new PROP_SAMPLE_POINT. The new property saves the sample point's pick mode plus some padding for whatever else we might want to add. Always save the old property too so nothing changes for older GIMP versions, and avoid loading the old property if the new one was loaded before.
This commit is contained in:
parent
cb3b7a1ba5
commit
47a008be97
|
@ -801,17 +801,56 @@ xcf_load_image_props (XcfInfo *info,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_SAMPLE_POINTS:
|
case PROP_SAMPLE_POINTS:
|
||||||
|
{
|
||||||
|
gint n_sample_points, i;
|
||||||
|
|
||||||
|
n_sample_points = prop_size / (5 * 4);
|
||||||
|
for (i = 0; i < n_sample_points; i++)
|
||||||
|
{
|
||||||
|
GimpSamplePoint *sample_point;
|
||||||
|
gint32 x, y;
|
||||||
|
GimpColorPickMode pick_mode;
|
||||||
|
guint32 padding[2] = { 0, };
|
||||||
|
|
||||||
|
xcf_read_int32 (info, (guint32 *) &x, 1);
|
||||||
|
xcf_read_int32 (info, (guint32 *) &y, 1);
|
||||||
|
xcf_read_int32 (info, (guint32 *) &pick_mode, 1);
|
||||||
|
xcf_read_int32 (info, (guint32 *) padding, 2);
|
||||||
|
|
||||||
|
GIMP_LOG (XCF, "prop sample point x=%d y=%d mode=%d",
|
||||||
|
x, y, pick_mode);
|
||||||
|
|
||||||
|
sample_point = gimp_image_add_sample_point_at_pos (image,
|
||||||
|
x, y, FALSE);
|
||||||
|
gimp_image_set_sample_point_pick_mode (image, sample_point,
|
||||||
|
pick_mode, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_OLD_SAMPLE_POINTS:
|
||||||
{
|
{
|
||||||
gint32 x, y;
|
gint32 x, y;
|
||||||
gint i, n_sample_points;
|
gint i, n_sample_points;
|
||||||
|
|
||||||
|
/* if there are already sample points, we loaded the new
|
||||||
|
* prop before
|
||||||
|
*/
|
||||||
|
if (gimp_image_get_sample_points (image))
|
||||||
|
{
|
||||||
|
if (! xcf_skip_unknown_prop (info, prop_size))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
n_sample_points = prop_size / (4 + 4);
|
n_sample_points = prop_size / (4 + 4);
|
||||||
for (i = 0; i < n_sample_points; i++)
|
for (i = 0; i < n_sample_points; i++)
|
||||||
{
|
{
|
||||||
xcf_read_int32 (info, (guint32 *) &x, 1);
|
xcf_read_int32 (info, (guint32 *) &x, 1);
|
||||||
xcf_read_int32 (info, (guint32 *) &y, 1);
|
xcf_read_int32 (info, (guint32 *) &y, 1);
|
||||||
|
|
||||||
GIMP_LOG (XCF, "prop sample point x=%d y=%d", x, y);
|
GIMP_LOG (XCF, "prop old sample point x=%d y=%d", x, y);
|
||||||
|
|
||||||
gimp_image_add_sample_point_at_pos (image, x, y, FALSE);
|
gimp_image_add_sample_point_at_pos (image, x, y, FALSE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ typedef enum
|
||||||
PROP_USER_UNIT = 24,
|
PROP_USER_UNIT = 24,
|
||||||
PROP_VECTORS = 25,
|
PROP_VECTORS = 25,
|
||||||
PROP_TEXT_LAYER_FLAGS = 26,
|
PROP_TEXT_LAYER_FLAGS = 26,
|
||||||
PROP_SAMPLE_POINTS = 27,
|
PROP_OLD_SAMPLE_POINTS = 27,
|
||||||
PROP_LOCK_CONTENT = 28,
|
PROP_LOCK_CONTENT = 28,
|
||||||
PROP_GROUP_ITEM = 29,
|
PROP_GROUP_ITEM = 29,
|
||||||
PROP_ITEM_PATH = 30,
|
PROP_ITEM_PATH = 30,
|
||||||
|
@ -63,7 +63,8 @@ typedef enum
|
||||||
PROP_COMPOSITE_MODE = 35,
|
PROP_COMPOSITE_MODE = 35,
|
||||||
PROP_COMPOSITE_SPACE = 36,
|
PROP_COMPOSITE_SPACE = 36,
|
||||||
PROP_BLEND_SPACE = 37,
|
PROP_BLEND_SPACE = 37,
|
||||||
PROP_FLOAT_COLOR = 38
|
PROP_FLOAT_COLOR = 38,
|
||||||
|
PROP_SAMPLE_POINTS = 39,
|
||||||
} PropType;
|
} PropType;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
@ -383,8 +383,15 @@ xcf_save_image_props (XcfInfo *info,
|
||||||
gimp_image_get_guides (image)));
|
gimp_image_get_guides (image)));
|
||||||
|
|
||||||
if (gimp_image_get_sample_points (image))
|
if (gimp_image_get_sample_points (image))
|
||||||
xcf_check_error (xcf_save_prop (info, image, PROP_SAMPLE_POINTS, error,
|
{
|
||||||
gimp_image_get_sample_points (image)));
|
/* save the new property before the old one, so loading can skip
|
||||||
|
* the latter
|
||||||
|
*/
|
||||||
|
xcf_check_error (xcf_save_prop (info, image, PROP_SAMPLE_POINTS, error,
|
||||||
|
gimp_image_get_sample_points (image)));
|
||||||
|
xcf_check_error (xcf_save_prop (info, image, PROP_OLD_SAMPLE_POINTS, error,
|
||||||
|
gimp_image_get_sample_points (image)));
|
||||||
|
}
|
||||||
|
|
||||||
xcf_check_error (xcf_save_prop (info, image, PROP_RESOLUTION, error,
|
xcf_check_error (xcf_save_prop (info, image, PROP_RESOLUTION, error,
|
||||||
xres, yres));
|
xres, yres));
|
||||||
|
@ -1074,6 +1081,34 @@ xcf_save_prop (XcfInfo *info,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_SAMPLE_POINTS:
|
case PROP_SAMPLE_POINTS:
|
||||||
|
{
|
||||||
|
GList *sample_points = va_arg (args, GList *);
|
||||||
|
gint n_sample_points = g_list_length (sample_points);
|
||||||
|
|
||||||
|
size = n_sample_points * (5 * 4);
|
||||||
|
|
||||||
|
xcf_write_prop_type_check_error (info, prop_type);
|
||||||
|
xcf_write_int32_check_error (info, &size, 1);
|
||||||
|
|
||||||
|
for (; sample_points; sample_points = g_list_next (sample_points))
|
||||||
|
{
|
||||||
|
GimpSamplePoint *sample_point = sample_points->data;
|
||||||
|
gint32 x, y;
|
||||||
|
GimpColorPickMode pick_mode;
|
||||||
|
guint32 padding[2] = { 0, };
|
||||||
|
|
||||||
|
gimp_sample_point_get_position (sample_point, &x, &y);
|
||||||
|
pick_mode = gimp_sample_point_get_pick_mode (sample_point);
|
||||||
|
|
||||||
|
xcf_write_int32_check_error (info, (guint32 *) &x, 1);
|
||||||
|
xcf_write_int32_check_error (info, (guint32 *) &y, 1);
|
||||||
|
xcf_write_int32_check_error (info, (guint32 *) &pick_mode, 1);
|
||||||
|
xcf_write_int32_check_error (info, (guint32 *) padding, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_OLD_SAMPLE_POINTS:
|
||||||
{
|
{
|
||||||
GList *sample_points = va_arg (args, GList *);
|
GList *sample_points = va_arg (args, GList *);
|
||||||
gint n_sample_points = g_list_length (sample_points);
|
gint n_sample_points = g_list_length (sample_points);
|
||||||
|
|
Loading…
Reference in New Issue