From 45dda2616d4d636759136e2c65998670ea06855c Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:07:24 +0100 Subject: Clipped groups (#3261) --- lib/lettering/glyph.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'lib/lettering/glyph.py') diff --git a/lib/lettering/glyph.py b/lib/lettering/glyph.py index 0b916fc0..a3a9df71 100644 --- a/lib/lettering/glyph.py +++ b/lib/lettering/glyph.py @@ -3,6 +3,7 @@ # Copyright (c) 2010 Authors # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. +from collections import defaultdict from copy import copy from inkex import paths, transforms, units @@ -36,11 +37,20 @@ class Glyph(object): """ self._process_baseline(group.getroottree().getroot()) + self.clips = self._process_clips(group) self.node = self._process_group(group) self._process_bbox() self._move_to_origin() self._process_commands() + def _process_clips(self, group): + clips = defaultdict(list) + for node in group.iterdescendants(): + if node.clip: + node_id = node.get_id() + clips[node_id] = node.clip + return clips + def _process_group(self, group): new_group = copy(group) # new_group.attrib.pop('transform', None) @@ -124,3 +134,11 @@ class Glyph(object): x, y = transform.apply_to_point((oldx, oldy)) node.set('x', x) node.set('y', y) + + # transform clips + for node in self.node.iterdescendants(): + node_id = node.get_id() + if node_id in self.clips: + clip = self.clips[node_id] + for childnode in clip.iterchildren(): + childnode.transform @= transform -- cgit v1.2.3