Thanks! That solves the problem for me.
Once these changes have made it into trunk, I can commit my changes to the 
MacOSX backend.

Thanks,
--Michiel

--- On Fri, 8/26/11, Eric Firing <efir...@hawaii.edu> wrote:

> From: Eric Firing <efir...@hawaii.edu>
> Subject: Re: [matplotlib-devel] graphics context: use alpha value from 
> foreground color if present
> To: matplotlib-devel@lists.sourceforge.net
> Date: Friday, August 26, 2011, 10:20 PM
> On 08/26/2011 06:23 AM, Michiel de
> Hoon wrote:
> > Dear all,
> >
> > I am currently modifying the MacOSX backend to make
> its interactive/non-interactive behavior consistent with the
> other backends in matplotlib.
> > When I was testing the backend, I found a new bug that
> seems to be related to a recent change in backend_bases.py:
> 
> Michiel,
> 
> Thank you for doing this work on the MacOSX backend; sorry
> to have 
> introduced a bug that you stumbled over.
> 
> >
> > https://github.com/matplotlib/matplotlib/commit/4c078ddf68cc0ecc1a5f36009a3e3a8b4921b037#lib/matplotlib/backend_bases.py
> >
> > After this commit, GraphicsContextBase.set_alpha has
> no effect if alpha==None; previously it would set alpha to
> 1.0.
> >
> > The bug appears here in Text.draw in text.py:
> >
> >          gc =
> renderer.new_gc()
> >         
> gc.set_foreground(self.get_color())
> >         
> gc.set_alpha(self.get_alpha())
> >
> > In this code, self is a Text object, which derives
> from the Artist class, which initializes its _alpha member
> to None. So self.get_alpha() returns None, and gc.set_alpha
> has no effect. The alpha value used then depends on whatever
> was present in the gc before the call to new_gc, which is
> backend-dependent; the MacOSX and cairo backends end up with
> an incorrect alpha value.
> >
> > I guess the easiest solution is to initialize _alpha
> in the Artist class to 1.0 instead of to None.
> 
> See https://github.com/matplotlib/matplotlib/pull/437
> 
> The problem was occurring because the macosx and cairo
> backends were 
> recycling their graphics context objects instead of making
> new 
> instances, so they were not getting initialized.  I
> made a local fix by 
> initializing the _alpha attributes; it may be that other
> initialization 
> is actually needed as well, and that the
> GraphicsContextBase.__init__ 
> method should be called, but I have not looked into
> that.  The small fix 
> solves the immediate problem.
> 
> In addition, I realized that a small change in
> GraphicsContextBase was 
> needed to properly support backends that have their own
> set_alpha and 
> set_foreground methods in their gc class.
> 
> Eric
> 
> >
> > Thanks,
> > --Michiel
> 
> ------------------------------------------------------------------------------
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified
> management 
> Up to 160% more powerful than alternatives and 25% more
> efficient. 
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
> 

------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management 
Up to 160% more powerful than alternatives and 25% more efficient. 
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to