diff --git a/app/path/gimpvectorlayerundo.c b/app/path/gimpvectorlayerundo.c
index 53124e445c..7b6efd60fe 100644
--- a/app/path/gimpvectorlayerundo.c
+++ b/app/path/gimpvectorlayerundo.c
@@ -1,272 +1,272 @@
-/* GIMP - The GNU Image Manipulation Program
- * Copyright (C) 1995 Spencer Kimball and Peter Mattis
- *
- * gimpvectorlayerundo.h
- *
- * Copyright 2006 Hendrik Boom
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "config.h"
-
-#include
-#include
-#include
-
-#include "libgimpconfig/gimpconfig.h"
-
-#include "path-types.h"
-
-#include "core/gimp-memsize.h"
-#include "core/gimp-utils.h"
-#include "core/gimpitem.h"
-#include "core/gimpitemundo.h"
-
-#include "gimpvectorlayer.h"
-#include "gimpvectorlayeroptions.h"
-#include "gimpvectorlayerundo.h"
-
-enum
-{
- PROP_0,
- PROP_PARAM
-};
-
-
-static void gimp_vector_layer_undo_constructed (GObject *object);
-static void gimp_vector_layer_undo_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gimp_vector_layer_undo_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec);
-static gint64 gimp_vector_layer_undo_get_memsize (GimpObject *object,
- gint64 *gui_size);
-static void gimp_vector_layer_undo_pop (GimpUndo *undo,
- GimpUndoMode undo_mode,
- GimpUndoAccumulator *accum);
-static void gimp_vector_layer_undo_free (GimpUndo *undo,
- GimpUndoMode undo_mode);
-
-
-
-G_DEFINE_TYPE (GimpVectorLayerUndo, gimp_vector_layer_undo, GIMP_TYPE_ITEM_UNDO)
-
-#define parent_class gimp_vector_layer_undo_parent_class
-
-
-static void
-gimp_vector_layer_undo_class_init (GimpVectorLayerUndoClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
- GimpUndoClass *undo_class = GIMP_UNDO_CLASS (klass);
-
- object_class->constructed = gimp_vector_layer_undo_constructed;
- object_class->set_property = gimp_vector_layer_undo_set_property;
- object_class->get_property = gimp_vector_layer_undo_get_property;
-
- gimp_object_class->get_memsize = gimp_vector_layer_undo_get_memsize;
-
- undo_class->pop = gimp_vector_layer_undo_pop;
- undo_class->free = gimp_vector_layer_undo_free;
-
- g_object_class_install_property (object_class, PROP_PARAM,
- g_param_spec_param ("param", NULL, NULL,
- G_TYPE_PARAM,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-}
-
-static void
-gimp_vector_layer_undo_init (GimpVectorLayerUndo *undo)
-{
-}
-
-static void
-gimp_vector_layer_undo_constructed (GObject *object)
-{
- GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
- GimpVectorLayer *vector_layer;
-
- G_OBJECT_CLASS (parent_class)->constructed (object);
-
- g_assert (GIMP_IS_VECTOR_LAYER (GIMP_ITEM_UNDO (vector_undo)->item));
-
- vector_layer = GIMP_VECTOR_LAYER (GIMP_ITEM_UNDO (vector_undo)->item);
-
- switch (GIMP_UNDO (object)->undo_type)
- {
- case GIMP_UNDO_VECTOR_LAYER:
- if (vector_undo->pspec)
- {
- g_assert (vector_undo->pspec->owner_type == GIMP_TYPE_VECTOR_LAYER_OPTIONS);
-
- vector_undo->value = g_slice_new0 (GValue);
-
- g_value_init (vector_undo->value, vector_undo->pspec->value_type);
- g_object_get_property (G_OBJECT (vector_layer->options),
- vector_undo->pspec->name, vector_undo->value);
- }
- else if (vector_layer->options)
- {
- vector_undo->vector_layer_options = gimp_config_duplicate (GIMP_CONFIG (vector_layer->options));
- }
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-gimp_vector_layer_undo_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
-
- switch (property_id)
- {
- case PROP_PARAM:
- vector_undo->pspec = g_value_get_param (value);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-gimp_vector_layer_undo_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
-
- switch (property_id)
- {
- case PROP_PARAM:
- g_value_set_param (value, (GParamSpec *) vector_undo->pspec);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static gint64
-gimp_vector_layer_undo_get_memsize (GimpObject *object,
- gint64 *gui_size)
-{
- GimpVectorLayerUndo *undo = GIMP_VECTOR_LAYER_UNDO (object);
- gint64 memsize = 0;
-
- memsize += gimp_g_value_get_memsize (undo->value);
- memsize += gimp_object_get_memsize (GIMP_OBJECT (undo->vector_layer_options), NULL);
-
- return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
- gui_size);
-}
-
-static void
-gimp_vector_layer_undo_pop (GimpUndo *undo,
- GimpUndoMode undo_mode,
- GimpUndoAccumulator *accum)
-{
- GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (undo);
- GimpVectorLayer *vector_layer = GIMP_VECTOR_LAYER (GIMP_ITEM_UNDO (undo)->item);
-
- GIMP_UNDO_CLASS (parent_class)->pop (undo, undo_mode, accum);
-
- switch (undo->undo_type)
- {
- case GIMP_UNDO_VECTOR_LAYER:
- if (vector_undo->pspec)
- {
- GValue *value;
-
- g_return_if_fail (vector_layer->options != NULL);
-
- value = g_slice_new0 (GValue);
- g_value_init (value, vector_undo->pspec->value_type);
-
- g_object_get_property (G_OBJECT (vector_layer->options),
- vector_undo->pspec->name, value);
-
- g_object_set_property (G_OBJECT (vector_layer->options),
- vector_undo->pspec->name, vector_undo->value);
-
- g_value_unset (vector_undo->value);
- g_slice_free (GValue, vector_undo->value);
-
- vector_undo->value = value;
- }
- else
- {
- GimpVectorLayerOptions *vector_layer_options;
-
- vector_layer_options = (vector_layer->options ?
- gimp_config_duplicate (GIMP_CONFIG (vector_layer->options)) : NULL);
-
- if (vector_layer->options && vector_undo->vector_layer_options)
- gimp_config_sync (G_OBJECT (vector_undo->vector_layer_options),
- G_OBJECT (vector_layer->options), 0);
- else
- g_object_set (vector_layer,
- "vector-layer-options", vector_undo->vector_layer_options,
- NULL);
-
- if (vector_undo->vector_layer_options)
- g_object_unref (vector_undo->vector_layer_options);
-
- vector_undo->vector_layer_options = vector_layer_options;
- }
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-gimp_vector_layer_undo_free (GimpUndo *undo,
- GimpUndoMode undo_mode)
-{
- GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (undo);
-
- if (vector_undo->vector_layer_options)
- {
- g_object_unref (vector_undo->vector_layer_options);
- vector_undo->vector_layer_options = NULL;
- }
-
- if (vector_undo->pspec)
- {
- g_value_unset (vector_undo->value);
- g_slice_free (GValue, vector_undo->value);
-
- vector_undo->value = NULL;
- vector_undo->pspec = NULL;
- }
-
- GIMP_UNDO_CLASS (parent_class)->free (undo, undo_mode);
-}
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpvectorlayerundo.h
+ *
+ * Copyright 2006 Hendrik Boom
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "config.h"
+
+#include
+#include
+#include
+
+#include "libgimpconfig/gimpconfig.h"
+
+#include "path-types.h"
+
+#include "core/gimp-memsize.h"
+#include "core/gimp-utils.h"
+#include "core/gimpitem.h"
+#include "core/gimpitemundo.h"
+
+#include "gimpvectorlayer.h"
+#include "gimpvectorlayeroptions.h"
+#include "gimpvectorlayerundo.h"
+
+enum
+{
+ PROP_0,
+ PROP_PARAM
+};
+
+
+static void gimp_vector_layer_undo_constructed (GObject *object);
+static void gimp_vector_layer_undo_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gimp_vector_layer_undo_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
+static gint64 gimp_vector_layer_undo_get_memsize (GimpObject *object,
+ gint64 *gui_size);
+static void gimp_vector_layer_undo_pop (GimpUndo *undo,
+ GimpUndoMode undo_mode,
+ GimpUndoAccumulator *accum);
+static void gimp_vector_layer_undo_free (GimpUndo *undo,
+ GimpUndoMode undo_mode);
+
+
+
+G_DEFINE_TYPE (GimpVectorLayerUndo, gimp_vector_layer_undo, GIMP_TYPE_ITEM_UNDO)
+
+#define parent_class gimp_vector_layer_undo_parent_class
+
+
+static void
+gimp_vector_layer_undo_class_init (GimpVectorLayerUndoClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
+ GimpUndoClass *undo_class = GIMP_UNDO_CLASS (klass);
+
+ object_class->constructed = gimp_vector_layer_undo_constructed;
+ object_class->set_property = gimp_vector_layer_undo_set_property;
+ object_class->get_property = gimp_vector_layer_undo_get_property;
+
+ gimp_object_class->get_memsize = gimp_vector_layer_undo_get_memsize;
+
+ undo_class->pop = gimp_vector_layer_undo_pop;
+ undo_class->free = gimp_vector_layer_undo_free;
+
+ g_object_class_install_property (object_class, PROP_PARAM,
+ g_param_spec_param ("param", NULL, NULL,
+ G_TYPE_PARAM,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+gimp_vector_layer_undo_init (GimpVectorLayerUndo *undo)
+{
+}
+
+static void
+gimp_vector_layer_undo_constructed (GObject *object)
+{
+ GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
+ GimpVectorLayer *vector_layer;
+
+ G_OBJECT_CLASS (parent_class)->constructed (object);
+
+ g_assert (GIMP_IS_VECTOR_LAYER (GIMP_ITEM_UNDO (vector_undo)->item));
+
+ vector_layer = GIMP_VECTOR_LAYER (GIMP_ITEM_UNDO (vector_undo)->item);
+
+ switch (GIMP_UNDO (object)->undo_type)
+ {
+ case GIMP_UNDO_VECTOR_LAYER:
+ if (vector_undo->pspec)
+ {
+ g_assert (vector_undo->pspec->owner_type == GIMP_TYPE_VECTOR_LAYER_OPTIONS);
+
+ vector_undo->value = g_slice_new0 (GValue);
+
+ g_value_init (vector_undo->value, vector_undo->pspec->value_type);
+ g_object_get_property (G_OBJECT (vector_layer->options),
+ vector_undo->pspec->name, vector_undo->value);
+ }
+ else if (vector_layer->options)
+ {
+ vector_undo->vector_layer_options = gimp_config_duplicate (GIMP_CONFIG (vector_layer->options));
+ }
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gimp_vector_layer_undo_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
+
+ switch (property_id)
+ {
+ case PROP_PARAM:
+ vector_undo->pspec = g_value_get_param (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gimp_vector_layer_undo_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (object);
+
+ switch (property_id)
+ {
+ case PROP_PARAM:
+ g_value_set_param (value, (GParamSpec *) vector_undo->pspec);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static gint64
+gimp_vector_layer_undo_get_memsize (GimpObject *object,
+ gint64 *gui_size)
+{
+ GimpVectorLayerUndo *undo = GIMP_VECTOR_LAYER_UNDO (object);
+ gint64 memsize = 0;
+
+ memsize += gimp_g_value_get_memsize (undo->value);
+ memsize += gimp_object_get_memsize (GIMP_OBJECT (undo->vector_layer_options), NULL);
+
+ return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
+ gui_size);
+}
+
+static void
+gimp_vector_layer_undo_pop (GimpUndo *undo,
+ GimpUndoMode undo_mode,
+ GimpUndoAccumulator *accum)
+{
+ GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (undo);
+ GimpVectorLayer *vector_layer = GIMP_VECTOR_LAYER (GIMP_ITEM_UNDO (undo)->item);
+
+ GIMP_UNDO_CLASS (parent_class)->pop (undo, undo_mode, accum);
+
+ switch (undo->undo_type)
+ {
+ case GIMP_UNDO_VECTOR_LAYER:
+ if (vector_undo->pspec)
+ {
+ GValue *value;
+
+ g_return_if_fail (vector_layer->options != NULL);
+
+ value = g_slice_new0 (GValue);
+ g_value_init (value, vector_undo->pspec->value_type);
+
+ g_object_get_property (G_OBJECT (vector_layer->options),
+ vector_undo->pspec->name, value);
+
+ g_object_set_property (G_OBJECT (vector_layer->options),
+ vector_undo->pspec->name, vector_undo->value);
+
+ g_value_unset (vector_undo->value);
+ g_slice_free (GValue, vector_undo->value);
+
+ vector_undo->value = value;
+ }
+ else
+ {
+ GimpVectorLayerOptions *vector_layer_options;
+
+ vector_layer_options = (vector_layer->options ?
+ gimp_config_duplicate (GIMP_CONFIG (vector_layer->options)) : NULL);
+
+ if (vector_layer->options && vector_undo->vector_layer_options)
+ gimp_config_sync (G_OBJECT (vector_undo->vector_layer_options),
+ G_OBJECT (vector_layer->options), 0);
+ else
+ g_object_set (vector_layer,
+ "vector-layer-options", vector_undo->vector_layer_options,
+ NULL);
+
+ if (vector_undo->vector_layer_options)
+ g_object_unref (vector_undo->vector_layer_options);
+
+ vector_undo->vector_layer_options = vector_layer_options;
+ }
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gimp_vector_layer_undo_free (GimpUndo *undo,
+ GimpUndoMode undo_mode)
+{
+ GimpVectorLayerUndo *vector_undo = GIMP_VECTOR_LAYER_UNDO (undo);
+
+ if (vector_undo->vector_layer_options)
+ {
+ g_object_unref (vector_undo->vector_layer_options);
+ vector_undo->vector_layer_options = NULL;
+ }
+
+ if (vector_undo->pspec)
+ {
+ g_value_unset (vector_undo->value);
+ g_slice_free (GValue, vector_undo->value);
+
+ vector_undo->value = NULL;
+ vector_undo->pspec = NULL;
+ }
+
+ GIMP_UNDO_CLASS (parent_class)->free (undo, undo_mode);
+}
diff --git a/libgimp/gimpvectorlayer.c b/libgimp/gimpvectorlayer.c
index 957977676c..c8e49abb51 100644
--- a/libgimp/gimpvectorlayer.c
+++ b/libgimp/gimpvectorlayer.c
@@ -1,75 +1,75 @@
-/* LIBGIMP - The GIMP Library
- * Copyright (C) 1995-2000 Peter Mattis and Spencer Kimball
- *
- * gimpvectorlayer.c
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * .
- */
-
-#include "config.h"
-
-#include "gimp.h"
-
-
-struct _GimpVectorLayer
-{
- GimpLayer parent_instance;
-};
-
-
-G_DEFINE_TYPE_WITH_CODE (GimpVectorLayer, gimp_vector_layer, GIMP_TYPE_LAYER,
- G_IMPLEMENT_INTERFACE (GIMP_TYPE_RASTERIZABLE, NULL))
-
-#define parent_class gimp_vector_layer_parent_class
-
-
-static void
-gimp_vector_layer_class_init (GimpVectorLayerClass *klass)
-{
-}
-
-static void
-gimp_vector_layer_init (GimpVectorLayer *layer)
-{
-}
-
-
-/* Public API. */
-
-/**
- * gimp_vector_layer_get_by_id:
- * @layer_id: The layer id.
- *
- * Returns a #GimpVectorLayer representing @layer_id. This function calls
- * gimp_item_get_by_id() and returns the item if it is layer or %NULL
- * otherwise.
- *
- * Returns: (nullable) (transfer none): a #GimpVectorLayer for @layer_id or
- * %NULL if @layer_id does not represent a valid layer. The
- * object belongs to libgimp and you must not modify or unref
- * it.
- *
- * Since: 3.0
- **/
-GimpVectorLayer *
-gimp_vector_layer_get_by_id (gint32 layer_id)
-{
- GimpItem *item = gimp_item_get_by_id (layer_id);
-
- if (GIMP_IS_VECTOR_LAYER (item))
- return (GimpVectorLayer *) item;
-
- return NULL;
-}
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-2000 Peter Mattis and Spencer Kimball
+ *
+ * gimpvectorlayer.c
+ *
+ * This library is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * .
+ */
+
+#include "config.h"
+
+#include "gimp.h"
+
+
+struct _GimpVectorLayer
+{
+ GimpLayer parent_instance;
+};
+
+
+G_DEFINE_TYPE_WITH_CODE (GimpVectorLayer, gimp_vector_layer, GIMP_TYPE_LAYER,
+ G_IMPLEMENT_INTERFACE (GIMP_TYPE_RASTERIZABLE, NULL))
+
+#define parent_class gimp_vector_layer_parent_class
+
+
+static void
+gimp_vector_layer_class_init (GimpVectorLayerClass *klass)
+{
+}
+
+static void
+gimp_vector_layer_init (GimpVectorLayer *layer)
+{
+}
+
+
+/* Public API. */
+
+/**
+ * gimp_vector_layer_get_by_id:
+ * @layer_id: The layer id.
+ *
+ * Returns a #GimpVectorLayer representing @layer_id. This function calls
+ * gimp_item_get_by_id() and returns the item if it is layer or %NULL
+ * otherwise.
+ *
+ * Returns: (nullable) (transfer none): a #GimpVectorLayer for @layer_id or
+ * %NULL if @layer_id does not represent a valid layer. The
+ * object belongs to libgimp and you must not modify or unref
+ * it.
+ *
+ * Since: 3.0
+ **/
+GimpVectorLayer *
+gimp_vector_layer_get_by_id (gint32 layer_id)
+{
+ GimpItem *item = gimp_item_get_by_id (layer_id);
+
+ if (GIMP_IS_VECTOR_LAYER (item))
+ return (GimpVectorLayer *) item;
+
+ return NULL;
+}
diff --git a/pdb/groups/vector_layer.pdb b/pdb/groups/vector_layer.pdb
index 8e0066a195..93e466d8be 100644
--- a/pdb/groups/vector_layer.pdb
+++ b/pdb/groups/vector_layer.pdb
@@ -1,962 +1,962 @@
-# GIMP - The GNU Image Manipulation Program
-# Copyright (C) 1995 Spencer Kimball and Peter Mattis
-
-# New Vector Layer PDB API
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-
-sub vector_layer_new {
- $blurb = 'Create a new vector layer.';
-
- $help = <<'HELP';
-This procedure creates a new vector layer displaying the specified @path. By
-default, the fill and stroke properties will be defined by the context.
-
-
-The new layer still needs to be added to the image as this is not
-automatic. Add the new layer with the [method@Image.insert_layer]
-method.
-
-
-The arguments are kept as simple as necessary for the basic case. All
-vector attributes, however, can be modified with the appropriate
-`gimp_vector_layer_set_*()` procedures.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'image', type => 'image',
- desc => 'The image' },
- { name => 'path', type => 'path',
- desc => 'The path to create the layer from' }
- );
-
- @outargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The new vector layer. The object belongs to libgimp and you should not free it.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- if (path == NULL)
- {
- g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT,
- _("Failed to create vector layer"));
-
- success = FALSE;
- }
-
- if (success)
- {
- layer = GIMP_VECTOR_LAYER (gimp_vector_layer_new (image, path, context));
-
- if (! layer)
- {
- g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT,
- _("Failed to create vector layer"));
-
- success = FALSE;
- }
- }
-}
-CODE
- );
-}
-
-sub vector_layer_refresh {
- $blurb = 'Rerender the vector layer';
-
- $help = <<'HELP';
-This procedure causes the vector layer to refresh itself after changes.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- gimp_vector_layer_refresh (layer);
-}
-CODE
- );
-}
-
-sub vector_layer_get_path {
- $blurb = 'Gets the path from the vector layer if one is associated with it.';
-
- $help = <<'HELP';
-This procedure returns the path from the vector layer if one is associated with it.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' }
- );
-
- @outargs = (
- { name => 'path', type => 'path',
- desc => 'The path associated with the vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- path = gimp_vector_layer_get_path (layer);
-
- if (! path)
- success = FALSE;
-}
-CODE
- );
-}
-
-sub vector_layer_get_enable_stroke {
- $blurb = 'Check if stroke is enabled in the vector layer.';
-
- $help = <<'HELP';
-This procedure checks if stroke is enabled in the specified vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' }
- );
-
- @outargs = (
- { name => 'enable_stroke', type => 'boolean',
- desc => 'If the stroke is enabled on the vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_get (options,
- "enable-stroke", &enable_stroke,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_enable_stroke {
- $blurb = 'Set whether the stroke is enabled on the vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke's visibility in the vector layer 'layer'.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' },
- { name => 'enable_stroke', type => 'boolean',
- desc => 'Whether to enable the stroke on the vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- {
- g_object_set (options,
- "enable-stroke", &enable_stroke,
- NULL);
- }
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_color {
- $blurb = 'Get the color of the stroke in a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the color of the stroke in a vector layer.
-HELP
-
- &marcus_pdb_misc('2008', '2.6');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'color', type => 'geglcolor',
- desc => 'The color of the stroke.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- color = gegl_color_duplicate (gimp_context_get_foreground (
- GIMP_CONTEXT (options->stroke_options)));
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_width {
- $blurb = 'Get the stroke width of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke width in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'width', type => "0 <= double",
- desc => 'The stroke width.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- width = gimp_stroke_options_get_width (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_width_unit {
- $blurb = 'Get the stroke width unit of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke width unit in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'unit', type => 'unit',
- desc => 'The stroke width unit.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- unit = gimp_stroke_options_get_unit (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_cap_style {
- $blurb = 'Get the stroke cap style of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke cap style in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'cap_style', type => 'enum GimpCapStyle',
- desc => 'The stroke cap style.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- cap_style = gimp_stroke_options_get_cap_style (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_join_style {
- $blurb = 'Get the stroke join style of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke join style in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'join_style', type => 'enum GimpJoinStyle',
- desc => 'The stroke join style.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- join_style = gimp_stroke_options_get_join_style (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_miter_limit {
- $blurb = 'Get the stroke miter limit of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke miter limit in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'miter', type => "0 <= double",
- desc => 'The stroke miter limit.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- miter = gimp_stroke_options_get_miter_limit (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_dash_offset {
- $blurb = 'Get the stroke dash offset of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke dash offset in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'dash_offset', type => "0 <= double",
- desc => 'The stroke dash offset.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- dash_offset = gimp_stroke_options_get_dash_offset (options->stroke_options);
-}
-CODE
- );
-}
-
-sub vector_layer_get_stroke_dash_pattern {
- $blurb = 'Get the stroke dash pattern of a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the stroke dash pattern in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'dashes', type => 'doublearray', void_ret => 1,
- desc => 'The stroke dash pattern array.',
- array => { desc => 'The number of dashes in the dash_pattern array' } }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- {
- GArray *pattern =
- gimp_stroke_options_get_dash_info (options->stroke_options);
-
- dashes = gimp_dash_pattern_to_double_array (pattern, &num_dashes);
- }
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_color {
- $blurb = 'Set the color of the stroke in the vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke color in the vector layer 'layer'.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' },
- { name => 'color', type => 'geglcolor',
- desc => 'The color to use for the stroke' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- gimp_context_set_foreground (GIMP_CONTEXT (options->stroke_options),
- color);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_width {
- $blurb = 'Set the stroke width of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke width in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'width', type => "0 <= double",
- desc => 'The stroke width.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "width", width,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_width_unit {
- $blurb = 'Set the stroke width unit of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke width unit in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'unit', type => 'unit',
- desc => 'The stroke width unit.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "unit", unit,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_cap_style {
- $blurb = 'Set the stroke cap style of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke cap style in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'cap_style', type => 'enum GimpCapStyle',
- desc => 'The stroke cap style.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "cap-style", cap_style,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_join_style {
- $blurb = 'Set the stroke join style of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke join style in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'join_style', type => 'enum GimpJoinStyle',
- desc => 'The stroke join style.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "join-style", join_style,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_miter_limit {
- $blurb = 'Set the stroke miter limit of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke miter limit in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'miter', type => "0 <= double",
- desc => 'The stroke miter limit.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "miter-limit", miter,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_dash_offset {
- $blurb = 'Set the stroke dash offset of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke dash offset in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'dash_offset', type => "0 <= double",
- desc => 'The stroke dash offset.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options->stroke_options,
- "dash-offset", dash_offset,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_stroke_dash_pattern {
- $blurb = 'Set the stroke dash pattern of a vector layer.';
-
- $help = <<'HELP';
-This procedure sets the stroke dash pattern in a vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' },
- { name => 'dashes', type => 'doublearray',
- desc => 'The line dash pattern setting',
- array => { desc => 'The number of dashes in the dash pattern array' } }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
- GArray *pattern = NULL;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- {
- if (num_dashes > 0)
- {
- pattern = gimp_dash_pattern_from_double_array (num_dashes, dashes);
-
- if (! pattern)
- success = FALSE;
- }
-
- if (success)
- gimp_stroke_options_take_dash_pattern (options->stroke_options,
- GIMP_DASH_CUSTOM, pattern);
- }
-}
-CODE
- );
-}
-
-sub vector_layer_get_enable_fill {
- $blurb = 'Check if fill is enabled in the vector layer.';
-
- $help = <<'HELP';
-This procedure checks if fill is enabled in the specified vector layer.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' }
- );
-
- @outargs = (
- { name => 'enable_fill', type => 'boolean',
- desc => 'If the fill is enabled on the vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_get (options,
- "enable-fill", &enable_fill,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_set_enable_fill {
- $blurb = 'Set whether the fill is enabled on the vector layer.';
-
- $help = <<'HELP';
-This procedure sets the fill's visibility in the vector layer 'layer'.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' },
- { name => 'enable_fill', type => 'boolean',
- desc => 'Whether to enable the fill on the vector layer' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- g_object_set (options,
- "enable-fill", enable_fill,
- NULL);
-}
-CODE
- );
-}
-
-sub vector_layer_get_fill_color {
- $blurb = 'Get the color of the fill in a vector layer.';
-
- $help = <<'HELP';
-This procedure returns the color of the fill in a vector layer.
-HELP
-
- &marcus_pdb_misc('2008', '2.6');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer.' }
- );
-
- @outargs = (
- { name => 'color', type => 'geglcolor',
- desc => 'The color of the fill.' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- color =
- gegl_color_duplicate (gimp_context_get_foreground (
- GIMP_CONTEXT (options->fill_options)));
-}
-CODE
- );
-}
-
-sub vector_layer_set_fill_color {
- $blurb = 'Set the color of the fill in the vector layer.';
-
- $help = <<'HELP';
-This procedure sets the fill color in the vector layer 'layer'.
-HELP
-
- &alxsa_pdb_misc('2025', '3.2');
-
- @inargs = (
- { name => 'layer', type => 'vector_layer',
- desc => 'The vector layer' },
- { name => 'color', type => 'geglcolor',
- desc => 'The color to use for the fill' }
- );
-
- %invoke = (
- code => <<'CODE'
-{
- GimpVectorLayerOptions *options;
-
- options = gimp_vector_layer_get_options (layer);
- if (! options)
- success = FALSE;
-
- if (success)
- gimp_context_set_foreground (GIMP_CONTEXT (options->fill_options),
- color);
-}
-CODE
- );
-}
-
-@headers = qw("libgimpbase/gimpbase.h"
- "core/gimpcontext.h"
- "core/gimpdashpattern.h"
- "core/gimprasterizable.h"
- "core/gimpstrokeoptions.h"
- "path/gimpvectorlayer.h"
- "path/gimpvectorlayeroptions.h"
- "gimppdb-utils.h"
- "gimppdberror.h"
- "gimp-intl.h");
-
-@procs = qw(vector_layer_new
- vector_layer_refresh
- vector_layer_get_enable_fill
- vector_layer_get_enable_stroke
- vector_layer_get_fill_color
- vector_layer_get_path
- vector_layer_get_stroke_cap_style
- vector_layer_get_stroke_color
- vector_layer_get_stroke_dash_offset
- vector_layer_get_stroke_dash_pattern
- vector_layer_get_stroke_join_style
- vector_layer_get_stroke_miter_limit
- vector_layer_get_stroke_width
- vector_layer_get_stroke_width_unit
- vector_layer_set_enable_fill
- vector_layer_set_enable_stroke
- vector_layer_set_fill_color
- vector_layer_set_stroke_cap_style
- vector_layer_set_stroke_color
- vector_layer_set_stroke_dash_offset
- vector_layer_set_stroke_dash_pattern
- vector_layer_set_stroke_join_style
- vector_layer_set_stroke_miter_limit
- vector_layer_set_stroke_width
- vector_layer_set_stroke_width_unit);
-
-%exports = (app => [@procs], lib => [@procs]);
-
-$desc = 'Vector layer procedures';
-$doc_title = 'gimpvectorlayer';
-$doc_short_desc = 'Functions for querying and manipulating vector layers.';
-$doc_long_desc = 'Functions for querying and manipulating vector layers.';
-
-1;
+# GIMP - The GNU Image Manipulation Program
+# Copyright (C) 1995 Spencer Kimball and Peter Mattis
+
+# New Vector Layer PDB API
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+sub vector_layer_new {
+ $blurb = 'Create a new vector layer.';
+
+ $help = <<'HELP';
+This procedure creates a new vector layer displaying the specified @path. By
+default, the fill and stroke properties will be defined by the context.
+
+
+The new layer still needs to be added to the image as this is not
+automatic. Add the new layer with the [method@Image.insert_layer]
+method.
+
+
+The arguments are kept as simple as necessary for the basic case. All
+vector attributes, however, can be modified with the appropriate
+`gimp_vector_layer_set_*()` procedures.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'path', type => 'path',
+ desc => 'The path to create the layer from' }
+ );
+
+ @outargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The new vector layer. The object belongs to libgimp and you should not free it.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (path == NULL)
+ {
+ g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT,
+ _("Failed to create vector layer"));
+
+ success = FALSE;
+ }
+
+ if (success)
+ {
+ layer = GIMP_VECTOR_LAYER (gimp_vector_layer_new (image, path, context));
+
+ if (! layer)
+ {
+ g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT,
+ _("Failed to create vector layer"));
+
+ success = FALSE;
+ }
+ }
+}
+CODE
+ );
+}
+
+sub vector_layer_refresh {
+ $blurb = 'Rerender the vector layer';
+
+ $help = <<'HELP';
+This procedure causes the vector layer to refresh itself after changes.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ gimp_vector_layer_refresh (layer);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_path {
+ $blurb = 'Gets the path from the vector layer if one is associated with it.';
+
+ $help = <<'HELP';
+This procedure returns the path from the vector layer if one is associated with it.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' }
+ );
+
+ @outargs = (
+ { name => 'path', type => 'path',
+ desc => 'The path associated with the vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ path = gimp_vector_layer_get_path (layer);
+
+ if (! path)
+ success = FALSE;
+}
+CODE
+ );
+}
+
+sub vector_layer_get_enable_stroke {
+ $blurb = 'Check if stroke is enabled in the vector layer.';
+
+ $help = <<'HELP';
+This procedure checks if stroke is enabled in the specified vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' }
+ );
+
+ @outargs = (
+ { name => 'enable_stroke', type => 'boolean',
+ desc => 'If the stroke is enabled on the vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_get (options,
+ "enable-stroke", &enable_stroke,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_enable_stroke {
+ $blurb = 'Set whether the stroke is enabled on the vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke's visibility in the vector layer 'layer'.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' },
+ { name => 'enable_stroke', type => 'boolean',
+ desc => 'Whether to enable the stroke on the vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ {
+ g_object_set (options,
+ "enable-stroke", &enable_stroke,
+ NULL);
+ }
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_color {
+ $blurb = 'Get the color of the stroke in a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the color of the stroke in a vector layer.
+HELP
+
+ &marcus_pdb_misc('2008', '2.6');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'color', type => 'geglcolor',
+ desc => 'The color of the stroke.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ color = gegl_color_duplicate (gimp_context_get_foreground (
+ GIMP_CONTEXT (options->stroke_options)));
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_width {
+ $blurb = 'Get the stroke width of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke width in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'width', type => "0 <= double",
+ desc => 'The stroke width.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ width = gimp_stroke_options_get_width (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_width_unit {
+ $blurb = 'Get the stroke width unit of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke width unit in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'unit', type => 'unit',
+ desc => 'The stroke width unit.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ unit = gimp_stroke_options_get_unit (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_cap_style {
+ $blurb = 'Get the stroke cap style of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke cap style in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'cap_style', type => 'enum GimpCapStyle',
+ desc => 'The stroke cap style.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ cap_style = gimp_stroke_options_get_cap_style (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_join_style {
+ $blurb = 'Get the stroke join style of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke join style in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'join_style', type => 'enum GimpJoinStyle',
+ desc => 'The stroke join style.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ join_style = gimp_stroke_options_get_join_style (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_miter_limit {
+ $blurb = 'Get the stroke miter limit of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke miter limit in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'miter', type => "0 <= double",
+ desc => 'The stroke miter limit.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ miter = gimp_stroke_options_get_miter_limit (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_dash_offset {
+ $blurb = 'Get the stroke dash offset of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke dash offset in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'dash_offset', type => "0 <= double",
+ desc => 'The stroke dash offset.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ dash_offset = gimp_stroke_options_get_dash_offset (options->stroke_options);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_stroke_dash_pattern {
+ $blurb = 'Get the stroke dash pattern of a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the stroke dash pattern in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'dashes', type => 'doublearray', void_ret => 1,
+ desc => 'The stroke dash pattern array.',
+ array => { desc => 'The number of dashes in the dash_pattern array' } }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ {
+ GArray *pattern =
+ gimp_stroke_options_get_dash_info (options->stroke_options);
+
+ dashes = gimp_dash_pattern_to_double_array (pattern, &num_dashes);
+ }
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_color {
+ $blurb = 'Set the color of the stroke in the vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke color in the vector layer 'layer'.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' },
+ { name => 'color', type => 'geglcolor',
+ desc => 'The color to use for the stroke' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ gimp_context_set_foreground (GIMP_CONTEXT (options->stroke_options),
+ color);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_width {
+ $blurb = 'Set the stroke width of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke width in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'width', type => "0 <= double",
+ desc => 'The stroke width.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "width", width,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_width_unit {
+ $blurb = 'Set the stroke width unit of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke width unit in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'unit', type => 'unit',
+ desc => 'The stroke width unit.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "unit", unit,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_cap_style {
+ $blurb = 'Set the stroke cap style of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke cap style in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'cap_style', type => 'enum GimpCapStyle',
+ desc => 'The stroke cap style.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "cap-style", cap_style,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_join_style {
+ $blurb = 'Set the stroke join style of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke join style in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'join_style', type => 'enum GimpJoinStyle',
+ desc => 'The stroke join style.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "join-style", join_style,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_miter_limit {
+ $blurb = 'Set the stroke miter limit of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke miter limit in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'miter', type => "0 <= double",
+ desc => 'The stroke miter limit.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "miter-limit", miter,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_dash_offset {
+ $blurb = 'Set the stroke dash offset of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke dash offset in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'dash_offset', type => "0 <= double",
+ desc => 'The stroke dash offset.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options->stroke_options,
+ "dash-offset", dash_offset,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_stroke_dash_pattern {
+ $blurb = 'Set the stroke dash pattern of a vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the stroke dash pattern in a vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' },
+ { name => 'dashes', type => 'doublearray',
+ desc => 'The line dash pattern setting',
+ array => { desc => 'The number of dashes in the dash pattern array' } }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+ GArray *pattern = NULL;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ {
+ if (num_dashes > 0)
+ {
+ pattern = gimp_dash_pattern_from_double_array (num_dashes, dashes);
+
+ if (! pattern)
+ success = FALSE;
+ }
+
+ if (success)
+ gimp_stroke_options_take_dash_pattern (options->stroke_options,
+ GIMP_DASH_CUSTOM, pattern);
+ }
+}
+CODE
+ );
+}
+
+sub vector_layer_get_enable_fill {
+ $blurb = 'Check if fill is enabled in the vector layer.';
+
+ $help = <<'HELP';
+This procedure checks if fill is enabled in the specified vector layer.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' }
+ );
+
+ @outargs = (
+ { name => 'enable_fill', type => 'boolean',
+ desc => 'If the fill is enabled on the vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_get (options,
+ "enable-fill", &enable_fill,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_set_enable_fill {
+ $blurb = 'Set whether the fill is enabled on the vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the fill's visibility in the vector layer 'layer'.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' },
+ { name => 'enable_fill', type => 'boolean',
+ desc => 'Whether to enable the fill on the vector layer' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ g_object_set (options,
+ "enable-fill", enable_fill,
+ NULL);
+}
+CODE
+ );
+}
+
+sub vector_layer_get_fill_color {
+ $blurb = 'Get the color of the fill in a vector layer.';
+
+ $help = <<'HELP';
+This procedure returns the color of the fill in a vector layer.
+HELP
+
+ &marcus_pdb_misc('2008', '2.6');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer.' }
+ );
+
+ @outargs = (
+ { name => 'color', type => 'geglcolor',
+ desc => 'The color of the fill.' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ color =
+ gegl_color_duplicate (gimp_context_get_foreground (
+ GIMP_CONTEXT (options->fill_options)));
+}
+CODE
+ );
+}
+
+sub vector_layer_set_fill_color {
+ $blurb = 'Set the color of the fill in the vector layer.';
+
+ $help = <<'HELP';
+This procedure sets the fill color in the vector layer 'layer'.
+HELP
+
+ &alxsa_pdb_misc('2025', '3.2');
+
+ @inargs = (
+ { name => 'layer', type => 'vector_layer',
+ desc => 'The vector layer' },
+ { name => 'color', type => 'geglcolor',
+ desc => 'The color to use for the fill' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpVectorLayerOptions *options;
+
+ options = gimp_vector_layer_get_options (layer);
+ if (! options)
+ success = FALSE;
+
+ if (success)
+ gimp_context_set_foreground (GIMP_CONTEXT (options->fill_options),
+ color);
+}
+CODE
+ );
+}
+
+@headers = qw("libgimpbase/gimpbase.h"
+ "core/gimpcontext.h"
+ "core/gimpdashpattern.h"
+ "core/gimprasterizable.h"
+ "core/gimpstrokeoptions.h"
+ "path/gimpvectorlayer.h"
+ "path/gimpvectorlayeroptions.h"
+ "gimppdb-utils.h"
+ "gimppdberror.h"
+ "gimp-intl.h");
+
+@procs = qw(vector_layer_new
+ vector_layer_refresh
+ vector_layer_get_enable_fill
+ vector_layer_get_enable_stroke
+ vector_layer_get_fill_color
+ vector_layer_get_path
+ vector_layer_get_stroke_cap_style
+ vector_layer_get_stroke_color
+ vector_layer_get_stroke_dash_offset
+ vector_layer_get_stroke_dash_pattern
+ vector_layer_get_stroke_join_style
+ vector_layer_get_stroke_miter_limit
+ vector_layer_get_stroke_width
+ vector_layer_get_stroke_width_unit
+ vector_layer_set_enable_fill
+ vector_layer_set_enable_stroke
+ vector_layer_set_fill_color
+ vector_layer_set_stroke_cap_style
+ vector_layer_set_stroke_color
+ vector_layer_set_stroke_dash_offset
+ vector_layer_set_stroke_dash_pattern
+ vector_layer_set_stroke_join_style
+ vector_layer_set_stroke_miter_limit
+ vector_layer_set_stroke_width
+ vector_layer_set_stroke_width_unit);
+
+%exports = (app => [@procs], lib => [@procs]);
+
+$desc = 'Vector layer procedures';
+$doc_title = 'gimpvectorlayer';
+$doc_short_desc = 'Functions for querying and manipulating vector layers.';
+$doc_long_desc = 'Functions for querying and manipulating vector layers.';
+
+1;