blob: 1f905a423e0703b23eba8136a5a58d88c08aa10f [file] [log] [blame]
/*******************************************************************************
* 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;
}
}