You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/12/05 13:37:06 UTC
svn commit: r601321 -
/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
Author: apetrenko
Date: Wed Dec 5 04:37:04 2007
New Revision: 601321
URL: http://svn.apache.org/viewvc?rev=601321&view=rev
Log:
Patch for HARMONY-5258 "[classlib][awt] Graphics draw and fill methods
work incorrectly with AlphaComposite different from AlphaComposite.Src"
Modified:
harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java?rev=601321&r1=601320&r2=601321&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java Wed Dec 5 04:37:04 2007
@@ -521,12 +521,58 @@
super.setComposite(composite);
if (composite instanceof AlphaComposite) {
AlphaComposite acomp = (AlphaComposite) composite;
- if (acomp.getRule() == AlphaComposite.SRC) {
- simpleComposite = true;
- } else if (acomp.getAlpha() != 1.0f) {
- simpleComposite = false;
- } else {
- simpleComposite = true;
+ int rule = acomp.getRule();
+ float srca = acomp.getAlpha();
+
+ switch(rule){
+ case AlphaComposite.CLEAR:
+ case AlphaComposite.SRC_OUT:
+ x11.XSetFunction(display, gc, X11Defs.GXclear);
+ simpleComposite = true;
+ break;
+
+ case AlphaComposite.SRC:
+ case AlphaComposite.SRC_IN:
+ if(srca == 0.0f) x11.XSetFunction(display, gc, X11Defs.GXclear);
+ else x11.XSetFunction(display, gc, X11Defs.GXcopy);
+ simpleComposite = true;
+ break;
+
+ case AlphaComposite.DST:
+ case AlphaComposite.DST_OVER:
+ x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ simpleComposite = true;
+ break;
+
+ case AlphaComposite.SRC_ATOP:
+ case AlphaComposite.SRC_OVER:
+ x11.XSetFunction(display, gc, X11Defs.GXcopy);
+ if(srca == 1.0f){
+ simpleComposite = true;
+ }else{
+ simpleComposite = false;
+ }
+ break;
+
+ case AlphaComposite.DST_IN:
+ case AlphaComposite.DST_ATOP:
+ if(srca != 0.0f){
+ x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ } else {
+ x11.XSetFunction(display, gc, X11Defs.GXclear);
+ }
+ simpleComposite = true;
+ break;
+
+ case AlphaComposite.DST_OUT:
+ case AlphaComposite.XOR:
+ if(srca != 1.0f){
+ x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ } else {
+ x11.XSetFunction(display, gc, X11Defs.GXclear);
+ }
+ simpleComposite = true;
+ break;
}
} else {
simpleComposite = false;