001 /*
002 * Copyright 2002 - 2007 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 /* $Id: LayoutInfo.java,v 686a662dbcbe 2009/01/28 09:11:26 maxberger $ */
018
019 package net.sourceforge.jeuclid.layout;
020
021 import java.util.List;
022
023 /**
024 * Represented Information about a layouted object.
025 * <p>
026 *
027 * The completeness of this information depends on the objects
028 * {@link LayoutStage}.
029 * <p>
030 * Each object is described with:
031 * <ul>
032 * <li>Origin: {@link #getPosX(LayoutStage)}, {@link #getPosY(LayoutStage)})
033 * <li>Horizontal Size: {@link #getWidth(LayoutStage)})
034 * <li>Vertical Size: {@link #getAscentHeight(LayoutStage)},
035 * {@link #getDescentHeight(LayoutStage)}
036 * </ul>
037 * <p>
038 * Coordinates are given relative to the baseline. If the object has no
039 * descent, this means the origin of the object is the lower left corner.
040 * <p>
041 * The actual Graphical representation can be retrieved with
042 * {@link #getGraphicObjects()}.
043 * <p>
044 * The stretch information ( {@link #getStretchAscent()},
045 * {@link #getStretchDescent()}, {@link #getStretchWidth()}) is set during the
046 * parents layout and defines the size to which stretchable operators are
047 * scaled to.
048 *
049 * @version $Revision: 686a662dbcbe $
050 */
051 public interface LayoutInfo {
052
053 /**
054 * The {@link LayoutStage} this element represents. The information will
055 * not be complete until the final LayoutStage ({@link LayoutStage#STAGE2}
056 * ) has been reached.
057 *
058 * @return current layout stage.
059 */
060 LayoutStage getLayoutStage();
061
062 /**
063 * @param newStage
064 * new Layout Stage.
065 */
066 void setLayoutStage(LayoutStage newStage);
067
068 /**
069 * Returns the current height of the upper part of this component from the
070 * baseline.
071 *
072 * @return Height of the upper part
073 * @param stage
074 * {@link LayoutStage} to get this information for (either
075 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2})
076 */
077 float getAscentHeight(LayoutStage stage);
078
079 /**
080 * Returns the current height of the lower part of this component from the
081 * baseline.
082 *
083 * @return Height of the lower part.
084 * @param stage
085 * {@link LayoutStage} to get this information for (either
086 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2})
087 */
088 float getDescentHeight(LayoutStage stage);
089
090 /**
091 * Returns the current width of this element.
092 *
093 * @return Width of this element.
094 * @param stage
095 * {@link LayoutStage} to get this information for (either
096 * {@link LayoutStage#STAGE1} or {@link LayoutStage#STAGE2})
097 */
098 float getWidth(LayoutStage stage);
099
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 }