⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swtutils.java

📁 jfreechart-1.0.12 开发包和文档等
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* =========================================================== * JFreeChart : a free chart library for the Java(tm) platform * =========================================================== * * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors. * * Project Info:  http://www.jfree.org/jfreechart/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ------------- * SWTUtils.java * ------------- * (C) Copyright 2006, 2007, by Henry Proudhon and Contributors. * * Original Author:  Henry Proudhon (henry.proudhon AT ensmp.fr); * Contributor(s):   Rainer Blessing; *                   David Gilbert (david.gilbert@object-refinery.com); *                   Christoph Beck. * * Changes * ------- * 01-Aug-2006 : New class (HP); * 16-Jan-2007 : Use FontData.getHeight() instead of direct field access (RB); * 31-Jan-2007 : Moved the dummy JPanel from SWTGraphics2D.java, *               added a new convert method for mouse events (HP); * 12-Jul-2007 : Improved the mouse event conversion with buttons *               and modifiers handling, patch sent by Christoph Beck (HP); * 27-Aug-2007 : Modified toAwtMouseEvent signature (HP); * 27-Nov-2007 : Moved convertToSWT() method from SWTGraphics2D and added *               convertAWTImageToSWT() (DG); * 01-Jul-2008 : Simplify AWT/SWT font style conversions (HP); * */package org.jfree.experimental.swt;import java.awt.Graphics;import java.awt.Image;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.awt.image.DirectColorModel;import java.awt.image.IndexColorModel;import java.awt.image.WritableRaster;import javax.swing.JPanel;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Device;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.FontData;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.ImageData;import org.eclipse.swt.graphics.PaletteData;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.RGB;import org.eclipse.swt.graphics.Rectangle;/** * Utility class gathering some useful and general method. * Mainly convert forth and back graphical stuff between * awt and swt. */public class SWTUtils {    private final static String Az = "ABCpqr";    /** A dummy JPanel used to provide font metrics. */    protected static final JPanel DUMMY_PANEL = new JPanel();    /**     * Create a <code>FontData</code> object which encapsulate     * the essential data to create a swt font. The data is taken     * from the provided awt Font.     * <p>Generally speaking, given a font size, the returned swt font     * will display differently on the screen than the awt one.     * Because the SWT toolkit use native graphical resources whenever     * it is possible, this fact is platform dependent. To address     * this issue, it is possible to enforce the method to return     * a font with the same size (or at least as close as possible)     * as the awt one.     * <p>When the object is no more used, the user must explicitly     * call the dispose method on the returned font to free the     * operating system resources (the garbage collector won't do it).     *     * @param device The swt device to draw on (display or gc device).     * @param font The awt font from which to get the data.     * @param ensureSameSize A boolean used to enforce the same size     * (in pixels) between the awt font and the newly created swt font.     * @return a <code>FontData</code> object.     */    public static FontData toSwtFontData(Device device, java.awt.Font font,            boolean ensureSameSize) {        FontData fontData = new FontData();        fontData.setName(font.getFamily());        // SWT and AWT share the same style constants.        fontData.setStyle(font.getStyle());        // convert the font size (in pt for awt) to height in pixels for swt        int height = (int) Math.round(font.getSize() * 72.0                / device.getDPI().y);        fontData.setHeight(height);        // hack to ensure the newly created swt fonts will be rendered with the        // same height as the awt one        if (ensureSameSize) {            GC tmpGC = new GC(device);            Font tmpFont = new Font(device, fontData);            tmpGC.setFont(tmpFont);            if (tmpGC.textExtent(Az).x                    > DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                while (tmpGC.textExtent(Az).x                        > DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                    tmpFont.dispose();                    height--;                    fontData.setHeight(height);                    tmpFont = new Font(device, fontData);                    tmpGC.setFont(tmpFont);                }            }            else if (tmpGC.textExtent(Az).x                    < DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                while (tmpGC.textExtent(Az).x                        < DUMMY_PANEL.getFontMetrics(font).stringWidth(Az)) {                    tmpFont.dispose();                    height++;                    fontData.setHeight(height);                    tmpFont = new Font(device, fontData);                    tmpGC.setFont(tmpFont);                }            }            tmpFont.dispose();            tmpGC.dispose();        }        return fontData;    }    /**     * Create an awt font by converting as much information     * as possible from the provided swt <code>FontData</code>.     * <p>Generally speaking, given a font size, an swt font will     * display differently on the screen than the corresponding awt     * one. Because the SWT toolkit use native graphical ressources whenever     * it is possible, this fact is platform dependent. To address     * this issue, it is possible to enforce the method to return     * an awt font with the same height as the swt one.     *     * @param device The swt device being drawn on (display or gc device).     * @param fontData The swt font to convert.     * @param ensureSameSize A boolean used to enforce the same size     * (in pixels) between the swt font and the newly created awt font.     * @return An awt font converted from the provided swt font.     */    public static java.awt.Font toAwtFont(Device device, FontData fontData,            boolean ensureSameSize) {        int height = (int) Math.round(fontData.getHeight() * device.getDPI().y                / 72.0);        // hack to ensure the newly created awt fonts will be rendered with the        // same height as the swt one        if (ensureSameSize) {            GC tmpGC = new GC(device);            Font tmpFont = new Font(device, fontData);            tmpGC.setFont(tmpFont);            JPanel DUMMY_PANEL = new JPanel();            java.awt.Font tmpAwtFont = new java.awt.Font(fontData.getName(),                    fontData.getStyle(), height);            if (DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(Az)                    > tmpGC.textExtent(Az).x) {                while (DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(Az)                        > tmpGC.textExtent(Az).x) {                    height--;                    tmpAwtFont = new java.awt.Font(fontData.getName(),                            fontData.getStyle(), height);                }            }            else if (DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(Az)                    < tmpGC.textExtent(Az).x) {                while (DUMMY_PANEL.getFontMetrics(tmpAwtFont).stringWidth(Az)                        < tmpGC.textExtent(Az).x) {                    height++;                    tmpAwtFont = new java.awt.Font(fontData.getName(),                            fontData.getStyle(), height);                }            }            tmpFont.dispose();            tmpGC.dispose();        }        return new java.awt.Font(fontData.getName(), fontData.getStyle(),                height);    }    /**     * Create an awt font by converting as much information     * as possible from the provided swt <code>Font</code>.     *     * @param device The swt device to draw on (display or gc device).     * @param font The swt font to convert.     * @return An awt font converted from the provided swt font.     */    public static java.awt.Font toAwtFont(Device device, Font font) {        FontData fontData = font.getFontData()[0];        return toAwtFont(device, fontData, true);    }    /**     * Creates an awt color instance to match the rgb values     * of the specified swt color.     *     * @param color The swt color to match.     * @return an awt color abject.     */    public static java.awt.Color toAwtColor(Color color) {        return new java.awt.Color(color.getRed(), color.getGreen(),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -