connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/mylyn/CommonFonts.java
author dadubrow
Fri, 12 Mar 2010 14:47:52 -0600
changeset 1104 e84724c7f393
permissions -rw-r--r--
copy in required mylyn code
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1104
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     1
/*******************************************************************************
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     2
 * Copyright (c) 2004, 2008 Tasktop Technologies and others.
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     3
 * All rights reserved. This program and the accompanying materials
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     4
 * are made available under the terms of the Eclipse Public License v1.0
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     5
 * which accompanies this distribution, and is available at
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     6
 * http://www.eclipse.org/legal/epl-v10.html
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     7
 *
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     8
 * Contributors:
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     9
 *     Tasktop Technologies - initial API and implementation
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    10
 *******************************************************************************/
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    11
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    12
package com.nokia.carbide.remoteconnections.internal.ui.mylyn;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    13
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    14
import java.lang.reflect.Field;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    15
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    16
import org.eclipse.jface.resource.FontRegistry;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    17
import org.eclipse.jface.resource.JFaceResources;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    18
import org.eclipse.swt.SWT;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    19
import org.eclipse.swt.graphics.Font;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    20
import org.eclipse.swt.graphics.FontData;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    21
import org.eclipse.swt.widgets.Display;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    22
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    23
/**
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    24
 * @author Mik Kersten
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    25
 * @since 3.0
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    26
 */
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    27
public class CommonFonts {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    28
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    29
	public static Font BOLD;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    30
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    31
	public static Font ITALIC;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    32
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    33
	public static Font BOLD_ITALIC;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    34
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    35
	public static Font STRIKETHROUGH = null;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    36
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    37
	public static boolean HAS_STRIKETHROUGH;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    38
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    39
	static {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    40
		if (Display.getCurrent() != null) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    41
			init();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    42
		} else {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    43
			Display.getDefault().asyncExec(new Runnable() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    44
				public void run() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    45
					init();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    46
				}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    47
			});
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    48
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    49
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    50
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    51
	private static void init() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    52
		BOLD = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    53
		ITALIC = JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    54
		BOLD_ITALIC = new Font(Display.getCurrent(), getModifiedFontData(ITALIC.getFontData(), SWT.BOLD | SWT.ITALIC));
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    55
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    56
		Font defaultFont = JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    57
		FontData[] defaultData = defaultFont.getFontData();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    58
		if (defaultData != null && defaultData.length == 1) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    59
			FontData data = new FontData(defaultData[0].getName(), defaultData[0].getHeight(),
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    60
					defaultData[0].getStyle());
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    61
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    62
			if ("win32".equals(SWT.getPlatform())) { //$NON-NLS-1$
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    63
				// NOTE: Windows only, for: data.data.lfStrikeOut = 1;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    64
				try {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    65
					Field dataField = data.getClass().getDeclaredField("data"); //$NON-NLS-1$
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    66
					Object dataObject = dataField.get(data);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    67
					Class<?> clazz = dataObject.getClass().getSuperclass();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    68
					Field strikeOutFiled = clazz.getDeclaredField("lfStrikeOut"); //$NON-NLS-1$
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    69
					strikeOutFiled.set(dataObject, (byte) 1);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    70
					CommonFonts.STRIKETHROUGH = new Font(Display.getCurrent(), data);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    71
				} catch (Throwable t) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    72
					// ignore
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    73
				}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    74
			}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    75
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    76
		if (CommonFonts.STRIKETHROUGH == null) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    77
			CommonFonts.HAS_STRIKETHROUGH = false;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    78
			CommonFonts.STRIKETHROUGH = defaultFont;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    79
		} else {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    80
			CommonFonts.HAS_STRIKETHROUGH = true;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    81
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    82
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    83
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    84
	/**
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    85
	 * NOTE: disposal of JFaceResources fonts handled by registry.
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    86
	 */
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    87
	public static void dispose() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    88
		if (CommonFonts.STRIKETHROUGH != null && !CommonFonts.STRIKETHROUGH.isDisposed()) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    89
			CommonFonts.STRIKETHROUGH.dispose();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    90
			CommonFonts.BOLD_ITALIC.dispose();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    91
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    92
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    93
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    94
	/**
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    95
	 * Copied from {@link FontRegistry}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    96
	 */
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    97
	private static FontData[] getModifiedFontData(FontData[] baseData, int style) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    98
		FontData[] styleData = new FontData[baseData.length];
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    99
		for (int i = 0; i < styleData.length; i++) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   100
			FontData base = baseData[i];
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   101
			styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | style);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   102
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   103
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   104
		return styleData;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   105
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   106
}