[OpenJDK 2D-Dev] PATCH: Color.createContext fixlet

Jim Graham Jim.A.Graham at Sun.COM
Wed Apr 16 19:22:36 UTC 2008

Hi Keith,

I'm curious if you need this behavior or not.  We are planning to delete 
the doc comment in JDK7 because the context objects are so cheap to 
create that it wasn't really necessary.  The comment was added early in 
the development of the 2D API and was documenting what was in the code 
without much regard for whether the restrictions were reasonable.  In 
retrospect we should have had the docs simply say that it ignores the 
various documented attributes in choosing a context, but not include any 
promise that the same context will be returned as it is irrelevant from 
an API perspective for any real world purposes.  Also, very early in the 
2D development we ended up calling createContext() on the Color object 
in a lot of common cases from the rendering code and so its performance 
really mattered - that is no longer the case.

The version you see in the OpenJDK 6 source base was inherited from an 
early version of the OpenJDK 7 source base where we had made the 
implementation change to fix a bug, but hadn't yet gotten the API 
reviews to modify the spec to remove the promise.  Our plan for 7 is 
still to remove the restriction.

With respect to OpenJDK 6, it might be the path of least resistance to 
remain true to the original JDK 6 spec, but it would be nice not to lose 
the bug fix that caused the change in behavior in the first place - 
which is the fact that SystemColor objects can mutate their getRGB() 
values if the desktop colors change and if you cache a PaintContext with 
the old rgb value then it could become wrong if the SystemColor mutates. 
  All this really requires is comparing the current rgb value to the one 
that is in the cached context, but when we made the change initially in 
JDK 7 we decided it was a good time to get rid of the questionable 
caching anyway since returning a new context when the rgb value changes 
would arguably still be violating the rather unnecessarily strict docs 
in any case.

So, I guess it is reasonable to fix (though I'm still curious if anyone 
but the JCK tests might rely on the behavior), but please fix it in a 
way that is compatible with the SystemColor rgb mutation so that we 
don't regress that bug at the same time...


Keith Seitz wrote:
> Hi,
> OpenJDK 6 fails to meet the API requirements for Color.createContext. 
> Specifically: "The same PaintContext is returned, regardless of whether 
> or not r, r2d, xform, or hints are null." As it is today, 
> Color.createContext will return a different PaintContext every time it 
> is called.
> The attached patch corrects this.
> Keith

More information about the 2d-dev mailing list