📄 parsedsynthstyle.java
字号:
/* * @(#)ParsedSynthStyle.java 1.7 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.synth;import java.awt.Graphics;import java.util.LinkedList;import sun.swing.plaf.synth.DefaultSynthStyle;/** * ParsedSynthStyle are the SynthStyle's that SynthParser creates. * * @version 1.7, 11/17/05 * @author Scott Violet */class ParsedSynthStyle extends DefaultSynthStyle { private static SynthPainter DELEGATING_PAINTER_INSTANCE = new DelegatingPainter(); private PainterInfo[] _painters; private static PainterInfo[] mergePainterInfo(PainterInfo[] old, PainterInfo[] newPI) { if (old == null) { return newPI; } if (newPI == null) { return old; } int oldLength = old.length; int newLength = newPI.length; int dups = 0; PainterInfo[] merged = new PainterInfo[oldLength + newLength]; System.arraycopy(old, 0, merged, 0, oldLength); for (int newCounter = 0; newCounter < newLength; newCounter++) { boolean found = false; for (int oldCounter = 0; oldCounter < oldLength - dups; oldCounter++) { if (newPI[newCounter].equalsPainter(old[oldCounter])) { merged[oldCounter] = newPI[newCounter]; dups++; found = true; break; } } if (!found) { merged[oldLength + newCounter - dups] = newPI[newCounter]; } } if (dups > 0) { PainterInfo[] tmp = merged; merged = new PainterInfo[merged.length - dups]; System.arraycopy(tmp, 0, merged, 0, merged.length); } return merged; } public ParsedSynthStyle() { } public ParsedSynthStyle(DefaultSynthStyle style) { super(style); if (style instanceof ParsedSynthStyle) { ParsedSynthStyle pStyle = (ParsedSynthStyle)style; if (pStyle._painters != null) { _painters = pStyle._painters; } } } public SynthPainter getPainter(SynthContext ss) { return DELEGATING_PAINTER_INSTANCE; } public void setPainters(PainterInfo[] info) { _painters = info; } public DefaultSynthStyle addTo(DefaultSynthStyle style) { if (!(style instanceof ParsedSynthStyle)) { style = new ParsedSynthStyle(style); } ParsedSynthStyle pStyle = (ParsedSynthStyle)super.addTo(style); pStyle._painters = mergePainterInfo(pStyle._painters, _painters); return pStyle; } private SynthPainter getBestPainter(SynthContext context, String method, int direction) { // Check the state info first StateInfo info = (StateInfo)getStateInfo(context.getComponentState()); SynthPainter painter; if (info != null) { if ((painter = getBestPainter(info.getPainters(), method, direction)) != null) { return painter; } } if ((painter = getBestPainter(_painters, method, direction)) != null) { return painter; } return SynthPainter.NULL_PAINTER; } private SynthPainter getBestPainter(PainterInfo[] info, String method, int direction) { if (info != null) { // Painter specified with no method SynthPainter nullPainter = null; // Painter specified for this method SynthPainter methodPainter = null; for (int counter = info.length - 1; counter >= 0; counter--) { PainterInfo pi = info[counter]; if (pi.getMethod() == method) { if (pi.getDirection() == direction) { return pi.getPainter(); } else if (methodPainter == null &&pi.getDirection() == -1) { methodPainter = pi.getPainter(); } } else if (nullPainter == null && pi.getMethod() == null) { nullPainter = pi.getPainter(); } } if (methodPainter != null) { return methodPainter; } return nullPainter; } return null; } public String toString() { StringBuffer text = new StringBuffer(super.toString()); if (_painters != null) { text.append(",painters=["); for (int i = 0; i < +_painters.length; i++) { text.append(_painters[i].toString()); } text.append("]"); } return text.toString(); } static class StateInfo extends DefaultSynthStyle.StateInfo { private PainterInfo[] _painterInfo; public StateInfo() { } public StateInfo(DefaultSynthStyle.StateInfo info) { super(info); if (info instanceof StateInfo) { _painterInfo = ((StateInfo)info)._painterInfo; } } public void setPainters(PainterInfo[] painterInfo) { _painterInfo = painterInfo; } public PainterInfo[] getPainters() { return _painterInfo; } public Object clone() { return new StateInfo(this); } public DefaultSynthStyle.StateInfo addTo( DefaultSynthStyle.StateInfo info) { if (!(info instanceof StateInfo)) { info = new StateInfo(info); } else { info = super.addTo(info); StateInfo si = (StateInfo)info; si._painterInfo = mergePainterInfo(si._painterInfo, _painterInfo); } return info; } public String toString() { StringBuffer text = new StringBuffer(super.toString()); text.append(",painters=["); if (_painterInfo != null) { for (int i = 0; i < +_painterInfo.length; i++) { text.append(" ").append(_painterInfo[i].toString()); } } text.append("]"); return text.toString(); } } static class PainterInfo { private String _method; private SynthPainter _painter; private int _direction; PainterInfo(String method, SynthPainter painter, int direction) { if (method != null) { _method = method.intern(); } _painter = painter; _direction = direction; } void addPainter(SynthPainter painter) { if (!(_painter instanceof AggregatePainter)) { _painter = new AggregatePainter(_painter); } ((AggregatePainter) _painter).addPainter(painter); } String getMethod() { return _method; } SynthPainter getPainter() { return _painter; } int getDirection() { return _direction; } boolean equalsPainter(PainterInfo info) { return (_method == info._method && _direction == info._direction); } public String toString() { return "PainterInfo {method=" + _method + ",direction=" + _direction + ",painter=" + _painter +"}"; } } private static class AggregatePainter extends SynthPainter { private java.util.List<SynthPainter> painters; AggregatePainter(SynthPainter painter) { painters = new LinkedList<SynthPainter>(); painters.add(painter); } void addPainter(SynthPainter painter) { if (painter != null) { painters.add(painter); } } public void paintArrowButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { for (SynthPainter painter: painters) { painter.paintArrowButtonBackground(context, g, x, y, w, h); } } public void paintArrowButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { for (SynthPainter painter: painters) { painter.paintArrowButtonBorder(context, g, x, y, w, h); } } public void paintArrowButtonForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int direction) { for (SynthPainter painter: painters) { painter.paintArrowButtonForeground(context, g, x, y, w, h, direction); } } public void paintButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { for (SynthPainter painter: painters) { painter.paintButtonBackground(context, g, x, y, w, h); } } public void paintButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { for (SynthPainter painter: painters) { painter.paintButtonBorder(context, g, x, y, w, h); } } public void paintCheckBoxMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { for (SynthPainter painter: painters) { painter.paintCheckBoxMenuItemBackground(context, g, x, y, w, h); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -