Source for gnu.java.awt.peer.qt.QPainterPath

   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: }