/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.draw2d.text; /** * A Geometric object for representing a region on a line of Text. This class adds the * notion of a baseline to {@link org.eclipse.draw2d.geometry.Rectangle}. <i>Ascent</i> is * the distance above the baseline. <i>Descent</i> is the distance below the baseline. * <P> * This class should not be treated as a <code>Rectangle</code> by clients. It is * important to use getters when available for lazy calculation of values. * * @author hudsonr * @since 2.1 */ public abstract class FlowBox { int width; /** * The x location */ private int x; /** * This method must be called on a block that is completely positioned and committed. * @param x X * @param y Y * @return <code>true</code> if the FlowBox contains the point */ public abstract boolean containsPoint(int x, int y); /** * Returns the amount of line content in pixels which is above the baseline. Ascent and * descent are used to space consecutive lines apart. Certain types of line content, such * as borders, extend beyond the ascent and descent. * @return the <i>descent</i> in pixels below the baseline */ public abstract int getAscent(); /** * Returns y coordinate for the box's baseline. * @return the baseline location * @since 3.1 */ public abstract int getBaseline(); /** * Returns the amount of line content in pixels which is below the baseline. * @return the <i>descent</i> in pixels * @see #getAscent() */ public abstract int getDescent(); /** * Returns the root LineBox in which this box is placed. The root line is interesting * when painting selection or hit testing. All boxes in a line should render selection at * the same top and bottom location. * @return the line root. * @since 3.1 */ abstract LineRoot getLineRoot(); /** * Returns the outer ascent of this box. The outer ascent is the ascent above the * baseline including the border size and margin. This is used when adding content into a * LineBox. The linebox's own border must be drawn around the children. */ int getOuterAscent() { return getAscent(); } /** * Returns the outer descent of this box. The outer descent is the space below the * baseline including the border size and margin. This is used when adding content into a * LineBox. The linebox's own border must be drawn around the children. */ int getOuterDescent() { return getDescent(); } int getAscentWithBorder() { throw new RuntimeException("Not valid on this box type"); //$NON-NLS-1$ } int getDescentWithBorder() { throw new RuntimeException("Not valid on this box type"); //$NON-NLS-1$ } /** * Returns the width of the box. * @return the box's width */ public int getWidth() { return width; } /** * Returns the X coordinate of the box. * @return the x coordinate * @since 3.1 */ public int getX() { return x; } /** * Returns <code>true</code> if any of the children are bi-directional. Default * implementation returns false. * * @return <code>true</code> if the box is bi-directional * @since 3.1 */ public boolean requiresBidi() { return false; } /** * Sets the line root. * @param root the line root * @since 3.1 */ void setLineRoot(LineRoot root) { } /** * Sets the width of the box. * @param width the new width * @since 3.1 */ public void setWidth(int width) { this.width = width; } /** * Sets the x coordinate for this box. * @param x the x coordinate * @since 3.1 */ public void setX(int x) { this.x = x; } }