blueprintengine.java
来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,139 行 · 第 1/3 页
JAVA
1,139 行
/* * @(#)BlueprintEngine.java 1.23 03/12/19 * * Copyright 2004 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.awt.image.*;import java.security.AccessController;import java.util.*;import javax.swing.*;import javax.swing.plaf.ComponentUI;import javax.swing.plaf.synth.*;import sun.security.action.GetPropertyAction;import sun.swing.plaf.synth.SynthUI;/** * GTKEngine implementation that renders using images. The images to render * are dictated by the <code>BlueprintStyle.Info</code>. * * @version 1.23 12/19/03 * @author Joshua Outwater */class BlueprintEngine extends GTKEngine implements GTKConstants { /** * By default we don't use smooth scaling as it is currently not optimized. */ private static final Object RENDERING_HINT; private int COMPONENT_NORTH_WEST = 1; private int COMPONENT_NORTH = 2; private int COMPONENT_NORTH_EAST = 4; private int COMPONENT_WEST = 8; private int COMPONENT_CENTER = 16; private int COMPONENT_EAST = 32; private int COMPONENT_SOUTH_EAST = 64; private int COMPONENT_SOUTH = 128; private int COMPONENT_SOUTH_WEST = 256; private int COMPONENT_ALL = 512; private int _clipX1; private int _clipX2; private int _clipY1; private int _clipY2; static { if ("true".equals((String)AccessController.doPrivileged( new GetPropertyAction("swing.pixmap.smoothScaling")))) { RENDERING_HINT = RenderingHints.VALUE_INTERPOLATION_BILINEAR; } else { RENDERING_HINT = null; } } public void paintSlider(SynthContext context, Graphics g, int state, int shadowType, String info, int x, int y, int w, int h, int orientation) { if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)context.getStyle()). getInfo("SLIDER", info, state, shadowType, orientation, UNDEFINED, UNDEFINED, null))) { super.paintSlider(context, g, state, shadowType, info, x, y, w, h, orientation); } } public void paintHline(SynthContext context, Graphics g, int state, String info, int x, int y, int w, int h) { SynthStyle style = context.getStyle(); Component c = context.getComponent(); // We have a different style to use if we are the child of // a popup menu. c = c.getParent(); if (c instanceof JPopupMenu) { SynthStyle newStyle = getStyle((JPopupMenu)c, ((JPopupMenu)c).getUI()); if (newStyle != null) { style = newStyle; } } BlueprintStyle.Info blueprintInfo = ((BlueprintStyle)style).getInfo("HLINE", info, state, UNDEFINED, GTKConstants.HORIZONTAL, UNDEFINED, UNDEFINED, null); if (blueprintInfo != null && blueprintInfo.getImage() != null) { themeBlueprintRender(context, g, x, y, w, h, blueprintInfo.getImage(), blueprintInfo.getImageInsets(), COMPONENT_ALL, blueprintInfo.getStretch(), false, blueprintInfo.isBkgMask(), blueprintInfo.isRecolorable(), blueprintInfo.getColorizeColor()); } else { super.paintHline(context, g, state, info, x, y, w, h); } } public void paintVline(SynthContext context, Graphics g, int state, String info, int x, int y, int w, int h) { BlueprintStyle.Info blueprintInfo = ((BlueprintStyle)context.getStyle()).getInfo("VLINE", info, state, UNDEFINED, GTKConstants.VERTICAL, UNDEFINED, UNDEFINED, null); if (blueprintInfo != null && blueprintInfo.getImage() != null) { themeBlueprintRender(context, g, x, y, w, h, blueprintInfo.getImage(), blueprintInfo.getImageInsets(), COMPONENT_ALL, blueprintInfo.getStretch(), false, blueprintInfo.isBkgMask(), blueprintInfo.isRecolorable(), blueprintInfo.getColorizeColor()); } else { super.paintVline(context, g, state, info, x, y, w, h); } } public void paintArrow(SynthContext context, Graphics g, int state, int shadowType, int direction, String info, int x, int y, int w, int h) { Component c = context.getComponent(); // Don't paint the arrow if we're in a spinner or combo box. // We get that from the image. if (c.getName() == "Spinner.nextButton" || c.getName() == "Spinner.previousButton" || c.getName() == "ComboBox.arrowButton") { return; } String parentType = null; c = c.getParent(); if (c != null && c instanceof JComponent) { c = c.getParent(); if (c != null && c instanceof JComponent) { parentType = getComponentType((JComponent)c); } } if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)context.getStyle()). getInfo("ARROW", info, state, shadowType, UNDEFINED, UNDEFINED, direction, parentType))) { super.paintArrow(context, g, state, shadowType, direction, info, x, y, w, h); } } public void paintBox(SynthContext context, Graphics g, int state, int shadowType, String info, int x, int y, int w, int h) { int orientation; Region id = context.getRegion(); Component c = context.getComponent(); SynthStyle style = context.getStyle(); // Blueprint checks to make sure that we aren't calling // paintBox on a slider/scrollbar with detail hscrollbar or // vscrollbar, because they do the work in paintArrow instead. // We do it here because we have the correct bounds for the whole // button. Integer arrowDirection = (Integer)((JComponent)c).getClientProperty("__arrow_direction__"); if (info == "vscrollbar" || info == "hscrollbar" && arrowDirection != null) { int direction = arrowDirection.intValue(); switch (direction) { case SwingConstants.NORTH: direction = GTKConstants.ARROW_UP; break; case SwingConstants.SOUTH: direction = GTKConstants.ARROW_DOWN; break; case SwingConstants.EAST: direction = GTKConstants.ARROW_RIGHT; break; case SwingConstants.WEST: direction = GTKConstants.ARROW_LEFT; break; } c = (JComponent)c.getParent(); if (c == null || !(c instanceof JComponent)) { return; } if (c instanceof JScrollBar) { SynthStyle newStyle = getStyle((JScrollBar)c, ((JScrollBar)c).getUI()); if (newStyle != null) { style = newStyle; } if (paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)style).getInfo("STEPPER", info, state, UNDEFINED, UNDEFINED, UNDEFINED, direction, null))) { return; } if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)style).getInfo("BOX", info, state, shadowType, UNDEFINED, UNDEFINED, UNDEFINED, null))) { super.paintBox(context, g, state, shadowType, info, x, y, w, h); } return; } } // If the button is in a spinner get the style of the JSpinner. if (c.getName() == "Spinner.nextButton" || c.getName() == "Spinner.previousButton" && arrowDirection != null) { if (arrowDirection.intValue() == SwingConstants.NORTH) { info = "spinbutton_up"; } else { info = "spinbutton_down"; } c = c.getParent(); if (c instanceof JSpinner) { SynthStyle newStyle = getStyle((JSpinner)c, ((JSpinner)c).getUI()); if (newStyle != null) { style = newStyle; } } } if (id == Region.SCROLL_BAR) { if (((JScrollBar)c).getOrientation() == SwingConstants.HORIZONTAL) { orientation = GTKConstants.HORIZONTAL; } else { orientation = GTKConstants.VERTICAL; } } else if (id == Region.SLIDER_TRACK) { if (((JSlider)c).getOrientation() == SwingConstants.HORIZONTAL) { orientation = GTKConstants.HORIZONTAL; } else { orientation = GTKConstants.VERTICAL; } } else { orientation = UNDEFINED; } String parentType = null; if (c != null) { c = c.getParent(); if (c != null && c instanceof JComponent) { parentType = getComponentType((JComponent)c); } } if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)style).getInfo("BOX", info, state, shadowType, orientation, UNDEFINED, UNDEFINED, parentType))) { super.paintBox(context, g, state, shadowType, info, x, y, w, h); } } public void paintBoxGap(SynthContext context, Graphics g, int state, int shadow, String key, int x, int y, int w, int h, int gapSide, int gapStart, int gapSize) { BlueprintStyle.Info info = ((BlueprintStyle)context.getStyle()).getInfo( "BOX_GAP", key, state, shadow, UNDEFINED, gapSide, UNDEFINED, null); if (info != null) { paintGapImage(context, info, g, x, y, w, h, true, gapSide, gapStart, gapSize); } else { super.paintBoxGap(context, g, state, shadow, key, x, y, w, h, gapSide, gapStart, gapSize); } } public void paintHandle(SynthContext context, Graphics g, int paintState, int shadowType, String info, int x, int y, int w, int h, int orientation) { if (info == "handlebox" || info == "dockitem") { w -=2; h -=1; } if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)context.getStyle()). getInfo("HANDLE", info, paintState, shadowType, orientation, UNDEFINED, UNDEFINED, null))) { super.paintHandle(context, g, paintState, shadowType, info, x, y, w, h, orientation); } } public void paintOption(SynthContext context, Graphics g, int paintState, int shadowType, String info, int x, int y, int w, int h) { if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)context.getStyle()). getInfo("OPTION", info, paintState, shadowType, UNDEFINED, UNDEFINED, UNDEFINED, null))) { super.paintOption(context, g, paintState, shadowType, info, x, y, w, h); } } public void paintFocus(SynthContext context, Graphics g, int state, String key, int x, int y, int w, int h) { if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)context.getStyle()). getInfo("FOCUS", key, state, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, null))) { super.paintFocus(context, g, state, key, x, y, w, h); } } public void paintShadow(SynthContext context, Graphics g, int state, int shadowType, String info, int x, int y, int w, int h) { Component c = context.getComponent(); String parentType = null; SynthStyle style = context.getStyle(); if (c.getName() == "ComboBox.textField") { parentType = "GtkCombo"; } else if (c.getName() == "ComboBox.renderer") { c = c.getParent(); if (c != null) { c = c.getParent(); parentType = "GtkCombo"; } } if (c instanceof JComboBox) { // Use the Style from the editor JComboBox cb = (JComboBox)c; Component editor = cb.getEditor().getEditorComponent(); if (editor instanceof JTextField) { if (!cb.isEditable() && editor.getParent() == null) { // GTKStyleFactory hands back a bogus Style when a // Component doesn't have a parent. As the editor // is only parented when the JComboBox is editable it // means we can get back a bogus style. To force the // real style to be assigned we parent the editor. // YES, this is ugly! cb.add(editor); cb.remove(editor); } SynthStyle newStyle = getStyle((JTextField)editor, ((JTextField)editor).getUI()); if (newStyle != null) { style = newStyle; } } } if (info == "menu" && parentType == "GtkHBox") { return; } if (!paintSimpleImage(context, g, x, y, w, h, true, ((BlueprintStyle)style).getInfo("SHADOW", info, state, shadowType, UNDEFINED, UNDEFINED, UNDEFINED, parentType))) { super.paintShadow(context, g, state, shadowType, info, x, y, w, h); } } public void paintExpander(SynthContext context, Graphics g, int state, int expanderStyle, String info, int x, int y, int w, int h) { // It does not appear that there is a way to override this.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?