summaryrefslogtreecommitdiffstats
path: root/share/extensions/markers_strokepaint.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:29:01 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:29:01 +0000
commit35a96bde514a8897f6f0fcc41c5833bf63df2e2a (patch)
tree657d15a03cc46bd099fc2c6546a7a4ad43815d9f /share/extensions/markers_strokepaint.py
parentInitial commit. (diff)
downloadinkscape-35a96bde514a8897f6f0fcc41c5833bf63df2e2a.tar.xz
inkscape-35a96bde514a8897f6f0fcc41c5833bf63df2e2a.zip
Adding upstream version 1.0.2.upstream/1.0.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'share/extensions/markers_strokepaint.py')
-rwxr-xr-xshare/extensions/markers_strokepaint.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/share/extensions/markers_strokepaint.py b/share/extensions/markers_strokepaint.py
new file mode 100755
index 0000000..b6b5f1c
--- /dev/null
+++ b/share/extensions/markers_strokepaint.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+# coding=utf-8
+# coding=utf-8
+#
+# Copyright (C) 2006 Aaron Spike, aaron@ekips.org
+# Copyright (C) 2010 Nicolas Dufour, nicoduf@yahoo.fr (color options)
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+import inkex
+from inkex.localization import inkex_gettext as _
+
+MARKERS = ['marker', 'marker-start', 'marker-mid', 'marker-end']
+
+class MarkersStrokePaint(inkex.EffectExtension):
+ """Add marker stroke to outline markers on selected objects."""
+ def add_arguments(self, pars):
+ pars.add_argument("--modify", type=inkex.Boolean, default=False,
+ help="Do not create a copy, modify the markers")
+ pars.add_argument("--type", dest="fill_type", default="stroke",
+ help="Replace the markers' fill with the object stroke or fill color")
+ pars.add_argument("--alpha", type=inkex.Boolean, dest="assign_alpha", default=True,
+ help="Assign the object fill and stroke alpha to the markers")
+ pars.add_argument("--invert", type=inkex.Boolean, default=False,
+ help="Invert fill and stroke colors")
+ pars.add_argument("--assign_fill", type=inkex.Boolean, default=True,
+ help="Assign a fill color to the markers")
+ pars.add_argument("--fill_color", type=inkex.Color, default=inkex.Color(1364325887),
+ help="Choose a custom fill color")
+ pars.add_argument("--assign_stroke", type=inkex.Boolean, default=True,
+ help="Assign a stroke color to the markers")
+ pars.add_argument("--stroke_color", type=inkex.Color, default=inkex.Color(1364325887),
+ help="Choose a custom fill color")
+ pars.add_argument("--tab", type=self.arg_method('method'), default=self.method_custom,
+ help="The selected UI-tab when OK was pressed")
+ pars.add_argument("--colortab", help="The selected custom color tab when OK was pressed")
+
+ def method_custom(self, _):
+ """Choose custom colors"""
+ fill = self.options.fill_color if self.options.assign_fill else None
+ stroke = self.options.stroke_color if self.options.assign_stroke else None
+ return fill, stroke
+
+ def method_object(self, style):
+ """Use object colors"""
+ fill = style.get_color('fill')
+ stroke = style.get_color('stroke')
+
+ if self.options.fill_type == "solid":
+ fill = stroke
+ elif self.options.fill_type == "filled":
+ stroke = None
+ elif self.options.invert:
+ fill, stroke = stroke, fill
+
+ if not self.options.assign_alpha:
+ # Remove alpha values
+ fill = fill.to_rgb()
+ stroke = stroke.to_rgb()
+
+ return fill, stroke
+
+ def effect(self):
+ for node in self.svg.selected.values():
+ fill, stroke = self.options.tab(node.style)
+
+ for attr in MARKERS:
+ if not node.style.get(attr, '').startswith('url(#'):
+ continue
+
+ marker_id = node.style[attr][5:-1]
+ marker_node = self.svg.getElement('/svg:svg//svg:marker[@id="%s"]' % marker_id)
+
+ if marker_node is None:
+ inkex.errormsg(_("unable to locate marker: %s") % marker_id)
+ continue
+
+ if not self.options.modify:
+ marker_node = marker_node.copy()
+ self.svg.defs.append(marker_node)
+ marker_id = self.svg.get_unique_id(marker_id)
+
+ node.style[attr] = "url(#%s)" % marker_id
+ marker_node.set('id', marker_id)
+ marker_node.set('inkscape:stockid', marker_id)
+
+ for child in marker_node:
+ if stroke is not None:
+ child.style.set_color(stroke, 'stroke')
+ if fill is not None:
+ child.style.set_color(fill, 'fill')
+
+if __name__ == '__main__':
+ MarkersStrokePaint().run()