From: <md...@us...> - 2007-11-26 15:30:15
|
Revision: 4440 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4440&view=rev Author: mdboom Date: 2007-11-26 07:30:12 -0800 (Mon, 26 Nov 2007) Log Message: ----------- Support mixed-mode rendering in the SVG backend. Modified Paths: -------------- branches/transforms/lib/matplotlib/backend_bases.py branches/transforms/lib/matplotlib/backends/backend_mixed.py branches/transforms/lib/matplotlib/backends/backend_svg.py Modified: branches/transforms/lib/matplotlib/backend_bases.py =================================================================== --- branches/transforms/lib/matplotlib/backend_bases.py 2007-11-26 15:18:40 UTC (rev 4439) +++ branches/transforms/lib/matplotlib/backend_bases.py 2007-11-26 15:30:12 UTC (rev 4440) @@ -380,6 +380,8 @@ Return the alpha value used for blending - not supported on all backends """ + if len(self._rgb) == 4: + return self._rgb[3] return self._alpha def get_antialiased(self): Modified: branches/transforms/lib/matplotlib/backends/backend_mixed.py =================================================================== --- branches/transforms/lib/matplotlib/backends/backend_mixed.py 2007-11-26 15:18:40 UTC (rev 4439) +++ branches/transforms/lib/matplotlib/backends/backend_mixed.py 2007-11-26 15:30:12 UTC (rev 4440) @@ -41,11 +41,11 @@ self._set_current_renderer(vector_renderer) _methods = """ - open_group close_group draw_path draw_markers - draw_path_collection draw_quad_mesh get_image_magnification - draw_image draw_tex draw_text flipy option_image_nocomposite - get_texmanager get_text_width_height_descent new_gc - points_to_pixels strip_math finalize + close_group draw_image draw_markers draw_path + draw_path_collection draw_quad_mesh draw_tex draw_text + finalize flipy get_canvas_width_height get_image_magnification + get_texmanager get_text_width_height_descent new_gc open_group + option_image_nocomposite points_to_pixels strip_math """.split() def _set_current_renderer(self, renderer): self._renderer = renderer @@ -93,7 +93,3 @@ self._renderer.draw_image(l, height - b - h, image, None) self._raster_renderer = None self._rasterizing = False - - def get_canvas_width_height(self): - 'return the canvas width and height in display coords' - return self._width, self._height Modified: branches/transforms/lib/matplotlib/backends/backend_svg.py =================================================================== --- branches/transforms/lib/matplotlib/backends/backend_svg.py 2007-11-26 15:18:40 UTC (rev 4439) +++ branches/transforms/lib/matplotlib/backends/backend_svg.py 2007-11-26 15:30:12 UTC (rev 4440) @@ -5,6 +5,7 @@ from matplotlib import verbose, __version__, rcParams from matplotlib.backend_bases import RendererBase, GraphicsContextBase,\ FigureManagerBase, FigureCanvasBase +from matplotlib.backends.backend_mixed import MixedModeRenderer from matplotlib.cbook import is_string_like, is_writable_file_like from matplotlib.colors import rgb2hex from matplotlib.figure import Figure @@ -93,7 +94,7 @@ return 'fill: %s; stroke: %s; stroke-width: %s; ' \ 'stroke-linejoin: %s; stroke-linecap: %s; %s opacity: %s' % ( fill, - rgb2hex(gc.get_rgb()), + rgb2hex(gc.get_rgb()[:3]), linewidth, gc.get_joinstyle(), _capstyle_d[gc.get_capstyle()], @@ -288,14 +289,12 @@ font.set_text(s, 0.0, flags=LOAD_NO_HINTING) y -= font.get_descent() / 64.0 - thetext = escape_xml_text(s) - fontfamily = font.family_name - fontstyle = prop.get_style() fontsize = prop.get_size_in_points() - color = rgb2hex(gc.get_rgb()) + color = rgb2hex(gc.get_rgb()[:3]) if rcParams['svg.embed_char_paths']: - svg = ['<g transform="'] + + svg = ['<g style="fill: %s" transform="' % color] if angle != 0: svg.append('translate(%s,%s)rotate(%1.1f)' % (x,y,-angle)) elif x != 0 or y != 0: @@ -330,6 +329,10 @@ svg.append('</g>\n') svg = ''.join(svg) else: + thetext = escape_xml_text(s) + fontfamily = font.family_name + fontstyle = prop.get_style() + style = 'font-size: %f; font-family: %s; font-style: %s; fill: %s;'%(fontsize, fontfamily,fontstyle, color) if angle!=0: transform = 'transform="translate(%s,%s) rotate(%1.1f) translate(%s,%s)"' % (x,y,-angle,-x,-y) @@ -393,7 +396,7 @@ self.mathtext_parser.parse(s, 72, prop) svg_glyphs = svg_elements.svg_glyphs svg_rects = svg_elements.svg_rects - color = rgb2hex(gc.get_rgb()) + color = rgb2hex(gc.get_rgb()[:3]) self.open_group("mathtext") @@ -466,7 +469,7 @@ self._svgwriter.write (''.join(svg)) self.close_group("mathtext") - def finish(self): + def finalize(self): write = self._svgwriter.write if len(self._char_defs): write('<defs id="fontpaths">\n') @@ -501,34 +504,23 @@ 'svgz': 'Scalable Vector Graphics'} def print_svg(self, filename, *args, **kwargs): - if is_string_like(filename): - fh_to_close = svgwriter = codecs.open(filename, 'w', 'utf-8') - elif is_writable_file_like(filename): - svgwriter = codecs.EncodedFile(filename, 'utf-8') - fh_to_close = None - else: - raise ValueError("filename must be a path or a file-like object") - return self._print_svg(filename, svgwriter, fh_to_close) - + svgwriter = codecs.open(filename, 'w', 'utf-8') + return self._print_svg(filename, svgwriter) + def print_svgz(self, filename, *args, **kwargs): - if is_string_like(filename): - gzipwriter = gzip.GzipFile(filename, 'w') - fh_to_close = svgwriter = codecs.EncodedFile(gzipwriter, 'utf-8') - elif is_writable_file_like(filename): - fh_to_close = gzipwriter = gzip.GzipFile(fileobj=filename, mode='w') - svgwriter = codecs.EncodedFile(gzipwriter, 'utf-8') - else: - raise ValueError("filename must be a path or a file-like object") - return self._print_svg(filename, svgwriter, fh_to_close) + gzipwriter = gzip.GzipFile(filename, 'w') + svgwriter = codecs.EncodedFile(gzipwriter, 'utf-8') + return self._print_svg(filename, svgwriter) def _print_svg(self, filename, svgwriter, fh_to_close=None): self.figure.set_dpi(72.0) width, height = self.figure.get_size_inches() w, h = width*72, height*72 - renderer = RendererSVG(w, h, svgwriter, filename) + renderer = MixedModeRenderer( + width, height, 72.0, RendererSVG(w, h, svgwriter, filename)) self.figure.draw(renderer) - renderer.finish() + renderer.finalize() if fh_to_close is not None: svgwriter.close() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |