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  * DrawParallelogram
38  * 1) fill the area between the 4 edges of an outer parallelogram
39  *    (as specified by an origin and 2 delta vectors)
40  *    but also outside the 4 edges of an inner parallelogram
41  *    (as specified by proportional amounts of the outer delta vectors)
42  */
43 public class DrawParallelogram extends GraphicsPrimitive
44 {
45     public static final String methodSignature =
46         "DrawParallelogram(...)".toString();
47 
48     public static final int primTypeID = makePrimTypeID();
49 
locate(SurfaceType srctype, CompositeType comptype, SurfaceType dsttype)50     public static DrawParallelogram locate(SurfaceType srctype,
51                                            CompositeType comptype,
52                                            SurfaceType dsttype)
53     {
54         return (DrawParallelogram)
55             GraphicsPrimitiveMgr.locate(primTypeID,
56                                         srctype, comptype, dsttype);
57     }
58 
DrawParallelogram(SurfaceType srctype, CompositeType comptype, SurfaceType dsttype)59     protected DrawParallelogram(SurfaceType srctype,
60                                 CompositeType comptype,
61                                 SurfaceType dsttype)
62     {
63         super(methodSignature, primTypeID,
64               srctype, comptype, dsttype);
65     }
66 
DrawParallelogram(long pNativePrim, SurfaceType srctype, CompositeType comptype, SurfaceType dsttype)67     public DrawParallelogram(long pNativePrim,
68                              SurfaceType srctype,
69                              CompositeType comptype,
70                              SurfaceType dsttype)
71     {
72         super(pNativePrim, methodSignature, primTypeID,
73               srctype, comptype, dsttype);
74     }
75 
76     /**
77      * All DrawParallelogram implementors must have this invoker method
78      */
DrawParallelogram(SunGraphics2D sg, SurfaceData dest, double x, double y, double dx1, double dy1, double dx2, double dy2, double lw1, double lw2)79     public native void DrawParallelogram(SunGraphics2D sg, SurfaceData dest,
80                                          double x, double y,
81                                          double dx1, double dy1,
82                                          double dx2, double dy2,
83                                          double lw1, double lw2);
84 
makePrimitive(SurfaceType srctype, CompositeType comptype, SurfaceType dsttype)85     public GraphicsPrimitive makePrimitive(SurfaceType srctype,
86                                            CompositeType comptype,
87                                            SurfaceType dsttype)
88     {
89         // REMIND: iterate with a FillRect primitive?
90         throw new InternalError("DrawParallelogram not implemented for "+
91                                 srctype+" with "+comptype);
92     }
93 
traceWrap()94     public GraphicsPrimitive traceWrap() {
95         return new TraceDrawParallelogram(this);
96     }
97 
98     private static class TraceDrawParallelogram extends DrawParallelogram {
99         DrawParallelogram target;
100 
TraceDrawParallelogram(DrawParallelogram target)101         public TraceDrawParallelogram(DrawParallelogram target) {
102             super(target.getSourceType(),
103                   target.getCompositeType(),
104                   target.getDestType());
105             this.target = target;
106         }
107 
traceWrap()108         public GraphicsPrimitive traceWrap() {
109             return this;
110         }
111 
DrawParallelogram(SunGraphics2D sg2d, SurfaceData dest, double x, double y, double dx1, double dy1, double dx2, double dy2, double lw1, double lw2)112         public void DrawParallelogram(SunGraphics2D sg2d, SurfaceData dest,
113                                       double x, double y,
114                                       double dx1, double dy1,
115                                       double dx2, double dy2,
116                                       double lw1, double lw2)
117         {
118             tracePrimitive(target);
119             target.DrawParallelogram(sg2d, dest,
120                                      x, y, dx1, dy1, dx2, dy2, lw1, lw2);
121         }
122     }
123 }
124