View Javadoc
1   /*
2    * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  /*
27   * @author Jim Graham
28   */
29  
30  package sun.java2d.loops;
31  
32  import sun.java2d.loops.GraphicsPrimitive;
33  import sun.java2d.SunGraphics2D;
34  import sun.java2d.SurfaceData;
35  
36  /**
37   * FillParallelogram
38   * 1) fill the area between the 4 edges of a parallelogram
39   *    (as specified by an origin and 2 delta vectors)
40   */
41  public class FillParallelogram extends GraphicsPrimitive
42  {
43      public final static String methodSignature =
44          "FillParallelogram(...)".toString();
45  
46      public final static int primTypeID = makePrimTypeID();
47  
48      public static FillParallelogram locate(SurfaceType srctype,
49                                             CompositeType comptype,
50                                             SurfaceType dsttype)
51      {
52          return (FillParallelogram)
53              GraphicsPrimitiveMgr.locate(primTypeID,
54                                          srctype, comptype, dsttype);
55      }
56  
57      protected FillParallelogram(SurfaceType srctype,
58                                  CompositeType comptype,
59                                  SurfaceType dsttype)
60      {
61          super(methodSignature, primTypeID,
62                srctype, comptype, dsttype);
63      }
64  
65      public FillParallelogram(long pNativePrim,
66                               SurfaceType srctype,
67                               CompositeType comptype,
68                               SurfaceType dsttype)
69      {
70          super(pNativePrim, methodSignature, primTypeID,
71                srctype, comptype, dsttype);
72      }
73  
74      /**
75       * All FillParallelogram implementors must have this invoker method
76       */
77      public native void FillParallelogram(SunGraphics2D sg2d, SurfaceData dest,
78                                           double x0, double y0,
79                                           double dx1, double dy1,
80                                           double dx2, double dy2);
81  
82      public GraphicsPrimitive makePrimitive(SurfaceType srctype,
83                                             CompositeType comptype,
84                                             SurfaceType dsttype)
85      {
86          // REMIND: iterate with a FillRect primitive?
87          throw new InternalError("FillParallelogram not implemented for "+
88                                  srctype+" with "+comptype);
89      }
90  
91      public GraphicsPrimitive traceWrap() {
92          return new TraceFillParallelogram(this);
93      }
94  
95      private static class TraceFillParallelogram extends FillParallelogram {
96          FillParallelogram target;
97  
98          public TraceFillParallelogram(FillParallelogram target) {
99              super(target.getSourceType(),
100                   target.getCompositeType(),
101                   target.getDestType());
102             this.target = target;
103         }
104 
105         public GraphicsPrimitive traceWrap() {
106             return this;
107         }
108 
109         public void FillParallelogram(SunGraphics2D sg2d, SurfaceData dest,
110                                       double x0, double y0,
111                                       double dx1, double dy1,
112                                       double dx2, double dy2)
113         {
114             tracePrimitive(target);
115             target.FillParallelogram(sg2d, dest, x0, y0, dx1, dy1, dx2, dy2);
116         }
117     }
118 }