From: Eric F. <ef...@ha...> - 2011-08-27 06:31:54
|
On 08/26/2011 08:21 PM, Michiel de Hoon wrote: > Thanks! That solves the problem for me. > Once these changes have made it into trunk, I can commit my changes to the MacOSX backend. Done--I hit the merge button. Eric > > Thanks, > --Michiel > > --- On Fri, 8/26/11, Eric Firing<ef...@ha...> wrote: > >> From: Eric Firing<ef...@ha...> >> Subject: Re: [matplotlib-devel] graphics context: use alpha value from foreground color if present >> To: mat...@li... >> 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 >> Mat...@li... >> 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 > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel |