/******************************************************************************* * Copyright (c) 2000, 2010, 2012 IBM Corporation, Gerhardt Informatics Kft. 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 * Gerhardt Informatics Kft. - GEFGWT port *******************************************************************************/ package org.eclipse.draw2d.text; /** * A Geometric object for representing a TextFragment region on a line of Text. */ public class TextFragmentBox extends ContentBox { /** * The fragment's length in characters. */ public int length; /** * The character offset at which this fragment begins. */ public int offset; private TextFlow textflow; private boolean truncated; /** * Creates a new TextFragmentBox for the given text flow. * * @param textflow * the text flow */ public TextFragmentBox(TextFlow textflow) { this.textflow = textflow; } /** * @see org.eclipse.draw2d.text.FlowBox#containsPoint(int, int) */ public boolean containsPoint(int x, int y) { return x >= getX() && x < getX() + getWidth() && y >= getBaseline() - getAscentWithBorder() && y <= getBaseline() + getDescentWithBorder(); } /** * Returns the textflow's font's ascent. The ascent is the same for all * fragments in a given TextFlow. * * @return the ascent */ public int getAscent() { return textflow.getAscent(); } int getAscentWithBorder() { return textflow.getAscent() + FlowUtilities.getBorderAscent(textflow); } /** * Returns the textflow's font's descent. The descent is the same for all * fragments in a given TextFlow. * * @return the descent */ public int getDescent() { return textflow.getDescent(); } int getDescentWithBorder() { return textflow.getDescent() + FlowUtilities.getBorderDescent(textflow); } int getOuterAscent() { return textflow.getAscent() + FlowUtilities.getBorderAscentWithMargin(textflow); } int getOuterDescent() { return textflow.getDescent() + FlowUtilities.getBorderDescentWithMargin(textflow); } final int getTextTop() { return getBaseline() - getAscent(); } /** * Returns <code>true</code> if the bidi level is odd. Right to left * fragments should be queried and rendered with the RLO control character * inserted in front. * * @return <code>true</code> if right-to-left * @since 3.1 */ public boolean isRightToLeft() { // -1 % 2 == -1 return getBidiLevel() % 2 == 1; } /** * Returns <code>true</code> if the fragment should be rendered as * truncated. * * @return <code>true</code> if the fragment is truncated * @since 3.1 */ public boolean isTruncated() { return truncated; } /** * Marks the fragment as having been truncated. * * @param value * <code>true</code> if the fragment is truncated * @since 3.1 */ public void setTruncated(boolean value) { this.truncated = value; } /** * @see java.lang.Object#toString() */ public String toString() { return "[" + offset + ", " + (offset + length) //$NON-NLS-1$ //$NON-NLS-2$ + ") = \"" + textflow.getText().substring(offset, offset + length) + '\"'; //$NON-NLS-1$ } }