View Javadoc
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   *   FillRect
41   *   1) draw solid color 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 FillRect extends GraphicsPrimitive
46  {
47      public final static String methodSignature = "FillRect(...)".toString();
48  
49      public final static int primTypeID = makePrimTypeID();
50  
51      public static FillRect locate(SurfaceType srctype,
52                                    CompositeType comptype,
53                                    SurfaceType dsttype)
54      {
55          return (FillRect)
56              GraphicsPrimitiveMgr.locate(primTypeID,
57                                          srctype, comptype, dsttype);
58      }
59  
60      protected FillRect(SurfaceType srctype,
61                         CompositeType comptype,
62                         SurfaceType dsttype)
63      {
64          super(methodSignature, primTypeID, srctype, comptype, dsttype);
65      }
66  
67      public FillRect(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 FillRect implementors must have this invoker method
77       */
78      public native void FillRect(SunGraphics2D sg2d, SurfaceData dest,
79                                  int x, int y, int w, int h);
80  
81      static {
82          GraphicsPrimitiveMgr.registerGeneral(new FillRect(null, null, null));
83      }
84  
85      public GraphicsPrimitive makePrimitive(SurfaceType srctype,
86                                             CompositeType comptype,
87                                             SurfaceType dsttype)
88      {
89          return new General(srctype, comptype, dsttype);
90      }
91  
92      public static class General extends FillRect {
93          public MaskFill fillop;
94  
95          public General(SurfaceType srctype,
96                         CompositeType comptype,
97                         SurfaceType dsttype)
98          {
99              super(srctype, comptype, dsttype);
100             fillop = MaskFill.locate(srctype, comptype, dsttype);
101         }
102 
103         public void FillRect(SunGraphics2D sg2d, SurfaceData dest,
104                              int x, int y, int w, int h)
105         {
106             fillop.MaskFill(sg2d, dest, sg2d.composite, x, y, w, h, null, 0, 0);
107         }
108     }
109 
110     public GraphicsPrimitive traceWrap() {
111         return new TraceFillRect(this);
112     }
113 
114     private static class TraceFillRect extends FillRect {
115         FillRect target;
116 
117         public TraceFillRect(FillRect target) {
118             super(target.getSourceType(),
119                   target.getCompositeType(),
120                   target.getDestType());
121             this.target = target;
122         }
123 
124         public GraphicsPrimitive traceWrap() {
125             return this;
126         }
127 
128         public void FillRect(SunGraphics2D sg2d, SurfaceData dest,
129                              int x, int y, int w, int h)
130         {
131             tracePrimitive(target);
132             target.FillRect(sg2d, dest, x, y, w, h);
133         }
134     }
135 }