Revision: 6571
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6571&view=rev
Author:   mdboom
Date:     2008-12-11 20:45:12 +0000 (Thu, 11 Dec 2008)

Log Message:
-----------
More progress on programmatic snapping.  Applied to markers (to prevent them 
from disappearing), and legend boxes.

Modified Paths:
--------------
    trunk/matplotlib/lib/matplotlib/artist.py
    trunk/matplotlib/lib/matplotlib/legend.py
    trunk/matplotlib/lib/matplotlib/lines.py
    trunk/matplotlib/lib/matplotlib/patches.py
    trunk/matplotlib/src/_backend_agg.cpp

Modified: trunk/matplotlib/lib/matplotlib/artist.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/artist.py   2008-12-11 20:44:51 UTC (rev 
6570)
+++ trunk/matplotlib/lib/matplotlib/artist.py   2008-12-11 20:45:12 UTC (rev 
6571)
@@ -54,6 +54,7 @@
         self._url = None
         self.x_isdata = True  # False to avoid updating Axes.dataLim with x
         self.y_isdata = True  #                                      with y
+        self._snap = None
 
     def remove(self):
         """
@@ -329,6 +330,32 @@
         """
         self._url = url
 
+    def get_snap(self):
+        """
+        Returns the snap setting which may be:
+
+          * True: snap vertices to the nearest pixel center
+
+          * False: leave vertices as-is
+
+          * None: (auto) If the path contains only rectilinear line
+            segments, round to the nearest pixel center
+        """
+        return self._snap
+
+    def set_snap(self, snap):
+        """
+        Sets the snap setting which may be:
+
+          * True: snap vertices to the nearest pixel center
+
+          * False: leave vertices as-is
+
+          * None: (auto) If the path contains only rectilinear line
+            segments, round to the nearest pixel center
+        """
+        self._snap = snap
+
     def get_figure(self):
         """
         Return the :class:`~matplotlib.figure.Figure` instance the

Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py   2008-12-11 20:44:51 UTC (rev 
6570)
+++ trunk/matplotlib/lib/matplotlib/legend.py   2008-12-11 20:45:12 UTC (rev 
6571)
@@ -254,6 +254,7 @@
             xy=(0.0, 0.0), width=1., height=1.,
             facecolor='w', edgecolor='k',
             mutation_scale=self.fontsize,
+            snap=True
             )
 
         # The width and height of the legendPatch will be set (in the

Modified: trunk/matplotlib/lib/matplotlib/lines.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/lines.py    2008-12-11 20:44:51 UTC (rev 
6570)
+++ trunk/matplotlib/lib/matplotlib/lines.py    2008-12-11 20:45:12 UTC (rev 
6571)
@@ -453,6 +453,7 @@
             join = self._solidjoinstyle
         gc.set_joinstyle(join)
         gc.set_capstyle(cap)
+        gc.set_snap(self.get_snap())
 
         funcname = self._lineStyles.get(self._linestyle, '_draw_nothing')
         if funcname != '_draw_nothing':
@@ -845,6 +846,7 @@
     def _draw_point(self, renderer, gc, path, path_trans):
         w = renderer.points_to_pixels(self._markersize) * \
             self._point_size_reduction * 0.5
+        gc.set_snap(renderer.points_to_pixels(self._markersize) > 3.0)
         rgbFace = self._get_rgb_face()
         transform = Affine2D().scale(w)
         renderer.draw_markers(
@@ -854,6 +856,7 @@
     _draw_pixel_transform = Affine2D().translate(-0.5, -0.5)
     def _draw_pixel(self, renderer, gc, path, path_trans):
         rgbFace = self._get_rgb_face()
+        gc.set_snap(False)
         renderer.draw_markers(gc, Path.unit_rectangle(),
                               self._draw_pixel_transform,
                               path, path_trans, rgbFace)
@@ -861,6 +864,7 @@
 
     def _draw_circle(self, renderer, gc, path, path_trans):
         w = renderer.points_to_pixels(self._markersize) * 0.5
+        gc.set_snap(renderer.points_to_pixels(self._markersize) > 3.0)
         rgbFace = self._get_rgb_face()
         transform = Affine2D().scale(w, w)
         renderer.draw_markers(
@@ -870,6 +874,7 @@
 
     _triangle_path = Path([[0.0, 1.0], [-1.0, -1.0], [1.0, -1.0], [0.0, 1.0]])
     def _draw_triangle_up(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset, offset)
         rgbFace = self._get_rgb_face()
@@ -878,6 +883,7 @@
 
 
     def _draw_triangle_down(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset, -offset)
         rgbFace = self._get_rgb_face()
@@ -886,6 +892,7 @@
 
 
     def _draw_triangle_left(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset, offset).rotate_deg(90)
         rgbFace = self._get_rgb_face()
@@ -894,6 +901,7 @@
 
 
     def _draw_triangle_right(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset, offset).rotate_deg(-90)
         rgbFace = self._get_rgb_face()
@@ -902,6 +910,7 @@
 
 
     def _draw_square(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 2.0)
         side = renderer.points_to_pixels(self._markersize)
         transform = Affine2D().translate(-0.5, -0.5).scale(side)
         rgbFace = self._get_rgb_face()
@@ -910,6 +919,7 @@
 
 
     def _draw_diamond(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         side = renderer.points_to_pixels(self._markersize)
         transform = Affine2D().translate(-0.5, -0.5).rotate_deg(45).scale(side)
         rgbFace = self._get_rgb_face()
@@ -918,6 +928,7 @@
 
 
     def _draw_thin_diamond(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = renderer.points_to_pixels(self._markersize)
         transform = Affine2D().translate(-0.5, -0.5) \
             .rotate_deg(45).scale(offset * 0.6, offset)
@@ -927,6 +938,7 @@
 
 
     def _draw_pentagon(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5 * renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         rgbFace = self._get_rgb_face()
@@ -934,6 +946,7 @@
                               path, path_trans, rgbFace)
 
     def _draw_star(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5 * renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         rgbFace = self._get_rgb_face()
@@ -943,6 +956,7 @@
 
 
     def _draw_hexagon1(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5 * renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         rgbFace = self._get_rgb_face()
@@ -951,6 +965,7 @@
 
 
     def _draw_hexagon2(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5 * renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(30)
         rgbFace = self._get_rgb_face()
@@ -960,6 +975,7 @@
 
     _line_marker_path = Path([[0.0, -1.0], [0.0, 1.0]])
     def _draw_vline(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         renderer.draw_markers(gc, self._line_marker_path, transform,
@@ -967,6 +983,7 @@
 
 
     def _draw_hline(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(90)
         renderer.draw_markers(gc, self._line_marker_path, transform,
@@ -975,6 +992,7 @@
 
     _tickhoriz_path = Path([[0.0, 0.0], [1.0, 0.0]])
     def _draw_tickleft(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = renderer.points_to_pixels(self._markersize)
         marker_transform = Affine2D().scale(-offset, 1.0)
         renderer.draw_markers(gc, self._tickhoriz_path, marker_transform,
@@ -982,6 +1000,7 @@
 
 
     def _draw_tickright(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = renderer.points_to_pixels(self._markersize)
         marker_transform = Affine2D().scale(offset, 1.0)
         renderer.draw_markers(gc, self._tickhoriz_path, marker_transform,
@@ -990,6 +1009,7 @@
 
     _tickvert_path = Path([[-0.0, 0.0], [-0.0, 1.0]])
     def _draw_tickup(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = renderer.points_to_pixels(self._markersize)
         marker_transform = Affine2D().scale(1.0, offset)
         renderer.draw_markers(gc, self._tickvert_path, marker_transform,
@@ -997,6 +1017,7 @@
 
 
     def _draw_tickdown(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
         offset = renderer.points_to_pixels(self._markersize)
         marker_transform = Affine2D().scale(1.0, -offset)
         renderer.draw_markers(gc, self._tickvert_path, marker_transform,
@@ -1008,6 +1029,7 @@
                       [Path.MOVETO, Path.LINETO,
                        Path.MOVETO, Path.LINETO])
     def _draw_plus(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         renderer.draw_markers(gc, self._plus_path, transform,
@@ -1021,6 +1043,7 @@
                       Path.MOVETO, Path.LINETO,
                       Path.MOVETO, Path.LINETO])
     def _draw_tri_down(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         renderer.draw_markers(gc, self._tri_path, transform,
@@ -1028,6 +1051,7 @@
 
 
     def _draw_tri_up(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(180)
         renderer.draw_markers(gc, self._tri_path, transform,
@@ -1035,6 +1059,7 @@
 
 
     def _draw_tri_left(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(90)
         renderer.draw_markers(gc, self._tri_path, transform,
@@ -1042,6 +1067,7 @@
 
 
     def _draw_tri_right(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(270)
         renderer.draw_markers(gc, self._tri_path, transform,
@@ -1050,6 +1076,7 @@
 
     _caret_path = Path([[-1.0, 1.5], [0.0, 0.0], [1.0, 1.5]])
     def _draw_caretdown(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         renderer.draw_markers(gc, self._caret_path, transform,
@@ -1057,6 +1084,7 @@
 
 
     def _draw_caretup(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(180)
         renderer.draw_markers(gc, self._caret_path, transform,
@@ -1064,6 +1092,7 @@
 
 
     def _draw_caretleft(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(270)
         renderer.draw_markers(gc, self._caret_path, transform,
@@ -1071,6 +1100,7 @@
 
 
     def _draw_caretright(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset).rotate_deg(90)
         renderer.draw_markers(gc, self._caret_path, transform,
@@ -1082,6 +1112,7 @@
                    [Path.MOVETO, Path.LINETO,
                     Path.MOVETO, Path.LINETO])
     def _draw_x(self, renderer, gc, path, path_trans):
+        gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
         offset = 0.5*renderer.points_to_pixels(self._markersize)
         transform = Affine2D().scale(offset)
         renderer.draw_markers(gc, self._x_path, transform,

Modified: trunk/matplotlib/lib/matplotlib/patches.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/patches.py  2008-12-11 20:44:51 UTC (rev 
6570)
+++ trunk/matplotlib/lib/matplotlib/patches.py  2008-12-11 20:45:12 UTC (rev 
6571)
@@ -278,6 +278,7 @@
         self._set_gc_clip(gc)
         gc.set_capstyle('projecting')
         gc.set_url(self._url)
+        gc.set_snap(self._snap)
 
         if (not self.fill or self._facecolor is None or
             (cbook.is_string_like(self._facecolor) and 
self._facecolor.lower()=='none')):
@@ -1435,7 +1436,6 @@
         #adding quotes for now to work around tex bug treating '-' as itemize
         _table.append([cls.__name__, "'%s'"%name, argstr])
 
-
     return _pprint_table(_table)
 
 
@@ -1505,7 +1505,7 @@
 
            BoxStyle("Round, pad=0.2")
 
-    The following boxstyle classes are defined.
+    Following boxstyle classes are defined.
 
     %(AvailableBoxstyles)s
 
@@ -2549,6 +2549,7 @@
     A arrowstyle object can be either created as::
 
            ArrowStyle.Fancy(head_length=.4, head_width=.4, tail_width=.4)
+
     or::
 
            ArrowStyle("Fancy", head_length=.4, head_width=.4, tail_width=.4)

Modified: trunk/matplotlib/src/_backend_agg.cpp
===================================================================
--- trunk/matplotlib/src/_backend_agg.cpp       2008-12-11 20:44:51 UTC (rev 
6570)
+++ trunk/matplotlib/src/_backend_agg.cpp       2008-12-11 20:45:12 UTC (rev 
6571)
@@ -968,8 +968,6 @@
   transformed_path_t tpath(path, trans);
   simplify_t simplified(tpath, snap, simplify, width, height);
   curve_t curve(simplified);
-  if (snap)
-    gc.isaa = false;
 
   try {
     _draw_path(curve, has_clippath, face, gc);
@@ -1127,10 +1125,7 @@
 
       if (check_snap) {
        snap = should_snap(gc, path, trans);
-       if (snap)
-         gc.isaa = false;
-       else
-         gc.isaa = bool(Py::Int(antialiaseds[i % Naa]));
+        gc.isaa = bool(Py::Int(antialiaseds[i % Naa]));
 
        transformed_path_t tpath(path, trans);
        simplify_t simplified(tpath, snap, false, width, height);


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

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to