From f09d90da963c0463988f2c735d30280089765c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 13 May 2017 20:01:12 +0200 Subject: [PATCH] fix rendering so shadows are correctly rendered by librsvg --- src/c3nav/mapdata/render/svg.py | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/src/c3nav/mapdata/render/svg.py b/src/c3nav/mapdata/render/svg.py index 6f302eac..bd6cb2b7 100644 --- a/src/c3nav/mapdata/render/svg.py +++ b/src/c3nav/mapdata/render/svg.py @@ -4,30 +4,12 @@ import xml.etree.ElementTree as ET from shapely.affinity import scale -class SVGGroup: +class SVGImage: def __init__(self, width: int, height: int, scale: float=1): self.width = width self.height = height self.scale = scale - self.g = ET.Element('g', { - 'transform': 'scale(1 -1) translate(0 -%d)' % (self.height*scale), - }) - - def get_element(self): - return self.g - - def get_xml(self): - return ET.tostring(self.get_element()).decode() - - def add_group(self): - group = SVGGroup(self.width, self.height, self.scale) - self.g.append(group) - return group - - -class SVGImage(SVGGroup): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + self.g = ET.Element('g', {}) self.defs = ET.Element('defs') self.def_i = 0 @@ -57,6 +39,9 @@ class SVGImage(SVGGroup): root.append(self.g) return root + def get_xml(self): + return ET.tostring(self.get_element()).decode() + def new_defid(self): defid = 's'+str(self.def_i) self.def_i += 1 @@ -66,8 +51,9 @@ class SVGImage(SVGGroup): if defid is None: defid = self.new_defid() - scaled = scale(geometry, xfact=self.scale, yfact=self.scale, origin=(0, 0)) - re_string = re.sub(r'([0-9]+)\.0', r'\1', re.sub(r'([0-9]+\.[0-9])[0-9]+', r'\1', scaled.svg(0, '#FFFFFF'))) + geometry = scale(geometry, xfact=1, yfact=-1, origin=(self.width/2, self.height/2)) + geometry = scale(geometry, xfact=self.scale, yfact=self.scale, origin=(0, 0)) + re_string = re.sub(r'([0-9]+)\.0', r'\1', re.sub(r'([0-9]+\.[0-9])[0-9]+', r'\1', geometry.svg(0, '#FFFFFF'))) element = ET.fromstring(re_string) if element.tag != 'g': new_element = ET.Element('g')