import java.awt.*;
import java.awt.geom.*;


public class MyPorterDuff {
	public static void main (String[] args) {
		
		//Fenster erzeugen
		MyFrame frame = new MyFrame( "AlphaCompisite/Porter-Duff-Rules", 750,100 ) {
			public void paint(Graphics g) {
				
				//Upcast --> mehr Funktionen in Graphics2D
				Graphics2D g2d=(Graphics2D)g;
							
				//Testrechteck
				Rectangle2D r = new Rectangle2D.Float();
				
				float alpha = 0.8f; //Alpha-Wert
				float w=50;float h=50; //Rechteck-Maße
				int[] rules = new int[8]; //alle möglichen Compositing Rules:
				rules[0] = AlphaComposite.SRC_OVER;
				rules[1] = AlphaComposite.DST_OVER;
				rules[2] = AlphaComposite.CLEAR;
				rules[3] = AlphaComposite.SRC;
				rules[4] = AlphaComposite.SRC_IN;
				rules[5] = AlphaComposite.DST_IN;
				rules[6] = AlphaComposite.SRC_OUT;
				rules[7] = AlphaComposite.DST_OUT;
						
				//Alle Regeln durchlaufen, je zwei sich überlappende
				//Rechtecke nebeneinander füllen
				for( int i=0; i<8; i++ ) {
					//fülle erstes Rechteck mit SRC
					r.setRect( (float)(i+1)*70,30,w,h );
					g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
					g2d.setPaint(Color.blue);
					g2d.fill(r);
										
					//das zweite Rechteck darüber legen mit jew. Regel
					xg2d.setComposite(AlphaComposite.getInstance( rules[i] , alpha ));
					r.setRect( (float)(i+1)*70+10,40,w,h );
					g2d.setPaint(Color.red);
					g2d.fill(r);					
				}
			}
		};
		
	}
}
