Revision: 8108
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8108&view=rev
Author:   leejjoon
Date:     2010-02-03 19:41:53 +0000 (Wed, 03 Feb 2010)

Log Message:
-----------
make backends registerable

Modified Paths:
--------------
    trunk/matplotlib/lib/matplotlib/backend_bases.py
    trunk/matplotlib/lib/matplotlib/tight_bbox.py

Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-02-03 17:56:03 UTC 
(rev 8107)
+++ trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-02-03 19:41:53 UTC 
(rev 8108)
@@ -40,6 +40,15 @@
 import matplotlib.textpath as textpath
 from matplotlib.path import Path
 
+
+
+_backend_d = {}
+
+def register_backend(format, backend_class):
+    _backend_d[format] = backend_class
+
+
+
 class RendererBase:
     """An abstract base class to handle drawing/rendering operations.
 
@@ -1518,6 +1527,33 @@
             groupings[name].sort()
         return groupings
 
+
+    def _get_print_method(self, format):
+        method_name = 'print_%s' % format
+
+        # check for registered backends
+        if format in _backend_d:
+            backend_class = _backend_d[format]
+            
+            def _print_method(*args, **kwargs):
+                backend = self.switch_backends(backend_class)
+                print_method = getattr(backend, method_name)
+                return print_method(*args, **kwargs)
+
+            return _print_method
+            
+        if (format not in self.filetypes or
+            not hasattr(self, method_name)):
+            formats = self.filetypes.keys()
+            formats.sort()
+            raise ValueError(
+                'Format "%s" is not supported.\n'
+                'Supported formats: '
+                '%s.' % (format, ', '.join(formats)))
+
+        return getattr(self, method_name)
+
+
     def print_figure(self, filename, dpi=None, facecolor='w', edgecolor='w',
                      orientation='portrait', format=None, **kwargs):
         """
@@ -1573,16 +1609,8 @@
                     filename = filename.rstrip('.') + '.' + format
         format = format.lower()
 
-        method_name = 'print_%s' % format
-        if (format not in self.filetypes or
-            not hasattr(self, method_name)):
-            formats = self.filetypes.keys()
-            formats.sort()
-            raise ValueError(
-                'Format "%s" is not supported.\n'
-                'Supported formats: '
-                '%s.' % (format, ', '.join(formats)))
-
+        print_method = self._get_print_method(format)
+        
         if dpi is None:
             dpi = rcParams['savefig.dpi']
 
@@ -1609,7 +1637,8 @@
                 # the backend to support file-like object, i'm going
                 # to leave it as it is. However, a better solution
                 # than stringIO seems to be needed. -JJL
-                result = getattr(self, method_name)(
+                #result = getattr(self, method_name)(
+                result = print_method(
                     cStringIO.StringIO(),
                     dpi=dpi,
                     facecolor=facecolor,
@@ -1642,7 +1671,8 @@
             _bbox_inches_restore = None
 
         try:
-            result = getattr(self, method_name)(
+            #result = getattr(self, method_name)(
+            result = print_method(
                 filename,
                 dpi=dpi,
                 facecolor=facecolor,

Modified: trunk/matplotlib/lib/matplotlib/tight_bbox.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/tight_bbox.py       2010-02-03 17:56:03 UTC 
(rev 8107)
+++ trunk/matplotlib/lib/matplotlib/tight_bbox.py       2010-02-03 19:41:53 UTC 
(rev 8108)
@@ -6,6 +6,7 @@
 from matplotlib.transforms import Bbox, TransformedBbox, Affine2D
 
 
+
 def adjust_bbox(fig, format, bbox_inches):
     """
     Temporarily adjust the figure so that only the specified area
@@ -46,12 +47,10 @@
         fig.transFigure.invalidate()
         fig.patch.set_bounds(0, 0, 1, 1)
 
-    if format in ["png", "raw", "rgba"]:
-        adjust_bbox_png(fig, bbox_inches)
+    adjust_bbox_handler = _adjust_bbox_handler_d.get(format)
+    if adjust_bbox_handler is not None:
+        adjust_bbox_handler(fig, bbox_inches)
         return restore_bbox
-    elif format in ["pdf", "eps", "svg", "svgz"]:
-        adjust_bbox_pdf(fig, bbox_inches)
-        return restore_bbox
     else:
         warnings.warn("bbox_inches option for %s backend is not implemented 
yet." % (format))
         return None
@@ -125,3 +124,8 @@
     return bbox_inches, r
 
 
+_adjust_bbox_handler_d = {}
+for format in ["png", "raw", "rgba"]:
+    _adjust_bbox_handler_d[format] = adjust_bbox_png
+for format in ["pdf", "eps", "svg", "svgz"]:
+    _adjust_bbox_handler_d[format] = adjust_bbox_pdf


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to