summaryrefslogtreecommitdiff
path: root/lib/svg
diff options
context:
space:
mode:
authorKaalleen <36401965+kaalleen@users.noreply.github.com>2020-03-28 11:18:52 +0100
committerGitHub <noreply@github.com>2020-03-28 11:18:52 +0100
commita1c2139521fb8f3a7e99229c2f8f06b75d1bf716 (patch)
tree8bb8dc2ea2a1b08de516557a9c33516df71444f1 /lib/svg
parent5c450ab13b7624566bec52ed8cb74516cbd1eccb (diff)
preserveAspectRatio (#641)
Diffstat (limited to 'lib/svg')
-rw-r--r--lib/svg/units.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/svg/units.py b/lib/svg/units.py
index 739dcbb4..d97ea418 100644
--- a/lib/svg/units.py
+++ b/lib/svg/units.py
@@ -127,6 +127,17 @@ def get_viewbox_transform(node):
try:
sx = doc_width / float(viewbox[2])
sy = doc_height / float(viewbox[3])
+
+ # preserve aspect ratio
+ aspect_ratio = node.get('preserveAspectRatio', 'xMidYMid meet')
+ if aspect_ratio != 'none':
+ unit = parse_length_with_units(node.get('width'))[1]
+ if float(viewbox[2]) > parse_length_with_units(node.get('width'))[0]:
+ sx = convert_length(viewbox[2] + unit) / float(viewbox[2]) if 'slice' in aspect_ratio else 1.0
+ if float(viewbox[3]) > parse_length_with_units(node.get('height'))[0]:
+ sy = convert_length(viewbox[3] + unit) / float(viewbox[3]) if 'slice' in aspect_ratio else 1.0
+ sx = sy = max(sx, sy) if 'slice' in aspect_ratio else min(sx, sy)
+
scale_transform = simpletransform.parseTransform("scale(%f, %f)" % (sx, sy))
transform = simpletransform.composeTransform(transform, scale_transform)
except ZeroDivisionError: