graphics: added Drawing.renderScale hack for renderer terminal drawing scales
authorrgbecker
Wed, 07 Dec 2005 11:39:53 +0000
changeset 2544 a6b9aa99b3c3
parent 2543 9dd686e264a1
child 2545 107f45cde70c
graphics: added Drawing.renderScale hack for renderer terminal drawing scales
reportlab/graphics/renderPDF.py
reportlab/graphics/renderPM.py
reportlab/graphics/renderPS.py
reportlab/graphics/renderSVG.py
reportlab/graphics/renderbase.py
reportlab/graphics/shapes.py
--- a/reportlab/graphics/renderPDF.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPDF.py	Wed Dec 07 11:39:53 2005 +0000
@@ -15,6 +15,7 @@
 from reportlab.pdfbase.pdfmetrics import stringWidth
 from reportlab.lib.utils import getStringIO
 from reportlab import rl_config
+from reportlab.graphics.renderbase import renderScaledDrawing
 
 # the main entry point for users...
 def draw(drawing, canvas, x, y, showBoundary=rl_config._unset_):
@@ -244,6 +245,7 @@
     the drawing; if 0, it will place the drawing on
     an A4 page with a title above it - possibly overflowing
     if too big."""
+    d = renderScaledDrawing(d)
     c = Canvas(fn)
     c.setFont('Times-Roman', 36)
     c.drawString(80, 750, msg)
--- a/reportlab/graphics/renderPM.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPM.py	Wed Dec 07 11:39:53 2005 +0000
@@ -9,7 +9,7 @@
 Execute the script to see some test drawings."""
 
 from reportlab.graphics.shapes import *
-from reportlab.graphics.renderbase import StateTracker, getStateDelta
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, renderScaledDrawing
 from reportlab.pdfbase.pdfmetrics import getFont
 from math import sin, cos, pi, ceil
 from reportlab.lib.utils import getStringIO, open_and_read
@@ -541,6 +541,7 @@
         self.strokeWidth = width
 
 def drawToPMCanvas(d, dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_):
+    d = renderScaledDrawing(d)
     c = PMCanvas(d.width, d.height, dpi=dpi, bg=bg, configPIL=configPIL)
     draw(d, c, 0, 0, showBoundary=showBoundary)
     return c
--- a/reportlab/graphics/renderPS.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPS.py	Wed Dec 07 11:39:53 2005 +0000
@@ -6,7 +6,7 @@
 from reportlab.pdfbase.pdfmetrics import getFont, stringWidth # for font info
 from reportlab.lib.utils import fp_str, getStringIO
 from reportlab.lib.colors import black
-from reportlab.graphics.renderbase import StateTracker, getStateDelta
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, renderScaledDrawing
 from reportlab.graphics.shapes import STATE_DEFAULTS
 import math
 from types import StringType
@@ -816,6 +816,7 @@
                 self._canvas.setFont(fontname, fontsize)
 
 def drawToFile(d,fn, showBoundary=rl_config.showBoundary):
+    d = renderScaledDrawing(d)
     c = PSCanvas((d.width,d.height))
     draw(d, c, 0, 0, showBoundary=showBoundary)
     c.save(fn)
--- a/reportlab/graphics/renderSVG.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderSVG.py	Wed Dec 07 11:39:53 2005 +0000
@@ -14,7 +14,7 @@
 from reportlab.pdfbase.pdfmetrics import stringWidth # for font info
 from reportlab.lib.utils import fp_str
 from reportlab.lib.colors import black
-from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer, renderScaledDrawing
 from reportlab.graphics.shapes import STATE_DEFAULTS, Path, UserNode
 from reportlab.graphics.shapes import * # (only for test0)
 from reportlab import rl_config
@@ -41,8 +41,8 @@
     drawToFile(d, s, showBoundary=showBoundary)
     return s.getvalue()
 
-
 def drawToFile(d, fn, showBoundary=rl_config.showBoundary):
+    d = renderScaledDrawing(d)
     c = SVGCanvas((d.width, d.height))
     draw(d, c, 0, 0, showBoundary=showBoundary)
     c.save(fn)
--- a/reportlab/graphics/renderbase.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderbase.py	Wed Dec 07 11:39:53 2005 +0000
@@ -164,6 +164,16 @@
             if not ocanvas: del onode._canvas
     return node
 
+def renderScaledDrawing(d):
+    renderScale = d.renderScale
+    if renderScale!=1.0:
+        d = d.copy()
+        d.width *= renderScale
+        d.height *= renderScale
+        d.scale(renderScale,renderScale)
+        d.renderScale = 1.0
+    return d
+
 class Renderer:
     """Virtual superclass for graphics renderers."""
 
--- a/reportlab/graphics/shapes.py	Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/shapes.py	Wed Dec 07 11:39:53 2005 +0000
@@ -570,7 +570,8 @@
         canv = AttrMapValue(None),
         background = AttrMapValue(isValidChildOrNone,desc="Background widget for the drawing"),
         hAlign = AttrMapValue(OneOf("LEFT", "RIGHT", "CENTER", "CENTRE"), desc="Alignment within parent document"),
-        vAlign = AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"), desc="Alignment within parent document")
+        vAlign = AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"), desc="Alignment within parent document"),
+        renderScale = AttrMapValue(isNumber,desc="Global scaling for rendering"),
         )
 
     _attrMap = AttrMap(BASE=Group)
@@ -583,6 +584,7 @@
         self.height = height
         self.hAlign = 'LEFT'
         self.vAlign = 'BOTTOM'
+        self.renderScale = 1.0
 
     def _renderPy(self):
         I = {'reportlab.graphics.shapes': ['_DrawingEditorMixin','Drawing','Group']}
@@ -614,7 +616,7 @@
         obj.height = self.height
         return obj
 
-    def copy(self,obj):
+    def copy(self):
         """Returns a copy"""
         return self._copy(Drawing(self.width, self.height))