*/
public static Font getFont(final String name, final int size, final int style,
final boolean strikeout, final boolean underline) {
final String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|'
+ underline;
Font font = m_fontMap.get(fontName);
if (font == null) {
final FontData fontData = new FontData(name, size, style);
if (strikeout || underline) {
try {
final Class<?> logFontClass = Class
.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
final Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
if (logFont != null && logFontClass != null) {
if (strikeout) {
logFontClass
.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
}
if (underline) {
logFontClass
.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
}
}
} catch (final Throwable e) {
System.err
.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$
}
}
font = new Font(Display.getCurrent(), fontData);
m_fontMap.put(fontName, font);
}
return font;
}