From: Eric F. <ef...@ha...> - 2011-08-27 02:20:44
|
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 |