gtklookandfeel.java

来自「java jdk 1.4的源码」· Java 代码 · 共 413 行 · 第 1/2 页

JAVA
413
字号
/* * @(#)GTKLookAndFeel.java	1.55 03/05/08 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;import java.awt.*;import java.io.File;import java.security.AccessController;import java.security.PrivilegedAction;import java.util.HashMap;import javax.swing.*;import javax.swing.plaf.*;import javax.swing.text.DefaultEditorKit;import java.io.IOException;/** * @version 1.55, 05/08/03 * @author Scott Violet */public class GTKLookAndFeel extends SynthLookAndFeel {    /**     * Font to use in places where there is no widget.     */    private Font fallbackFont;    /**     * Maps a swing constant to a GTK constant.     */    static int SwingOrientationConstantToGTK(int side) {        switch (side) {        case SwingConstants.LEFT:            return GTKConstants.LEFT;        case SwingConstants.RIGHT:            return GTKConstants.RIGHT;        case SwingConstants.TOP:            return GTKConstants.TOP;        case SwingConstants.BOTTOM:            return GTKConstants.BOTTOM;        }        assert false : "Unknowning orientation: " + side;        return side;    }    /**     * Maps from a Synth state to the corresponding GTK state.      * The GTK states are named differently than Synth's states, the     * following gives the mapping:     * <table><tr><td>Synth<td>GTK     * <tr><td>SynthConstants.PRESSED<td>ACTIVE     * <tr><td>SynthConstants.SELECTED<td>SELECTED     * <tr><td>SynthConstants.MOUSE_OVER<td>PRELIGHT     * <tr><td>SynthConstants.DISABLED<td>INACTIVE     * <tr><td>SynthConstants.ENABLED<td>NORMAL     * </table>     * Additionally some widgets are special cased.     */    static int synthStateToGTKState(Region region, int state) {        int orgState = state;        if ((state & SynthConstants.PRESSED) != 0) {            if (region == Region.RADIO_BUTTON                    || region == Region.CHECK_BOX                    || region == Region.TOGGLE_BUTTON                    || region == Region.MENU                    || region == Region.MENU_ITEM                    || region == Region.RADIO_BUTTON_MENU_ITEM                    || region == Region.CHECK_BOX_MENU_ITEM                    || region == Region.SPLIT_PANE) {                state = SynthConstants.MOUSE_OVER;            } else {                state = SynthConstants.PRESSED;            }        }        else if ((state & SynthConstants.SELECTED) != 0) {            if (region == Region.MENU) {                state = SynthConstants.MOUSE_OVER;            } else if (region == Region.RADIO_BUTTON ||                          region == Region.TOGGLE_BUTTON ||                          region == Region.RADIO_BUTTON_MENU_ITEM ||                          region == Region.CHECK_BOX_MENU_ITEM ||                          region == Region.CHECK_BOX ||                          region == Region.BUTTON) {                // If the button is SELECTED and is PRELIGHT we need to                // make the state MOUSE_OVER otherwise we don't paint the                // PRELIGHT.                if ((state & SynthConstants.MOUSE_OVER) != 0) {                    state = SynthConstants.MOUSE_OVER;                } else {                    state = SynthConstants.PRESSED;                }            } else if (region == Region.TABBED_PANE_TAB) {                state = SynthConstants.ENABLED;            } else {                state = SynthConstants.SELECTED;            }        }        else if ((state & SynthConstants.MOUSE_OVER) != 0) {            state = SynthConstants.MOUSE_OVER;        }        else if ((state & SynthConstants.DISABLED) != 0) {            state = SynthConstants.DISABLED;        }        else {            if (region == Region.SLIDER_TRACK) {                state = SynthConstants.PRESSED;            } else if (region == Region.TABBED_PANE_TAB) {                state = SynthConstants.PRESSED;            } else {                state = SynthConstants.ENABLED;            }        }        return state;    }    static boolean isText(Region region) {        // These Regions treat FOREGROUND as TEXT.        return (region == Region.TEXT_FIELD ||                region == Region.FORMATTED_TEXT_FIELD ||                region == Region.LIST ||                region == Region.PASSWORD_FIELD ||                region == Region.SPINNER ||                region == Region.TABLE ||                region == Region.TEXT_AREA ||                region == Region.TEXT_FIELD ||                region == Region.TEXT_PANE ||                region == Region.TREE);    }    public UIDefaults getDefaults() {        // We need to call super for basic's properties file.        UIDefaults table = super.getDefaults();	table.put("FileChooserUI", "com.sun.java.swing.plaf.gtk.GTKLookAndFeel");        table.addResourceBundle(              "com.sun.java.swing.plaf.gtk.resources.gtk" );        Object tempBorder = new GTKStyle.GTKLazyValue(            "com.sun.java.swing.plaf.gtk.GTKPainter$ListTableFocusBorder");        table.put("List.focusCellHighlightBorder", tempBorder);        table.put("Table.focusCellHighlightBorder", tempBorder);        // These exist for better backward compatability with existing apps        // that use these directly and don't check for null.        table.put("Table.gridColor", new ColorUIResource(Color.gray));        table.put("Table.selectionForeground",                  new ColorUIResource(Color.BLACK));        table.put("Table.selectionBackground", new ColorUIResource(0x000080));        table.put("control", new ColorUIResource(0xC0C0C0));        if (fallbackFont != null) {            table.put("TitledBorder.font", fallbackFont);        }        table.put("TitledBorder.titleColor", new ColorUIResource(Color.BLACK));        table.put("TitledBorder.border", new UIDefaults.ProxyLazyValue(                      "javax.swing.plaf.BorderUIResource",                      "getEtchedBorderUIResource"));        return table;    }    /**     * Creates the GTK look and feel class for the passed in Component.     */    public static ComponentUI createUI(JComponent c) {        String key = c.getUIClassID().intern();        if (key == "FileChooserUI") {            return GTKFileChooserUI.createUI(c);	}        // PENDING: this is only necessary while gtk and synth are in the        // same package.        return SynthLookAndFeel.createUI(c);    }    public void initialize() {	loadStylesFromThemeFiles();    }    public boolean isSupportedLookAndFeel() {        return true;    }    public boolean isNativeLookAndFeel() {        return false;    }    public String getDescription() {        return "GTK look and feel";    }    public String getName() {        return "GTK look and feel";    }    public String getID() {        return "GTK";    }    private void loadStylesFromThemeFiles() {        AccessController.doPrivileged(new PrivilegedAction() {            public Object run() {                GTKParser parser = new GTKParser();

⌨️ 快捷键说明

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