org.eclipse.swt.graphics.Font.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.swt.graphics.Font.java

Source

/*******************************************************************************
 * Copyright (c) 2002, 2015 Innoopract Informationssysteme GmbH 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:
 *    Innoopract Informationssysteme GmbH - initial API and implementation
 *    EclipseSource - ongoing development
 ******************************************************************************/
package org.eclipse.swt.graphics;

import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicationContext;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.SWTException;

/**
 * Instances of this class manage resources that define how text looks when it
 * is displayed.
 *
 * @see FontData
 * @since 1.0
 */
public class Font extends Resource {

    private final FontData internalFontData;

    // used by ResourceFactory#getFont()
    private Font(FontData fontData) {
        super(null);
        internalFontData = findFontData(fontData);
    }

    /**
     * Constructs a new font given a device and font data
     * which describes the desired font's appearance.
     * <p>
     * You must dispose the font when it is no longer required.
     * </p>
     *
     * @param device the device to create the font on
     * @param fontData the FontData that describes the desired font (must not be null)
     *
     * @exception IllegalArgumentException <ul>
     *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
     *    <li>ERROR_NULL_ARGUMENT - if the fontData argument is null</li>
     * </ul>
     * @exception SWTError <ul>
     *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
     * </ul>
     *
     * @since 1.3
     */
    public Font(Device device, FontData fontData) {
        super(checkDevice(device));
        if (fontData == null) {
            SWT.error(SWT.ERROR_NULL_ARGUMENT);
        }
        internalFontData = findFontData(fontData);
    }

    /**
     * Constructs a new font given a device and an array
     * of font data which describes the desired font's
     * appearance.
     * <p>
     * You must dispose the font when it is no longer required.
     * </p>
     *
     * @param device the device to create the font on
     * @param fontData the array of FontData that describes the desired font (must not be null)
     *
     * @exception IllegalArgumentException <ul>
     *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
     *    <li>ERROR_NULL_ARGUMENT - if the fontData argument is null</li>
     *    <li>ERROR_INVALID_ARGUMENT - if the length of fontData is zero</li>
     *    <li>ERROR_NULL_ARGUMENT - if any font data in the array is null</li>
     * </ul>
     * @exception SWTError <ul>
     *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
     * </ul>
     *
     * @since 1.3
     */
    public Font(Device device, FontData[] fontData) {
        super(checkDevice(device));
        if (fontData == null) {
            SWT.error(SWT.ERROR_NULL_ARGUMENT);
        }
        if (fontData.length == 0) {
            SWT.error(SWT.ERROR_INVALID_ARGUMENT);
        }
        for (int i = 0; i < fontData.length; i++) {
            if (fontData[i] == null) {
                SWT.error(SWT.ERROR_INVALID_ARGUMENT);
            }
        }
        internalFontData = findFontData(fontData[0]);
    }

    /**
     * Constructs a new font given a device, a font name,
     * the height of the desired font in points, and a font
     * style.
     * <p>
     * You must dispose the font when it is no longer required.
     * </p>
     *
     * @param device the device to create the font on
     * @param name the name of the font (must not be null)
     * @param height the font height in points
     * @param style a bit or combination of NORMAL, BOLD, ITALIC
     *
     * @exception IllegalArgumentException <ul>
     *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
     *    <li>ERROR_NULL_ARGUMENT - if the name argument is null</li>
     *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
     * </ul>
     * @exception SWTError <ul>
     *    <li>ERROR_NO_HANDLES - if a font could not be created from the given arguments</li>
     * </ul>
     */
    public Font(Device device, String name, int height, int style) {
        super(checkDevice(device));
        if (name == null) {
            SWT.error(SWT.ERROR_NULL_ARGUMENT);
        }
        if (height < 0) {
            SWT.error(SWT.ERROR_INVALID_ARGUMENT);
        }
        FontData fontData = new FontData(name, height, style);
        internalFontData = findFontData(fontData);
    }

    /**
     * Returns an array of <code>FontData</code>s representing the receiver.
     * <!--
     * On Windows, only one FontData will be returned per font. On X however,
     * a <code>Font</code> object <em>may</em> be composed of multiple X
     * fonts. To support this case, we return an array of font data objects.
     * -->
     *
     * @return an array of font data objects describing the receiver
     *
     * @exception SWTException <ul>
     *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
     * </ul>
     */
    public FontData[] getFontData() {
        if (isDisposed()) {
            SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
        }
        FontData fontData = new FontData(internalFontData.getName(), internalFontData.getHeight(),
                internalFontData.getStyle());
        return new FontData[] { fontData };
    }

    @Override
    public boolean equals(Object object) {
        boolean result;
        if (object == this) {
            result = true;
        } else if (object instanceof Font) {
            Font font = (Font) object;
            result = font.internalFontData.equals(internalFontData);
        } else {
            result = false;
        }
        return result;
    }

    @Override
    public int hashCode() {
        return internalFontData.hashCode() * 7;
    }

    /**
     * Returns a string containing a concise, human-readable
     * description of the receiver.
     *
     * @return a string representation of the receiver
     */
    @Override
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append("Font {");
        buffer.append(internalFontData.getName());
        buffer.append(",");
        buffer.append(internalFontData.getHeight());
        buffer.append(",");
        int style = internalFontData.getStyle();
        String styleName;
        if ((style & SWT.BOLD) != 0 && (style & SWT.ITALIC) != 0) {
            styleName = "BOLD|ITALIC";
        } else if ((style & SWT.BOLD) != 0) {
            styleName = "BOLD";
        } else if ((style & SWT.ITALIC) != 0) {
            styleName = "ITALIC";
        } else {
            styleName = "NORMAL";
        }
        buffer.append(styleName);
        buffer.append("}");
        return buffer.toString();
    }

    private static FontData findFontData(FontData fontData) {
        return getApplicationContext().getFontDataFactory().findFontData(fontData);
    }

}