Revision: 4303
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4303&view=rev
Author: mdboom
Date: 2007-11-15 07:14:47 -0800 (Thu, 15 Nov 2007)
Log Message:
-----------
Cairo backend fixes:
- Avoid crash when path is too long
- Fix alpha filling
- Fix path clipping
Modified Paths:
--------------
branches/transforms/lib/matplotlib/backends/backend_cairo.py
Modified: branches/transforms/lib/matplotlib/backends/backend_cairo.py
===================================================================
--- branches/transforms/lib/matplotlib/backends/backend_cairo.py 2007-11-15 15:13:38 UTC (rev 4302)
+++ branches/transforms/lib/matplotlib/backends/backend_cairo.py 2007-11-15 15:14:47 UTC (rev 4303)
@@ -105,29 +105,18 @@
# font transform?
- def _fill_and_stroke (self, ctx, fill_c):
- #assert fill_c or stroke_c
-
- #_.ctx.save()
-
+ def _fill_and_stroke (self, ctx, fill_c, alpha):
if fill_c is not None:
ctx.save()
if len(fill_c) == 3:
- ctx.set_source_rgb (*fill_c)
+ ctx.set_source_rgba (fill_c[0], fill_c[1], fill_c[2], alpha)
else:
ctx.set_source_rgba (*fill_c)
- #if stroke_c: # always (implicitly) set at the moment
ctx.fill_preserve()
- #else:
- # ctx.fill()
ctx.restore()
-
- #if stroke_c: # always stroke
- #ctx.set_source_rgb (stroke_c) # is already set
ctx.stroke()
- #_.ctx.restore() # revert to the default attributes
-
+
#@staticmethod
def convert_path(ctx, tpath):
for points, code in tpath.iter_segments():
@@ -144,19 +133,23 @@
elif code == Path.CLOSEPOLY:
ctx.close_path()
convert_path = staticmethod(convert_path)
-
+
+
def draw_path(self, gc, path, transform, rgbFace=None):
+ if len(path.vertices) > 18980:
+ raise ValueError("The Cairo backend can not draw paths longer than 18980 points.")
+
ctx = gc.ctx
- ctx.new_path()
transform = transform + \
Affine2D().scale(1.0, -1.0).translate(0, self.height)
tpath = transform.transform_path(path)
+ ctx.new_path()
self.convert_path(ctx, tpath)
- self._fill_and_stroke(ctx, rgbFace)
+ self._fill_and_stroke(ctx, rgbFace, gc.get_alpha())
- def draw_image(self, x, y, im, bbox):
+ def draw_image(self, x, y, im, bbox, clippath=None, clippath_trans=None):
# bbox - not currently used
if _debug: print '%s.%s()' % (self.__class__.__name__, _fn_name())
@@ -288,8 +281,8 @@
def points_to_pixels(self, points):
if _debug: print '%s.%s()' % (self.__class__.__name__, _fn_name())
return points/72.0 * self.dpi
-
-
+
+
class GraphicsContextCairo(GraphicsContextBase):
_joind = {
'bevel' : cairo.LINE_JOIN_BEVEL,
@@ -389,7 +382,7 @@
self._linewidth = w
self.ctx.set_line_width (self.renderer.points_to_pixels(w))
-
+
def new_figure_manager(num, *args, **kwargs): # called by backends/__init__.py
"""
Create a new figure manager instance
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|