app, icons, libgimpwidgets: add "distribute with evenly gaps" options.

There was one case in Inkscape which we could not do: distributing objects
keeping even gaps between them. Until now, we could only distribute keeping even
distance between anchor points (top, left, bottom, right or center).

With these 2 additional distribute options, I believe that GIMP is able to do
all the Alignment and Distribution options available in Inkscape (not the
"Rearrange" or node features, neither the text align/distrib; I just mean the
common align/distribute on objects), and even a bit more thanks to the anchor
point system (e.g. in Inkscape, we can't left or right-align to a reference
object/image center, or we can't center to a reference left/right/bottom/top
border; but we can do it in GIMP).

The icons are hopefully temporary, until we can make better ones.
This commit is contained in:
Jehan 2022-11-08 23:18:42 +01:00
parent 9ba5b8dbd6
commit e48b002c84
14 changed files with 781 additions and 26 deletions

View File

@ -53,19 +53,23 @@ gimp_alignment_type_get_type (void)
{ GIMP_ALIGN_BOTTOM, "GIMP_ALIGN_BOTTOM", "align-bottom" },
{ GIMP_ARRANGE_HFILL, "GIMP_ARRANGE_HFILL", "arrange-hfill" },
{ GIMP_ARRANGE_VFILL, "GIMP_ARRANGE_VFILL", "arrange-vfill" },
{ GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP, "GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP", "distribute-even-horizontal-gap" },
{ GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP, "GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP", "distribute-even-vertical-gap" },
{ 0, NULL, NULL }
};
static const GimpEnumDesc descs[] =
{
{ GIMP_ALIGN_LEFT, "GIMP_ALIGN_LEFT", NULL },
{ GIMP_ALIGN_HCENTER, "GIMP_ALIGN_HCENTER", NULL },
{ GIMP_ALIGN_RIGHT, "GIMP_ALIGN_RIGHT", NULL },
{ GIMP_ALIGN_TOP, "GIMP_ALIGN_TOP", NULL },
{ GIMP_ALIGN_VCENTER, "GIMP_ALIGN_VCENTER", NULL },
{ GIMP_ALIGN_BOTTOM, "GIMP_ALIGN_BOTTOM", NULL },
{ GIMP_ARRANGE_HFILL, "GIMP_ARRANGE_HFILL", NULL },
{ GIMP_ARRANGE_VFILL, "GIMP_ARRANGE_VFILL", NULL },
{ GIMP_ALIGN_LEFT, NC_("alignment-type", "Align to the left"), NULL },
{ GIMP_ALIGN_HCENTER, NC_("alignment-type", "Center horizontally"), NULL },
{ GIMP_ALIGN_RIGHT, NC_("alignment-type", "Align to the right"), NULL },
{ GIMP_ALIGN_TOP, NC_("alignment-type", "Align to the top"), NULL },
{ GIMP_ALIGN_VCENTER, NC_("alignment-type", "Center vertically"), NULL },
{ GIMP_ALIGN_BOTTOM, NC_("alignment-type", "Align to the bottom"), NULL },
{ GIMP_ARRANGE_HFILL, NC_("alignment-type", "Distribute anchor points horizontally evenly"), NULL },
{ GIMP_ARRANGE_VFILL, NC_("alignment-type", "Distribute anchor points vertically evenly"), NULL },
{ GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP, NC_("alignment-type", "Distribute horizontally with even horizontal gaps"), NULL },
{ GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP, NC_("alignment-type", "Distribute vertically with even vertical gaps"), NULL },
{ 0, NULL, NULL }
};

View File

@ -54,14 +54,16 @@ GType gimp_alignment_type_get_type (void) G_GNUC_CONST;
typedef enum /*< pdb-skip >*/
{
GIMP_ALIGN_LEFT,
GIMP_ALIGN_HCENTER,
GIMP_ALIGN_RIGHT,
GIMP_ALIGN_TOP,
GIMP_ALIGN_VCENTER,
GIMP_ALIGN_BOTTOM,
GIMP_ARRANGE_HFILL,
GIMP_ARRANGE_VFILL
GIMP_ALIGN_LEFT, /*< desc="Align to the left" >*/
GIMP_ALIGN_HCENTER, /*< desc="Center horizontally" >*/
GIMP_ALIGN_RIGHT, /*< desc="Align to the right" >*/
GIMP_ALIGN_TOP, /*< desc="Align to the top" >*/
GIMP_ALIGN_VCENTER, /*< desc="Center vertically" >*/
GIMP_ALIGN_BOTTOM, /*< desc="Align to the bottom" >*/
GIMP_ARRANGE_HFILL, /*< desc="Distribute anchor points horizontally evenly" >*/
GIMP_ARRANGE_VFILL, /*< desc="Distribute anchor points vertically evenly" >*/
GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP, /*< desc="Distribute horizontally with even horizontal gaps" >*/
GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP, /*< desc="Distribute vertically with even vertical gaps" >*/
} GimpAlignmentType;

View File

@ -155,6 +155,20 @@ gimp_image_arrange_objects (GimpImage *image,
do_y = TRUE;
break;
case GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP:
use_obj_x_offset = TRUE;
do_x = TRUE;
case GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP:
if (GIMP_IS_GUIDE (reference) || g_list_length (list) <= 2)
return;
if (! do_x)
do_y = TRUE;
/* Gap distribution does not use the anchor point. */
align_x = align_y = 0.0;
break;
default:
g_return_if_reached ();
}
@ -171,22 +185,46 @@ gimp_image_arrange_objects (GimpImage *image,
{
GList *list;
gint n;
gint distr_length = 0;
gdouble fill_offset = 0;
gdouble fill_offset = 0;
if (reference_alignment == GIMP_ARRANGE_HFILL ||
reference_alignment == GIMP_ARRANGE_VFILL)
if (reference_alignment == GIMP_ARRANGE_HFILL ||
reference_alignment == GIMP_ARRANGE_VFILL ||
reference_alignment == GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP ||
reference_alignment == GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP)
{
/* Distribution does not use the reference. Extreme coordinate items
* are used instead.
*/
GList *last_object = g_list_last (object_list);
gint distr_length;
z0 = GPOINTER_TO_INT (g_object_get_data (object_list->data, "align-offset"));
distr_length = GPOINTER_TO_INT (g_object_get_data (last_object->data, "align-offset")) - z0;
/* The offset parameter works as an internal margin */
fill_offset = (distr_length - 2 * offset) / (gdouble) (g_list_length (object_list) - 1);
if (reference_alignment == GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP ||
reference_alignment == GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP)
{
for (list = object_list; list && list->next; list = g_list_next (list))
{
gint obj_len;
if (reference_alignment == GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP)
obj_len = GPOINTER_TO_INT (g_object_get_data (list->data, "align-width"));
else
obj_len = GPOINTER_TO_INT (g_object_get_data (list->data, "align-height"));
distr_length -= obj_len;
/* Initial offset is at end of first object. */
if (list == object_list)
z0 += obj_len;
}
fill_offset = distr_length / (gdouble) (g_list_length (object_list) - 1);
}
else
{
/* The offset parameter works as an internal margin */
fill_offset = (distr_length - 2 * offset) / (gdouble) (g_list_length (object_list) - 1);
}
/* Removing first and last objects. These stay unmoved. */
object_list = g_list_delete_link (object_list, last_object);
@ -228,6 +266,24 @@ gimp_image_arrange_objects (GimpImage *image,
{
ytranslate = ROUND (z0 - z1 + n * fill_offset);
}
else if (reference_alignment == GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP)
{
gint obj_len;
xtranslate = ROUND (z0 + fill_offset - z1);
obj_len = GPOINTER_TO_INT (g_object_get_data (target, "align-width"));
z0 = z0 + fill_offset + obj_len;
}
else if (reference_alignment == GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP)
{
gint obj_len;
ytranslate = ROUND (z0 + fill_offset - z1);
obj_len = GPOINTER_TO_INT (g_object_get_data (target, "align-height"));
z0 = z0 + fill_offset + obj_len;
}
else /* the normal computing, when we don't depend on the
* width or height of the reference object
*/

View File

@ -46,8 +46,8 @@
#define ALIGN_VER_N_BUTTONS 3
#define ALIGN_HOR_N_BUTTONS 3
#define DISTR_VER_N_BUTTONS 1
#define DISTR_HOR_N_BUTTONS 1
#define DISTR_VER_N_BUTTONS 2
#define DISTR_HOR_N_BUTTONS 2
enum
@ -361,6 +361,12 @@ gimp_align_options_button_new (GimpAlignOptions *options,
case GIMP_ARRANGE_VFILL:
icon_name = GIMP_ICON_FILL_VERTICAL;
break;
case GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP:
icon_name = GIMP_ICON_EVEN_HORIZONTAL_GAP;
break;
case GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP:
icon_name = GIMP_ICON_EVEN_VERTICAL_GAP;
break;
default:
g_return_val_if_reached (NULL);
break;
@ -547,12 +553,22 @@ gimp_align_options_gui (GimpToolOptions *tool_options)
n = 0;
options->priv->distr_ver_button[n++] =
gimp_align_options_button_new (options, GIMP_ARRANGE_HFILL, hbox,
_("Distribute targets evenly in the horizontal"));
_("Distribute anchor points of targets evenly in the horizontal"));
options->priv->distr_ver_button[n++] =
gimp_align_options_button_new (options, GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP, hbox,
_("Distribute horizontally with even horizontal gaps"));
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (section_vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
n = 0;
options->priv->distr_hor_button[n++] =
gimp_align_options_button_new (options, GIMP_ARRANGE_VFILL, hbox,
_("Distribute targets evenly in the vertical"));
_("Distribute anchor points of targets evenly in the vertical"));
options->priv->distr_hor_button[n++] =
gimp_align_options_button_new (options, GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP, hbox,
_("Distribute vertically with even vertical gaps"));
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (section_vbox), hbox, FALSE, FALSE, 0);

View File

@ -783,6 +783,8 @@ gimp_align_tool_align (GimpAlignTool *align_tool,
case GIMP_ALIGN_TOP:
case GIMP_ALIGN_VCENTER:
case GIMP_ALIGN_BOTTOM:
case GIMP_DISTRIBUTE_EVEN_HORIZONTAL_GAP:
case GIMP_DISTRIBUTE_EVEN_VERTICAL_GAP:
offset = 0;
break;

View File

@ -115,6 +115,8 @@ scalable_images = \
scalable/gimp-device-status.svg \
scalable/gimp-duplicate.svg \
scalable/gimp-dynamics.svg \
scalable/gimp-even-horizontal-gap.svg \
scalable/gimp-even-vertical-gap.svg \
scalable/gimp-file-manager.svg \
scalable/gimp-floating-selection.svg \
scalable/gimp-gegl.svg \
@ -764,6 +766,8 @@ icons24_images = \
24/gimp-device-status.png \
\
24/gimp-display-filter.png \
24/gimp-even-horizontal-gap.png \
24/gimp-even-vertical-gap.png \
24/gimp-floating-selection.png \
24/gimp-gegl.png \
24/gimp-gravity-east.png \

View File

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="24"
height="24"
viewBox="0 0 24 24"
id="svg30571"
version="1.1"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="gimp-even-horizontal-gap.svg"
inkscape:export-filename="/home/klaus/Bilder/icons/Symbolic/hicolor/24x24/apps/gimp-channel.png"
inkscape:export-xdpi="98.181816"
inkscape:export-ydpi="98.181816"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs30573" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="36.761174"
inkscape:cx="13.193267"
inkscape:cy="10.541013"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:snap-page="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-text-baseline="true"
showborder="false"
inkscape:window-width="1920"
inkscape:window-height="1136"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="true"
inkscape:snap-global="false"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid4370" />
</sodipodi:namedview>
<metadata
id="metadata30576">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Klaus Staedtler</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1028.3622)">
<g
id="g1996">
<rect
inkscape:transform-center-y="52.3259"
inkscape:transform-center-x="-94.752306"
y="-24.000021"
x="1028.3622"
height="24"
width="24"
id="rect6639-54"
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(90)" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.46758;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 19.667289,1040.3274 -2.031089,-2.8554 0.01556,2.135 c -0.412955,0.014 -0.859596,0.019 -1.272973,0.018 v -2.208 l -2.047617,2.9109 2.047617,2.9075 v -2.0888 c 0.413628,0.014 0.844162,-0.035 1.257286,-0.038 v 2.1828 z"
id="path12078-9" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.46758;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 9.6696103,1040.3274 -2.031089,-2.8554 0.01556,2.135 c -0.412955,0.014 -0.859596,0.019 -1.272973,0.018 v -2.208 l -2.047617,2.9109 2.047617,2.9075 v -2.0888 c 0.413628,0.014 0.844162,-0.035 1.257286,-0.038 v 2.1828 z"
id="path12078-9-5" />
<rect
transform="scale(1,-1)"
y="-1049.8623"
x="20.500017"
height="19.00012"
width="2.0001204"
id="rect12082-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.99988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-1049.8599"
x="10.502381"
height="18.995235"
width="2.995235"
id="rect12082-7-3"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-1049.8623"
x="1.4998953"
height="19.00012"
width="2.0001204"
id="rect12082-7-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.99988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="24"
height="24"
viewBox="0 0 24 24"
id="svg30571"
version="1.1"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="gimp-even-vertical-gap.svg"
inkscape:export-filename="/home/klaus/Bilder/icons/Symbolic/hicolor/24x24/apps/gimp-channel.png"
inkscape:export-xdpi="98.181816"
inkscape:export-ydpi="98.181816"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs30573" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="36.761174"
inkscape:cx="13.193267"
inkscape:cy="10.541013"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:snap-page="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-text-baseline="true"
showborder="false"
inkscape:window-width="1920"
inkscape:window-height="1136"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="true"
inkscape:snap-global="false"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid4370" />
</sodipodi:namedview>
<metadata
id="metadata30576">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Klaus Staedtler</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1028.3622)">
<g
id="g1996"
transform="rotate(90,12.000021,1040.3622)">
<rect
inkscape:transform-center-y="52.3259"
inkscape:transform-center-x="-94.752306"
y="-24.000021"
x="1028.3622"
height="24"
width="24"
id="rect6639-54"
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(90)" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.46758;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 19.667289,1040.3274 -2.031089,-2.8554 0.01556,2.135 c -0.412955,0.014 -0.859596,0.019 -1.272973,0.018 v -2.208 l -2.047617,2.9109 2.047617,2.9075 v -2.0888 c 0.413628,0.014 0.844162,-0.035 1.257286,-0.038 v 2.1828 z"
id="path12078-9" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.46758;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 9.6696103,1040.3274 -2.031089,-2.8554 0.01556,2.135 c -0.412955,0.014 -0.859596,0.019 -1.272973,0.018 v -2.208 l -2.047617,2.9109 2.047617,2.9075 v -2.0888 c 0.413628,0.014 0.844162,-0.035 1.257286,-0.038 v 2.1828 z"
id="path12078-9-5" />
<rect
transform="scale(1,-1)"
y="-1049.8623"
x="20.500017"
height="19.00012"
width="2.0001204"
id="rect12082-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.99988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-1049.8599"
x="10.502381"
height="18.995235"
width="2.995235"
id="rect12082-7-3"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-1049.8623"
x="1.4998953"
height="19.00012"
width="2.0001204"
id="rect12082-7-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.99988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -115,6 +115,8 @@ scalable_images = \
scalable/gimp-device-status-symbolic.svg \
scalable/gimp-duplicate-symbolic.svg \
scalable/gimp-dynamics-symbolic.svg \
scalable/gimp-even-horizontal-gap-symbolic.svg \
scalable/gimp-even-vertical-gap-symbolic.svg \
scalable/gimp-file-manager-symbolic.svg \
scalable/gimp-floating-selection-symbolic.svg \
scalable/gimp-gegl-symbolic.svg \
@ -764,6 +766,8 @@ icons24_images = \
24/gimp-device-status-symbolic.symbolic.png \
\
24/gimp-display-filter-symbolic.symbolic.png \
24/gimp-even-horizontal-gap-symbolic.symbolic.png \
24/gimp-even-vertical-gap-symbolic.symbolic.png \
24/gimp-floating-selection-symbolic.symbolic.png \
24/gimp-gegl-symbolic.symbolic.png \
24/gimp-gravity-east-symbolic.symbolic.png \

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 23.999999 24"
id="svg7384"
height="24"
width="24"
version="1.1"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="gimp-even-horizontal-gap-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1136"
id="namedview1509"
showgrid="false"
inkscape:zoom="9.2271872"
inkscape:cx="11.921293"
inkscape:cy="21.187388"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg7384"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:contributor>
<cc:Agent>
<dc:title>Barbara Muraus, Jakub Steiner, Klaus Staedtler</dc:title>
</cc:Agent>
</dc:contributor>
<dc:description>Images originally created as the &quot;Art Libre&quot; icon set. Extended and adopted for GIMP</dc:description>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7386">
<linearGradient
id="linearGradient8074"
inkscape:swatch="solid">
<stop
id="stop8072"
offset="0"
style="stop-color:#be00be;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7561"
inkscape:swatch="solid">
<stop
id="stop7558"
offset="0"
style="stop-color:#a5a5a5;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7548"
inkscape:swatch="solid">
<stop
id="stop7546"
offset="0"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7542"
inkscape:swatch="solid">
<stop
id="stop7538"
offset="0"
style="stop-color:#c9c9c9;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)"
id="linearGradient19282"
inkscape:swatch="solid">
<stop
id="stop19284"
offset="0"
style="stop-color:#b4b4b4;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.34682586,0,0,0.30620888,-154.35207,-275.32368)"
id="linearGradient19282-4"
inkscape:swatch="solid">
<stop
id="stop19284-0"
offset="0"
style="stop-color:#bebebe;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="translate(-928.46112,-905.60676)"
gradientUnits="userSpaceOnUse"
y2="1040.3622"
x2="-20"
y1="1040.3622"
x1="-22"
id="linearGradient10034"
xlink:href="#linearGradient19282-4" />
<linearGradient
gradientTransform="matrix(0.4864789,0,0,0.42324449,462.339,-376.37197)"
gradientUnits="userSpaceOnUse"
y2="1040.3621"
x2="19"
y1="1040.3621"
x1="5"
id="linearGradient10036"
xlink:href="#linearGradient19282-4" />
<linearGradient
gradientTransform="translate(-928.46112,-905.60676)"
gradientUnits="userSpaceOnUse"
y2="1040.3622"
x2="-2"
y1="1040.3622"
x1="-4"
id="linearGradient10038"
xlink:href="#linearGradient19282-4" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient19282-4"
id="linearGradient940"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-919.46112,-905.60677)"
x1="-22"
y1="1040.3622"
x2="-20"
y2="1040.3622" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient19282-4"
id="linearGradient981"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4864789,0,0,0.42324449,453.339,-376.37198)"
x1="5"
y1="1040.3621"
x2="19"
y2="1040.3621" />
</defs>
<g
id="g1047">
<path
style="fill:url(#linearGradient10036);fill-opacity:1;stroke:none;stroke-width:0.548779"
d="m 15.527041,9.4605756 -2.432394,2.5543654 2.432394,2.524568 v -1.710331 c 0.648036,-0.01227 1.297238,-0.03005 1.945916,-0.02159 v 1.731833 l 2.432395,-2.524565 -2.432395,-2.554365 v 1.701231 c -0.649014,-0.0055 -1.297719,-0.0059 -1.945916,0 z"
id="path12078-2"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient981);fill-opacity:1;stroke:none;stroke-width:0.548779"
d="m 6.5270412,9.4605761 -2.4323941,2.5543649 2.4323941,2.524568 v -1.710331 c 0.6480362,-0.01227 1.2972381,-0.03005 1.9459162,-0.02159 v 1.731833 L 10.905353,12.014856 8.4729574,9.4604911 v 1.7012309 c -0.6490141,-0.0055 -1.2977191,-0.0059 -1.9459163,0 z"
id="path12078-2-5"
inkscape:connector-curvature="0" />
<rect
style="fill:url(#linearGradient10038);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-7"
width="2"
height="18"
x="-4"
y="3"
transform="scale(-1,1)" />
<rect
style="fill:url(#linearGradient10034);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-5"
width="2"
height="18"
x="-22"
y="3"
transform="scale(-1,1)" />
<rect
style="fill:url(#linearGradient940);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-5-6"
width="2"
height="18"
x="-13"
y="3"
transform="scale(-1,1)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 23.999999 24"
id="svg7384"
height="24"
width="24"
version="1.1"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="gimp-even-vertical-gap-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1136"
id="namedview1509"
showgrid="false"
inkscape:zoom="9.2271872"
inkscape:cx="11.921293"
inkscape:cy="21.187388"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg7384"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:contributor>
<cc:Agent>
<dc:title>Barbara Muraus, Jakub Steiner, Klaus Staedtler</dc:title>
</cc:Agent>
</dc:contributor>
<dc:description>Images originally created as the &quot;Art Libre&quot; icon set. Extended and adopted for GIMP</dc:description>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7386">
<linearGradient
id="linearGradient8074"
inkscape:swatch="solid">
<stop
id="stop8072"
offset="0"
style="stop-color:#be00be;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7561"
inkscape:swatch="solid">
<stop
id="stop7558"
offset="0"
style="stop-color:#a5a5a5;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7548"
inkscape:swatch="solid">
<stop
id="stop7546"
offset="0"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7542"
inkscape:swatch="solid">
<stop
id="stop7538"
offset="0"
style="stop-color:#c9c9c9;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0,-735328.32,170712.69,0,2464326300,577972450)"
id="linearGradient19282"
inkscape:swatch="solid">
<stop
id="stop19284"
offset="0"
style="stop-color:#b4b4b4;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.34682586,0,0,0.30620888,-154.35207,-275.32368)"
id="linearGradient19282-4"
inkscape:swatch="solid">
<stop
id="stop19284-0"
offset="0"
style="stop-color:#bebebe;stop-opacity:1;" />
</linearGradient>
<linearGradient
gradientTransform="translate(-928.46112,-905.60676)"
gradientUnits="userSpaceOnUse"
y2="1040.3622"
x2="-20"
y1="1040.3622"
x1="-22"
id="linearGradient10034"
xlink:href="#linearGradient19282-4" />
<linearGradient
gradientTransform="matrix(0.4864789,0,0,0.42324449,462.339,-376.37197)"
gradientUnits="userSpaceOnUse"
y2="1040.3621"
x2="19"
y1="1040.3621"
x1="5"
id="linearGradient10036"
xlink:href="#linearGradient19282-4" />
<linearGradient
gradientTransform="translate(-928.46112,-905.60676)"
gradientUnits="userSpaceOnUse"
y2="1040.3622"
x2="-2"
y1="1040.3622"
x1="-4"
id="linearGradient10038"
xlink:href="#linearGradient19282-4" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient19282-4"
id="linearGradient940"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-919.46112,-905.60677)"
x1="-22"
y1="1040.3622"
x2="-20"
y2="1040.3622" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient19282-4"
id="linearGradient981"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4864789,0,0,0.42324449,453.339,-376.37198)"
x1="5"
y1="1040.3621"
x2="19"
y2="1040.3621" />
</defs>
<g
id="g1047"
transform="rotate(90,12,12)">
<path
style="fill:url(#linearGradient10036);fill-opacity:1;stroke:none;stroke-width:0.548779"
d="m 15.527041,9.4605756 -2.432394,2.5543654 2.432394,2.524568 v -1.710331 c 0.648036,-0.01227 1.297238,-0.03005 1.945916,-0.02159 v 1.731833 l 2.432395,-2.524565 -2.432395,-2.554365 v 1.701231 c -0.649014,-0.0055 -1.297719,-0.0059 -1.945916,0 z"
id="path12078-2"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient981);fill-opacity:1;stroke:none;stroke-width:0.548779"
d="m 6.5270412,9.4605761 -2.4323941,2.5543649 2.4323941,2.524568 v -1.710331 c 0.6480362,-0.01227 1.2972381,-0.03005 1.9459162,-0.02159 v 1.731833 L 10.905353,12.014856 8.4729574,9.4604911 v 1.7012309 c -0.6490141,-0.0055 -1.2977191,-0.0059 -1.9459163,0 z"
id="path12078-2-5"
inkscape:connector-curvature="0" />
<rect
style="fill:url(#linearGradient10038);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-7"
width="2"
height="18"
x="-4"
y="3"
transform="scale(-1,1)" />
<rect
style="fill:url(#linearGradient10034);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-5"
width="2"
height="18"
x="-22"
y="3"
transform="scale(-1,1)" />
<rect
style="fill:url(#linearGradient940);fill-opacity:1;stroke:none;stroke-width:0.890176"
id="rect12082-5-6"
width="2"
height="18"
x="-13"
y="3"
transform="scale(-1,1)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -29,6 +29,8 @@ gimp-device-status
# Used as GimpViewableDialog icon in gimpdisplayshell-filter-dialog.c,
# i.e. as GTK_ICON_SIZE_LARGE_TOOLBAR (24px).
gimp-display-filter
gimp-even-horizontal-gap
gimp-even-vertical-gap
gimp-floating-selection
gimp-gegl
gimp-gravity-east

View File

@ -106,6 +106,8 @@ gimp-detach
gimp-device-status
gimp-duplicate
gimp-dynamics
gimp-even-horizontal-gap
gimp-even-vertical-gap
gimp-file-manager
gimp-floating-selection
gimp-gegl

View File

@ -210,6 +210,9 @@ G_BEGIN_DECLS
#define GIMP_ICON_EDIT_REDO "edit-redo"
#define GIMP_ICON_EDIT_UNDO "edit-undo"
#define GIMP_ICON_EVEN_HORIZONTAL_GAP "gimp-even-horizontal-gap"
#define GIMP_ICON_EVEN_VERTICAL_GAP "gimp-even-vertical-gap"
#define GIMP_ICON_FILL_HORIZONTAL "gimp-hfill"
#define GIMP_ICON_FILL_VERTICAL "gimp-vfill"