1 /*
   2  * Copyright (c) 1997, 2002, 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 Charlton Innovations, Inc.
  28  */
  29 
  30 package sun.java2d.loops;
  31 
  32 import sun.java2d.loops.GraphicsPrimitive;
  33 import java.awt.Color;
  34 import java.awt.image.ColorModel;
  35 import java.awt.image.Raster;
  36 import sun.java2d.SunGraphics2D;
  37 import sun.java2d.SurfaceData;
  38 
  39 /**
  40  *   DrawRect
  41  *   1) draw single-width line rectangle onto destination surface
  42  *   2) must accept output area [x, y, dx, dy]
  43  *      from within the surface description data for clip rect
  44  */
  45 public class DrawRect extends GraphicsPrimitive
  46 {
  47     public static final String methodSignature = "DrawRect(...)".toString();
  48 
  49     public static final int primTypeID = makePrimTypeID();
  50 
  51     public static DrawRect locate(SurfaceType srctype,
  52                                   CompositeType comptype,
  53                                   SurfaceType dsttype)
  54     {
  55         return (DrawRect)
  56             GraphicsPrimitiveMgr.locate(primTypeID,
  57                                         srctype, comptype, dsttype);
  58     }
  59 
  60     protected DrawRect(SurfaceType srctype,
  61                        CompositeType comptype,
  62                        SurfaceType dsttype)
  63     {
  64         super(methodSignature, primTypeID, srctype, comptype, dsttype);
  65     }
  66 
  67     public DrawRect(long pNativePrim,
  68                     SurfaceType srctype,
  69                     CompositeType comptype,
  70                     SurfaceType dsttype)
  71     {
  72         super(pNativePrim, methodSignature, primTypeID, srctype, comptype, dsttype);
  73     }
  74 
  75     /**
  76      *   All DrawRect implementors must have this invoker method
  77      */
  78     public native void DrawRect(SunGraphics2D sg2d, SurfaceData dest,
  79                                 int x1, int y1, int w, int h);
  80 
  81     public GraphicsPrimitive makePrimitive(SurfaceType srctype,
  82                                            CompositeType comptype,
  83                                            SurfaceType dsttype)
  84     {
  85         // REMIND: use FillSpans or converter object?
  86         throw new InternalError("DrawRect not implemented for "+
  87                                 srctype+" with "+comptype);
  88     }
  89 
  90     public GraphicsPrimitive traceWrap() {
  91         return new TraceDrawRect(this);
  92     }
  93 
  94     private static class TraceDrawRect extends DrawRect {
  95         DrawRect target;
  96 
  97         public TraceDrawRect(DrawRect target) {
  98             super(target.getSourceType(),
  99                   target.getCompositeType(),
 100                   target.getDestType());
 101             this.target = target;
 102         }
 103 
 104         public GraphicsPrimitive traceWrap() {
 105             return this;
 106         }
 107 
 108         public void DrawRect(SunGraphics2D sg2d, SurfaceData dest,
 109                              int x1, int y1, int w, int h)
 110         {
 111             tracePrimitive(target);
 112             target.DrawRect(sg2d, dest, x1, y1, w, h);
 113         }
 114     }
 115 }