package org.eclipse.swt.graphics; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved | |
*/ | |
import org.eclipse.swt.internal.win32.*; | |
/** | |
* Instances of this class provide measurement information | |
* about fonts including ascent, descent, height, leading | |
* space between rows, and average character width. | |
* <code>FontMetrics</code> are obtained from <code>GC</code>s | |
* using the <code>getFontMetrics()</code> method. | |
* | |
* @see GC#getFontMetrics | |
*/ | |
public final class FontMetrics { | |
/** | |
* a Win32 TEXTMETRIC struct | |
* (Warning: This field is platform dependent) | |
*/ | |
public TEXTMETRIC handle; | |
/** | |
* Prevents instances from being created outside the package. | |
*/ | |
FontMetrics() { | |
} | |
/** | |
* Compares the argument to the receiver, and returns true | |
* if they represent the <em>same</em> object using a class | |
* specific comparison. | |
* | |
* @param object the object to compare with this object | |
* @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise | |
* | |
* @see #hashCode | |
*/ | |
public boolean equals (Object object) { | |
if (object == this) return true; | |
if (!(object instanceof FontMetrics)) return false; | |
TEXTMETRIC metric = ((FontMetrics)object).handle; | |
return handle.tmHeight == metric.tmHeight && | |
handle.tmAscent == metric.tmAscent && | |
handle.tmDescent == metric.tmDescent && | |
handle.tmInternalLeading == metric.tmInternalLeading && | |
handle.tmExternalLeading == metric.tmExternalLeading && | |
handle.tmAveCharWidth == metric.tmAveCharWidth && | |
handle.tmMaxCharWidth == metric.tmMaxCharWidth && | |
handle.tmWeight == metric.tmWeight && | |
handle.tmOverhang == metric.tmOverhang && | |
handle.tmDigitizedAspectX == metric.tmDigitizedAspectX && | |
handle.tmDigitizedAspectY == metric.tmDigitizedAspectY && | |
// handle.tmFirstChar == metric.tmFirstChar && | |
// handle.tmLastChar == metric.tmLastChar && | |
// handle.tmDefaultChar == metric.tmDefaultChar && | |
// handle.tmBreakChar == metric.tmBreakChar && | |
handle.tmItalic == metric.tmItalic && | |
handle.tmUnderlined == metric.tmUnderlined && | |
handle.tmStruckOut == metric.tmStruckOut && | |
handle.tmPitchAndFamily == metric.tmPitchAndFamily && | |
handle.tmCharSet == metric.tmCharSet; | |
} | |
/** | |
* Returns the ascent of the font described by the receiver. A | |
* font's <em>ascent</em> is the distance from the baseline to the | |
* top of actual characters, not including any of the leading area, | |
* measured in pixels. | |
* | |
* @return the ascent of the font | |
*/ | |
public int getAscent() { | |
return handle.tmAscent - handle.tmInternalLeading; | |
} | |
/** | |
* Returns the average character width, measured in pixels, | |
* of the font described by the receiver. | |
* | |
* @return the average character width of the font | |
*/ | |
public int getAverageCharWidth() { | |
return handle.tmAveCharWidth; | |
} | |
/** | |
* Returns the descent of the font described by the receiver. A | |
* font's <em>descent</em> is the distance from the baseline to the | |
* bottom of actual characters, not including any of the leading area, | |
* measured in pixels. | |
* | |
* @return the descent of the font | |
*/ | |
public int getDescent() { | |
return handle.tmDescent; | |
} | |
/** | |
* Returns the height of the font described by the receiver, | |
* measured in pixels. A font's <em>height</em> is the sum of | |
* its ascent, descent and leading area. | |
* | |
* @return the height of the font | |
* | |
* @see #getAscent | |
* @see #getDescent | |
* @see #getLeading | |
*/ | |
public int getHeight() { | |
return handle.tmHeight; | |
} | |
/** | |
* Returns the leading area of the font described by the | |
* receiver. A font's <em>leading area</em> is the space | |
* above its ascent which may include accents or other marks. | |
* | |
* @return the leading space of the font | |
*/ | |
public int getLeading() { | |
return handle.tmInternalLeading; | |
} | |
/** | |
* Returns an integer hash code for the receiver. Any two | |
* objects which return <code>true</code> when passed to | |
* <code>equals</code> must return the same value for this | |
* method. | |
* | |
* @return the receiver's hash | |
* | |
* @see #equals | |
*/ | |
public int hashCode() { | |
return handle.tmHeight ^ handle.tmAscent ^ handle.tmDescent ^ | |
handle.tmInternalLeading ^ handle.tmExternalLeading ^ | |
handle.tmAveCharWidth ^ handle.tmMaxCharWidth ^ handle.tmWeight ^ | |
handle.tmOverhang ^ handle.tmDigitizedAspectX ^ handle.tmDigitizedAspectY ^ | |
// handle.tmFirstChar ^ handle.tmLastChar ^ handle.tmDefaultChar ^ handle.tmBreakChar ^ | |
handle.tmItalic ^ handle.tmUnderlined ^ handle.tmStruckOut ^ | |
handle.tmPitchAndFamily ^ handle.tmCharSet; | |
} | |
/** | |
* Invokes platform specific functionality to allocate a new font metrics. | |
* <p> | |
* <b>IMPORTANT:</b> This method is <em>not</em> part of the public | |
* API for <code>FontMetrics</code>. It is marked public only so that | |
* it can be shared within the packages provided by SWT. It is not | |
* available on all platforms, and should never be called from | |
* application code. | |
* </p> | |
* | |
* @param tm the <code>TEXTMETRIC</code> containing information about a font | |
* | |
* @private | |
*/ | |
public static FontMetrics win32_new(TEXTMETRIC handle) { | |
FontMetrics fontMetrics = new FontMetrics(); | |
fontMetrics.handle = handle; | |
return fontMetrics; | |
} | |
} |