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