| /******************************************************************************* |
| * Copyright (c) 2004, 2010 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; |
| |
| import org.eclipse.draw2d.geometry.Translatable; |
| |
| /** |
| * Stores positional information about where a caret should be placed. This |
| * structure currently only offers integer precision. Scaling operations will |
| * result in rounding. |
| * |
| * @since 3.1 |
| */ |
| public class CaretInfo implements Translatable { |
| |
| private int ascent, lineAscent, descent, lineDescent, baseline, x; |
| |
| /** |
| * Constructor for use by TextFlow. Constructs a new CaretInfo with the |
| * figure's ascent and descent and line information. |
| * <P> |
| * <EM>WARNING:</EM> This constructor should not be called by clients. It is |
| * for use by {@link TextFlow}, and may change in future releases. |
| * |
| * @param x |
| * the x location |
| * @param y |
| * the y location of the top of the caret |
| * @param ascent |
| * the ascent |
| * @param descent |
| * the descent |
| * @param lineAscent |
| * the ascent of the line on which the caret is placed |
| * @param lineDescent |
| * the descent of the line on which the caret is placed |
| */ |
| protected CaretInfo(int x, int y, int ascent, int descent, int lineAscent, |
| int lineDescent) { |
| this.x = x; |
| this.baseline = y + ascent; |
| this.ascent = ascent; |
| this.descent = descent; |
| this.lineAscent = lineAscent; |
| this.lineDescent = lineDescent; |
| } |
| |
| /** |
| * Constructs a CaretInfo object by copying the values from another |
| * instance. |
| * |
| * @param info |
| * the reference |
| * @since 3.2 |
| */ |
| protected CaretInfo(CaretInfo info) { |
| this.ascent = info.ascent; |
| this.baseline = info.baseline; |
| this.descent = info.descent; |
| this.lineAscent = info.lineAscent; |
| this.lineDescent = info.lineDescent; |
| this.x = info.x; |
| } |
| |
| /** |
| * Returns the y location of the baseline. |
| * |
| * @return the y coordinate of the baseline |
| */ |
| public int getBaseline() { |
| return baseline; |
| } |
| |
| /** |
| * Returns the total height of the caret. The height is the sum of the |
| * ascent and descent. |
| * |
| * @return the height |
| */ |
| public int getHeight() { |
| return ascent + descent; |
| } |
| |
| /** |
| * @return the total height of the line on which the caret is placed |
| */ |
| public int getLineHeight() { |
| return lineAscent + lineDescent; |
| } |
| |
| /** |
| * @return the y location of the line on which the caret is placed |
| */ |
| public int getLineY() { |
| return baseline - lineAscent; |
| } |
| |
| /** |
| * Returns the x location of the caret. |
| * |
| * @return the x coordinate |
| */ |
| public int getX() { |
| return x; |
| } |
| |
| /** |
| * Returns the y location of the caret. |
| * |
| * @return the y coordinate |
| */ |
| public int getY() { |
| return baseline - ascent; |
| } |
| |
| /** |
| * @see Translatable#performScale(double) |
| */ |
| public void performScale(double factor) { |
| x *= factor; |
| baseline *= factor; |
| descent *= factor; |
| ascent *= factor; |
| lineAscent *= factor; |
| lineDescent *= factor; |
| } |
| |
| /** |
| * @see Translatable#performTranslate(int, int) |
| */ |
| public void performTranslate(int dx, int dy) { |
| x += dx; |
| baseline += dy; |
| } |
| |
| } |