2222# http://groups.google.com/groups?hl=en&lr=&threadm=mailman.5090.1098044946.5135.python-list%40python.org&rnum=1&prev=/groups%3Fq%3D__doc__%2Bauthor%253Ajdhunter%2540ace.bsd.uchicago.edu%26hl%3Den%26btnG%3DGoogle%2BSearch
2323
2424
25+
26+
27+ def allow_rasterization (draw ):
28+ """
29+ Decorator for Artist.draw method. Provides routines
30+ that run before and after the draw call. The before and after functions
31+ are useful for changing artist-dependant renderer attributes or making
32+ other setup function calls, such as starting and flushing a mixed-mode
33+ renderer.
34+ """
35+ def before (artist , renderer ):
36+ if artist .get_rasterized ():
37+ renderer .start_rasterizing ()
38+
39+ def after (artist , renderer ):
40+ if artist .get_rasterized ():
41+ renderer .stop_rasterizing ()
42+
43+ # the axes class has a second argument inframe for its draw method.
44+ def draw_wrapper (artist , renderer , * kl ):
45+ before (artist , renderer )
46+ draw (artist , renderer , * kl )
47+ after (artist , renderer )
48+
49+ # "safe wrapping" to exactly replicate anything we haven't overridden above
50+ draw_wrapper .__name__ = draw .__name__
51+ draw_wrapper .__dict__ = draw .__dict__
52+ draw_wrapper .__doc__ = draw .__doc__
53+ draw_wrapper ._supports_rasterization = True
54+ return draw_wrapper
55+
56+
2557class Artist (object ):
2658 """
2759 Abstract base class for someone who renders into a
@@ -45,6 +77,7 @@ def __init__(self):
4577 self ._label = ''
4678 self ._picker = None
4779 self ._contains = None
80+ self ._rasterized = None
4881
4982 self .eventson = False # fire events only if eventson
5083 self ._oid = 0 # an observer id
@@ -510,6 +543,22 @@ def _set_gc_clip(self, gc):
510543 else :
511544 gc .set_clip_rectangle (None )
512545 gc .set_clip_path (None )
546+
547+ def get_rasterized (self ):
548+ return self ._rasterized
549+
550+ def set_rasterized (self , rasterized ):
551+ """
552+ Force rasterized (bitmap) drawing in vector backend output.
553+
554+ Defaults to None, which implies the backend's default behavior
555+
556+ ACCEPTS: [True | False | None]
557+ """
558+ if rasterized and not hasattr (self .draw , "_supports_rasterization" ):
559+ warnings .warn ("Rasterization of '%s' will be ignored" % self )
560+
561+ self ._rasterized = rasterized
513562
514563 def draw (self , renderer , * args , ** kwargs ):
515564 'Derived classes drawing method'
0 commit comments