src/reportlab/platypus/doctemplate.py
changeset 3701 b3c5693903bf
parent 3686 0ef2cb9578d7
child 3702 b230ea9a15da
--- a/src/reportlab/platypus/doctemplate.py	Tue Jun 11 10:49:00 2013 +0100
+++ b/src/reportlab/platypus/doctemplate.py	Tue Jul 02 10:17:00 2013 +0100
@@ -233,6 +233,25 @@
         frame._leftExtraIndent += self.left
         frame._rightExtraIndent += self.right
 
+class FrameBG(FrameActionFlowable):
+    """Start or stop coloring the frame background
+    left & right are distances from the edge of the frame to start stop colouring.
+    """
+    _ZEROSIZE=True
+    width=0
+    height=0
+    def __init__(self, bg=None, left=0, right=0, start=True):
+        self.bgLeft = _evalMeasurement(left)
+        self.bgRight = _evalMeasurement(right)
+        self.bg = bg
+        self.start = start
+
+    def frameAction(self, frame):
+        if self.start:
+            frame._frameBGs.append((self.bgLeft,self.bgRight,self.bg))
+        elif frame._frameBGs:
+            frame._frameBGs.pop()
+
 class NotAtTopPageBreak(FrameActionFlowable):
     def __init__(self):
         pass
@@ -496,6 +515,7 @@
         #context sensitive margins - set by story, not from outside
         self._leftExtraIndent = 0.0
         self._rightExtraIndent = 0.0
+        self._frameBGs = []
 
         self._calc()
         self.afterInit()
@@ -561,6 +581,7 @@
         self._removeVars(('page','frame'))
         self._leftExtraIndent = self.frame._leftExtraIndent
         self._rightExtraIndent = self.frame._rightExtraIndent
+        self._frameBGs = self.frame._frameBGs
         #detect infinite loops...
         if self._curPageFlowableCount == 0:
             self._emptyPages += 1
@@ -613,6 +634,7 @@
                 self.frame.drawBoundary(self.canv)
         f._leftExtraIndent = self._leftExtraIndent
         f._rightExtraIndent = self._rightExtraIndent
+        f._frameBGs = self._frameBGs
 
     def handle_frameEnd(self,resume=0):
         ''' Handles the semantics of the end of a frame. This includes the selection of
@@ -621,6 +643,7 @@
         self._removeVars(('frame',))
         self._leftExtraIndent = self.frame._leftExtraIndent
         self._rightExtraIndent = self.frame._rightExtraIndent
+        self._frameBGs = self.frame._frameBGs
 
         f = self.frame
         if hasattr(self,'_nextFrameIndex'):