1 /* 2 * Copyright (c) 2007, 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 package sun.java2d.pipe; 27 28 /** 29 * The API for an object that generates alpha coverage tiles for a given 30 * path. 31 * The {@link RenderingEngine} will be consulted as a factory to return 32 * one of these objects for a given Shape and a given set of rendering 33 * attributes. 34 * This object will iterate through the bounds of the rendering primitive 35 * and return tiles of a constant size as specified by the getTileWidth() 36 * and getTileHeight() parameters. 37 * The iteration order of the tiles will be as specified by the pseudo-code: 38 * <pre> 39 * int bbox[] = {left, top, right, bottom}; 40 * AATileGenerator aatg = renderengine.getAATileGenerator(..., bbox); 41 * int tw = aatg.getTileWidth(); 42 * int th = aatg.getTileHeight(); 43 * byte tile[] = new byte[tw * th]; 44 * for (y = top; y < bottom; y += th) { 45 * for (x = left; x < right; x += tw) { 46 * int a = aatg.getTypicalAlpha(); 47 * int w = Math.min(tw, right-x); 48 * int h = Math.min(th, bottom-y); 49 * if (a == 0x00) { 50 * // can skip this tile... 51 * aatg.nextTile(); 52 * } else if (a == 0xff) { 53 * // can treat this tile like a fillRect 54 * aatg.nextTile(); 55 * doFill(x, y, w, h); 56 * } else { 57 * aatg.getAlpha(tile, 0, tw); 58 * handleAlpha(tile, x, y, w, h); 59 * } 60 * } 61 * } 62 * aatg.dispose(); 63 * </pre> 64 * The bounding box for the iteration will be returned by the 65 * {@code RenderingEngine} via an argument to the getAATileGenerator() method. 66 */ 67 public interface AATileGenerator { 68 /** 69 * Gets the width of the tiles that the generator batches output into. 70 * @return the width of the standard alpha tile 71 */ 72 public int getTileWidth(); 73 74 /** 75 * Gets the height of the tiles that the generator batches output into. 76 * @return the height of the standard alpha tile 77 */ 78 public int getTileHeight(); 79 80 /** 81 * Gets the typical alpha value that will characterize the current 82 * tile. 83 * The answer may be 0x00 to indicate that the current tile has 84 * no coverage in any of its pixels, or it may be 0xff to indicate 85 * that the current tile is completely covered by the path, or any 86 * other value to indicate non-trivial coverage cases. 87 * @return 0x00 for no coverage, 0xff for total coverage, or any other 88 * value for partial coverage of the tile 89 */ 90 public int getTypicalAlpha(); 91 92 /** 93 * Skips the current tile and moves on to the next tile. 94 * Either this method, or the getAlpha() method should be called 95 * once per tile, but not both. 96 */ 97 public void nextTile(); 98 99 /** 100 * Gets the alpha coverage values for the current tile. 101 * Either this method, or the nextTile() method should be called 102 * once per tile, but not both. 103 */ 104 public void getAlpha(byte tile[], int offset, int rowstride); 105 106 /** 107 * Disposes this tile generator. 108 * No further calls will be made on this instance. 109 */ 110 public void dispose(); 111 }