216 lines
6.6 KiB
Java
216 lines
6.6 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/*
|
|
* @author Oleg V. Khaschansky
|
|
* @version $Revision$
|
|
*/
|
|
|
|
package java.awt.font;
|
|
|
|
import org.apache.harmony.misc.HashCode;
|
|
|
|
/**
|
|
* The TextHitInfo class provides information about a caret position in a text
|
|
* model for insertion or deletion of a character in a text. The TextHitInfo
|
|
* defines two biases of the character: leading or trailing. Leading position
|
|
* means the left edge of the specified character (TextHitInfo.leading(2) method
|
|
* for "text" returns the left side of "x"). Trailing position means the right
|
|
* edge of the specified character (TextHitInfo.trailing(2) method for "text"
|
|
* returns the right side of "x").
|
|
*
|
|
* @since Android 1.0
|
|
*/
|
|
public final class TextHitInfo {
|
|
|
|
/**
|
|
* The char idx.
|
|
*/
|
|
private int charIdx; // Represents character index in the line
|
|
|
|
/**
|
|
* The is trailing.
|
|
*/
|
|
private boolean isTrailing;
|
|
|
|
/**
|
|
* Instantiates a new text hit info.
|
|
*
|
|
* @param idx
|
|
* the idx.
|
|
* @param isTrailing
|
|
* the is trailing.
|
|
*/
|
|
private TextHitInfo(int idx, boolean isTrailing) {
|
|
charIdx = idx;
|
|
this.isTrailing = isTrailing;
|
|
}
|
|
|
|
/**
|
|
* Returns the textual string representation of this TextHitInfo instance.
|
|
*
|
|
* @return the string representation.
|
|
*/
|
|
@Override
|
|
public String toString() {
|
|
return new String("TextHitInfo[" + charIdx + ", " + //$NON-NLS-1$ //$NON-NLS-2$
|
|
(isTrailing ? "Trailing" : "Leading") + "]" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Compares this TextHitInfo object with the specified object.
|
|
*
|
|
* @param obj
|
|
* the Object to be compared.
|
|
* @return true, if the specified object is a TextHitInfo object with the
|
|
* same data values as this TextHitInfo, false otherwise.
|
|
*/
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
if (obj instanceof TextHitInfo) {
|
|
return equals((TextHitInfo)obj);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Compares this TextHitInfo object with the specified TextHitInfo object.
|
|
*
|
|
* @param thi
|
|
* the TextHitInfo object to be compared.
|
|
* @return true, if this TextHitInfo object has the same data values as the
|
|
* specified TextHitInfo object, false otherwise.
|
|
*/
|
|
public boolean equals(TextHitInfo thi) {
|
|
return thi != null && thi.charIdx == charIdx && thi.isTrailing == isTrailing;
|
|
}
|
|
|
|
/**
|
|
* Gets a TextHitInfo object with its character index at the specified
|
|
* offset from the character index of this TextHitInfo.
|
|
*
|
|
* @param offset
|
|
* the offset.
|
|
* @return the TextHitInfo.
|
|
*/
|
|
public TextHitInfo getOffsetHit(int offset) {
|
|
return new TextHitInfo(charIdx + offset, isTrailing);
|
|
}
|
|
|
|
/**
|
|
* Gets a TextHitInfo associated with the other side of the insertion point.
|
|
*
|
|
* @return the other hit.
|
|
*/
|
|
public TextHitInfo getOtherHit() {
|
|
return isTrailing ? new TextHitInfo(charIdx + 1, false)
|
|
: new TextHitInfo(charIdx - 1, true);
|
|
}
|
|
|
|
/**
|
|
* Returns true if the leading edge of the character is hit, false if the
|
|
* trailing edge of the character is hit.
|
|
*
|
|
* @return true if the leading edge of the character is hit, false if the
|
|
* trailing edge of the character is hit.
|
|
*/
|
|
public boolean isLeadingEdge() {
|
|
return !isTrailing;
|
|
}
|
|
|
|
/**
|
|
* Returns the hash code value of this TextHitInfo instance.
|
|
*
|
|
* @return the hash code value.
|
|
*/
|
|
@Override
|
|
public int hashCode() {
|
|
return HashCode.combine(charIdx, isTrailing);
|
|
}
|
|
|
|
/**
|
|
* Gets the insertion index.
|
|
*
|
|
* @return the insertion index: character index if the leading edge is hit,
|
|
* or character index + 1 if the trailing edge is hit.
|
|
*/
|
|
public int getInsertionIndex() {
|
|
return isTrailing ? charIdx + 1 : charIdx;
|
|
}
|
|
|
|
/**
|
|
* Gets the index of the character hit.
|
|
*
|
|
* @return the character hit's index.
|
|
*/
|
|
public int getCharIndex() {
|
|
return charIdx;
|
|
}
|
|
|
|
/**
|
|
* Returns a TextHitInfo associated with the trailing edge of the character
|
|
* at the specified char index.
|
|
*
|
|
* @param charIndex
|
|
* the char index.
|
|
* @return the TextHitInfo associated with the trailing edge of the
|
|
* character at the specified char index.
|
|
*/
|
|
public static TextHitInfo trailing(int charIndex) {
|
|
return new TextHitInfo(charIndex, true);
|
|
}
|
|
|
|
/**
|
|
* Returns a TextHitInfo object associated with the leading edge of the
|
|
* character at the specified char index.
|
|
*
|
|
* @param charIndex
|
|
* the char index.
|
|
* @return the TextHitInfo object associated with the leading edge of the
|
|
* character at the specified char index.
|
|
*/
|
|
public static TextHitInfo leading(int charIndex) {
|
|
return new TextHitInfo(charIndex, false);
|
|
}
|
|
|
|
/**
|
|
* Returns a (trailing) TextHitInfo object associated with the character
|
|
* before the specified offset.
|
|
*
|
|
* @param offset
|
|
* the offset.
|
|
* @return the TextHitInfo object associated with the character before the
|
|
* specified offset.
|
|
*/
|
|
public static TextHitInfo beforeOffset(int offset) {
|
|
return new TextHitInfo(offset - 1, true);
|
|
}
|
|
|
|
/**
|
|
* Returns a (leading) TextHitInfo object associated with the character
|
|
* after the specified offset.
|
|
*
|
|
* @param offset
|
|
* the offset.
|
|
* @return the TextHitInfo object associated with the character after the
|
|
* specified offset.
|
|
*/
|
|
public static TextHitInfo afterOffset(int offset) {
|
|
return new TextHitInfo(offset, false);
|
|
}
|
|
}
|