Frames | No Frames |
1: /* QPainterPath.java -- 2: Copyright (C) 2005 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: package gnu.java.awt.peer.qt; 39: 40: import java.awt.Shape; 41: import java.awt.geom.AffineTransform; 42: import java.awt.geom.PathIterator; 43: import java.awt.geom.GeneralPath; 44: 45: /** 46: * A simple wrapper class for a QPainterPath, 47: * createable from an AWT Shape 48: */ 49: public class QPainterPath extends NativeWrapper 50: { 51: QPainterPath() 52: { 53: } 54: 55: public QPainterPath( Shape s ) 56: { 57: PathIterator pi = s.getPathIterator( new AffineTransform() ); 58: double[] coords = new double[6]; 59: 60: init( pi.getWindingRule() ); 61: 62: while( !pi.isDone() ) 63: { 64: switch( pi.currentSegment(coords) ) 65: { 66: case PathIterator.SEG_MOVETO: 67: moveTo( coords[0], coords[1] ); 68: break; 69: 70: case PathIterator.SEG_CLOSE: 71: close(); 72: break; 73: 74: case PathIterator.SEG_LINETO: 75: lineTo( coords[0], coords[1] ); 76: break; 77: 78: case PathIterator.SEG_QUADTO: 79: quadTo( coords[0], coords[1], coords[2], coords[3] ); 80: break; 81: 82: case PathIterator.SEG_CUBICTO: 83: cubicTo( coords[0], coords[1], 84: coords[2], coords[3], 85: coords[4], coords[5] ); 86: break; 87: } 88: pi.next(); 89: } 90: } 91: 92: /** 93: * Constructor for rectangles. 94: */ 95: public QPainterPath( double x, double y, double w, double h ) 96: { 97: init(PathIterator.WIND_EVEN_ODD); 98: moveTo( x, y ); 99: lineTo( x + w, y ); 100: lineTo( x + w, y + h ); 101: lineTo( x , y + h ); 102: lineTo( x, y ); 103: close(); 104: } 105: 106: /** 107: * Constructor for lines. 108: */ 109: public QPainterPath( double x1, double y1, double x2, double y2, boolean s ) 110: { 111: init(PathIterator.WIND_EVEN_ODD); 112: moveTo( x1, y1 ); 113: lineTo( x2, y2 ); 114: } 115: 116: /** 117: * Returns the QPainterPath as a GeneralPath 118: */ 119: public native GeneralPath getPath(); 120: 121: private native void init(int windingRule); 122: 123: private native void moveTo(double x, double y); 124: 125: private native void close(); 126: 127: private native void lineTo(double x, double y); 128: 129: private native void quadTo(double x1, double y1, double x2, double y2); 130: 131: private native void cubicTo(double x1, double y1, double x2, double y2, 132: double x3, double y3); 133: 134: public native void dispose(); 135: 136: public void finalize() 137: { 138: dispose(); 139: } 140: }