connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/mylyn/CommonFonts.java
changeset 1104 e84724c7f393
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/mylyn/CommonFonts.java	Fri Mar 12 14:47:52 2010 -0600
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Tasktop Technologies 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:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package com.nokia.carbide.remoteconnections.internal.ui.mylyn;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.jface.resource.FontRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Mik Kersten
+ * @since 3.0
+ */
+public class CommonFonts {
+
+	public static Font BOLD;
+
+	public static Font ITALIC;
+
+	public static Font BOLD_ITALIC;
+
+	public static Font STRIKETHROUGH = null;
+
+	public static boolean HAS_STRIKETHROUGH;
+
+	static {
+		if (Display.getCurrent() != null) {
+			init();
+		} else {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+					init();
+				}
+			});
+		}
+	}
+
+	private static void init() {
+		BOLD = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
+		ITALIC = JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT);
+		BOLD_ITALIC = new Font(Display.getCurrent(), getModifiedFontData(ITALIC.getFontData(), SWT.BOLD | SWT.ITALIC));
+
+		Font defaultFont = JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT);
+		FontData[] defaultData = defaultFont.getFontData();
+		if (defaultData != null && defaultData.length == 1) {
+			FontData data = new FontData(defaultData[0].getName(), defaultData[0].getHeight(),
+					defaultData[0].getStyle());
+
+			if ("win32".equals(SWT.getPlatform())) { //$NON-NLS-1$
+				// NOTE: Windows only, for: data.data.lfStrikeOut = 1;
+				try {
+					Field dataField = data.getClass().getDeclaredField("data"); //$NON-NLS-1$
+					Object dataObject = dataField.get(data);
+					Class<?> clazz = dataObject.getClass().getSuperclass();
+					Field strikeOutFiled = clazz.getDeclaredField("lfStrikeOut"); //$NON-NLS-1$
+					strikeOutFiled.set(dataObject, (byte) 1);
+					CommonFonts.STRIKETHROUGH = new Font(Display.getCurrent(), data);
+				} catch (Throwable t) {
+					// ignore
+				}
+			}
+		}
+		if (CommonFonts.STRIKETHROUGH == null) {
+			CommonFonts.HAS_STRIKETHROUGH = false;
+			CommonFonts.STRIKETHROUGH = defaultFont;
+		} else {
+			CommonFonts.HAS_STRIKETHROUGH = true;
+		}
+	}
+
+	/**
+	 * NOTE: disposal of JFaceResources fonts handled by registry.
+	 */
+	public static void dispose() {
+		if (CommonFonts.STRIKETHROUGH != null && !CommonFonts.STRIKETHROUGH.isDisposed()) {
+			CommonFonts.STRIKETHROUGH.dispose();
+			CommonFonts.BOLD_ITALIC.dispose();
+		}
+	}
+
+	/**
+	 * Copied from {@link FontRegistry}
+	 */
+	private static FontData[] getModifiedFontData(FontData[] baseData, int style) {
+		FontData[] styleData = new FontData[baseData.length];
+		for (int i = 0; i < styleData.length; i++) {
+			FontData base = baseData[i];
+			styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | style);
+		}
+
+		return styleData;
+	}
+}