fix rendering so shadows are correctly rendered by librsvg
This commit is contained in:
parent
1f897ccec9
commit
f09d90da96
1 changed files with 8 additions and 22 deletions
|
@ -4,30 +4,12 @@ import xml.etree.ElementTree as ET
|
||||||
from shapely.affinity import scale
|
from shapely.affinity import scale
|
||||||
|
|
||||||
|
|
||||||
class SVGGroup:
|
class SVGImage:
|
||||||
def __init__(self, width: int, height: int, scale: float=1):
|
def __init__(self, width: int, height: int, scale: float=1):
|
||||||
self.width = width
|
self.width = width
|
||||||
self.height = height
|
self.height = height
|
||||||
self.scale = scale
|
self.scale = scale
|
||||||
self.g = ET.Element('g', {
|
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.defs = ET.Element('defs')
|
self.defs = ET.Element('defs')
|
||||||
self.def_i = 0
|
self.def_i = 0
|
||||||
|
|
||||||
|
@ -57,6 +39,9 @@ class SVGImage(SVGGroup):
|
||||||
root.append(self.g)
|
root.append(self.g)
|
||||||
return root
|
return root
|
||||||
|
|
||||||
|
def get_xml(self):
|
||||||
|
return ET.tostring(self.get_element()).decode()
|
||||||
|
|
||||||
def new_defid(self):
|
def new_defid(self):
|
||||||
defid = 's'+str(self.def_i)
|
defid = 's'+str(self.def_i)
|
||||||
self.def_i += 1
|
self.def_i += 1
|
||||||
|
@ -66,8 +51,9 @@ class SVGImage(SVGGroup):
|
||||||
if defid is None:
|
if defid is None:
|
||||||
defid = self.new_defid()
|
defid = self.new_defid()
|
||||||
|
|
||||||
scaled = scale(geometry, xfact=self.scale, yfact=self.scale, origin=(0, 0))
|
geometry = scale(geometry, xfact=1, yfact=-1, origin=(self.width/2, self.height/2))
|
||||||
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=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)
|
element = ET.fromstring(re_string)
|
||||||
if element.tag != 'g':
|
if element.tag != 'g':
|
||||||
new_element = ET.Element('g')
|
new_element = ET.Element('g')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue