1 /* 2 * Copyright 2002 - 2007 JEuclid, http://jeuclid.sf.net 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* $Id: LayoutInfo.java,v 686a662dbcbe 2009/01/28 09:11:26 maxberger $ */ 18 19 package net.sourceforge.jeuclid.layout; 20 21 import java.util.List; 22 23 /** 24 * Represented Information about a layouted object. 25 * <p> 26 * 27 * The completeness of this information depends on the objects 28 * {@link LayoutStage}. 29 * <p> 30 * Each object is described with: 31 * <ul> 32 * <li>Origin: {@link #getPosX(LayoutStage)}, {@link #getPosY(LayoutStage)}) 33 * <li>Horizontal Size: {@link #getWidth(LayoutStage)}) 34 * <li>Vertical Size: {@link #getAscentHeight(LayoutStage)}, 35 * {@link #getDescentHeight(LayoutStage)} 36 * </ul> 37 * <p> 38 * Coordinates are given relative to the baseline. If the object has no 39 * descent, this means the origin of the object is the lower left corner. 40 * <p> 41 * The actual Graphical representation can be retrieved with 42 * {@link #getGraphicObjects()}. 43 * <p> 44 * The stretch information ( {@link #getStretchAscent()}, 45 * {@link #getStretchDescent()}, {@link #getStretchWidth()}) is set during the 46 * parents layout and defines the size to which stretchable operators are 47 * scaled to. 48 * 49 * @version $Revision: 686a662dbcbe $ 50 */ 51 public interface LayoutInfo { 52 53 /** 54 * The {@link LayoutStage} this element represents. The information will 55 * not be complete until the final LayoutStage ({@link LayoutStage#STAGE2} 56 * ) has been reached. 57 * 58 * @return current layout stage. 59 */ 60 LayoutStage getLayoutStage(); 61 62 /** 63 * @param newStage 64 * new Layout Stage. 65 */ 66 void setLayoutStage(LayoutStage newStage); 67 68 /** 69 * Returns the current height of the upper part of this component from the 70 * baseline. 71 * 72 * @return Height of the upper part 73 * @param stage 74 * {@link LayoutStage} to get this information for (either 75 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 76 */ 77 float getAscentHeight(LayoutStage stage); 78 79 /** 80 * Returns the current height of the lower part of this component from the 81 * baseline. 82 * 83 * @return Height of the lower part. 84 * @param stage 85 * {@link LayoutStage} to get this information for (either 86 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 87 */ 88 float getDescentHeight(LayoutStage stage); 89 90 /** 91 * Returns the current width of this element. 92 * 93 * @return Width of this element. 94 * @param stage 95 * {@link LayoutStage} to get this information for (either 96 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 97 */ 98 float getWidth(LayoutStage stage); 99 100 /** 101 * Retrieve the X-position of the horizontal center of the content. In 102 * most cases, this will be width / 2. This does not, however, take extra 103 * borders into account. An element may have different border width on 104 * left and right, in which case the center will be moved. 105 * 106 * @return X-position of the center of the content 107 * @param stage 108 * {@link LayoutStage} to get this information for (either 109 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 110 */ 111 float getHorizontalCenterOffset(LayoutStage stage); 112 113 /** 114 * @param newOffset 115 * new horizontal offset. 116 * @param stage 117 * {@link LayoutStage} to get this information for (either 118 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 119 */ 120 void setHorizontalCenterOffset(float newOffset, LayoutStage stage); 121 122 /** 123 * Retrieve the X position of this element relative to its parent. 124 * 125 * @return X position 126 * @param stage 127 * {@link LayoutStage} to get this information for (either 128 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 129 */ 130 float getPosX(LayoutStage stage); 131 132 /** 133 * Retrieve the Y position of this element relative to its parent. 134 * 135 * @return Y position 136 * @param stage 137 * {@link LayoutStage} to get this information for (either 138 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 139 */ 140 float getPosY(LayoutStage stage); 141 142 /** 143 * Move this element to the given position relative to its parent. 144 * 145 * @param x 146 * new X position 147 * @param y 148 * new Y position 149 * @param stage 150 * {@link LayoutStage} to get this information for (either 151 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 152 */ 153 void moveTo(float x, float y, LayoutStage stage); 154 155 /** 156 * Shift vertically by given offset. 157 * 158 * @param offsetY 159 * offset to shift. 160 * @param stage 161 * Stage to manipulate. 162 */ 163 void shiftVertically(float offsetY, LayoutStage stage); 164 165 /** 166 * @param ascentHeight 167 * new ascentHeight. 168 * @param stage 169 * {@link LayoutStage} to get this information for (either 170 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 171 */ 172 void setAscentHeight(float ascentHeight, LayoutStage stage); 173 174 /** 175 * @param descentHeight 176 * new descentHeight. 177 * @param stage 178 * {@link LayoutStage} to get this information for (either 179 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 180 */ 181 void setDescentHeight(float descentHeight, LayoutStage stage); 182 183 /** 184 * @param width 185 * new width. 186 * @param stage 187 * {@link LayoutStage} to get this information for (either 188 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2}) 189 */ 190 void setWidth(float width, LayoutStage stage); 191 192 /** 193 * Set the stretch width for children, or < 0 if children should be 194 * horizontally unstretched. 195 * 196 * @param stretchWidth 197 * new stretch width 198 */ 199 void setStretchWidth(float stretchWidth); 200 201 /** 202 * Retrieve the stretch width if set, or STAGE1.width if unset. 203 * 204 * @return stretch width. 205 */ 206 float getStretchWidth(); 207 208 /** 209 * Set the stretch descent for children. Defaults to STAGE1.descent 210 * 211 * @param stretchDescent 212 * new stretch descent 213 */ 214 void setStretchDescent(float stretchDescent); 215 216 /** 217 * Retrieve the stretch descent if set, or STAGE1.descent if unset. 218 * 219 * @return stretch descent. 220 */ 221 float getStretchDescent(); 222 223 /** 224 * Set the stretch ascent for children. Defaults to STAGE1.ascent 225 * 226 * @param stretchAscent 227 * new stretch ascent 228 */ 229 void setStretchAscent(float stretchAscent); 230 231 /** 232 * Retrieve the stretch ascent if set, or STAGE1.ascent if unset. 233 * 234 * @return stretch ascent. 235 */ 236 float getStretchAscent(); 237 238 /** 239 * @param graphicsObject 240 * the GraphicsObject to set. 241 */ 242 void setGraphicsObject(GraphicsObject graphicsObject); 243 244 /** 245 * @return Graphic objects associated with this node. 246 */ 247 List<GraphicsObject> getGraphicObjects(); 248 }