| /* |
| * 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"). |
| */ |
| 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; |
| } |
| |
| /** |
| * To string. |
| * |
| * @return the string |
| */ |
| @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; |
| } |
| |
| /** |
| * Hash code. |
| * |
| * @return the int |
| */ |
| @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); |
| } |
| } |