2175 lines · 92.8 KB · Java
RawDownload
/* * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */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. * * @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);            }        }         public void paintCheckBoxMenuItemBorder(SynthContext context,                                                Graphics g, int x, int y,                                                int w, int h) {            for (SynthPainter painter: painters) {                painter.paintCheckBoxMenuItemBorder(context, g, x, y, w, h);            }        }         public void paintCheckBoxBackground(SynthContext context, Graphics g,                                            int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintCheckBoxBackground(context, g, x, y, w, h);            }        }         public void paintCheckBoxBorder(SynthContext context, Graphics g,                                        int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintCheckBoxBorder(context, g, x, y, w, h);            }        }         public void paintColorChooserBackground(SynthContext context,                                                Graphics g, int x, int y,                                                int w, int h) {            for (SynthPainter painter: painters) {                painter.paintColorChooserBackground(context, g, x, y, w, h);            }        }         public void paintColorChooserBorder(SynthContext context, Graphics g,                                            int x, int y,                                            int w, int h) {            for (SynthPainter painter: painters) {                painter.paintColorChooserBorder(context, g, x, y, w, h);            }        }         public void paintComboBoxBackground(SynthContext context, Graphics g,                                            int x, int y,                                            int w, int h) {            for (SynthPainter painter: painters) {                painter.paintComboBoxBackground(context, g, x, y, w, h);            }        }         public void paintComboBoxBorder(SynthContext context, Graphics g,                                        int x, int y,                                        int w, int h) {            for (SynthPainter painter: painters) {                painter.paintComboBoxBorder(context, g, x, y, w, h);            }        }         public void paintDesktopIconBackground(SynthContext context, Graphics g,                                               int x, int y,                                               int w, int h) {            for (SynthPainter painter: painters) {                painter.paintDesktopIconBackground(context, g, x, y, w, h);            }        }         public void paintDesktopIconBorder(SynthContext context, Graphics g,                                           int x, int y,                                           int w, int h) {            for (SynthPainter painter: painters) {                painter.paintDesktopIconBorder(context, g, x, y, w, h);            }        }         public void paintDesktopPaneBackground(SynthContext context, Graphics g,                                               int x, int y,                                               int w, int h) {            for (SynthPainter painter: painters) {                painter.paintDesktopPaneBackground(context, g, x, y, w, h);            }        }         public void paintDesktopPaneBorder(SynthContext context, Graphics g,                                           int x, int y,                                           int w, int h) {            for (SynthPainter painter: painters) {                painter.paintDesktopPaneBorder(context, g, x, y, w, h);            }        }         public void paintEditorPaneBackground(SynthContext context, Graphics g,                                              int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintEditorPaneBackground(context, g, x, y, w, h);            }        }         public void paintEditorPaneBorder(SynthContext context, Graphics g,                                          int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintEditorPaneBorder(context, g, x, y, w, h);            }        }         public void paintFileChooserBackground(SynthContext context, Graphics g,                                               int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintFileChooserBackground(context, g, x, y, w, h);            }        }         public void paintFileChooserBorder(SynthContext context, Graphics g,                                           int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintFileChooserBorder(context, g, x, y, w, h);            }        }         public void paintFormattedTextFieldBackground(SynthContext context,                                                      Graphics g, int x, int y,                                                      int w, int h) {            for (SynthPainter painter: painters) {                painter.paintFormattedTextFieldBackground(context, g, x, y, w, h);            }        }         public void paintFormattedTextFieldBorder(SynthContext context,                                                  Graphics g, int x, int y,                                                  int w, int h) {            for (SynthPainter painter: painters) {                painter.paintFormattedTextFieldBorder(context, g, x, y, w, h);            }        }         public void paintInternalFrameTitlePaneBackground(SynthContext context,                                                          Graphics g,                                                          int x, int y,                                                          int w, int h) {            for (SynthPainter painter: painters) {                painter.paintInternalFrameTitlePaneBackground(context, g,                                                              x, y, w, h);            }        }         public void paintInternalFrameTitlePaneBorder(SynthContext context,                                                      Graphics g,                                                      int x, int y,                                                      int w, int h) {            for (SynthPainter painter: painters) {                painter.paintInternalFrameTitlePaneBorder(context, g,                                                          x, y, w, h);            }        }         public void paintInternalFrameBackground(SynthContext context,                                                 Graphics g, int x, int y,                                                 int w, int h) {            for (SynthPainter painter: painters) {                painter.paintInternalFrameBackground(context, g, x, y, w, h);            }        }         public void paintInternalFrameBorder(SynthContext context, Graphics g,                                             int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintInternalFrameBorder(context, g, x, y, w, h);            }        }         public void paintLabelBackground(SynthContext context, Graphics g,                                         int x, int y, int w, int h) {            for (SynthPainter painter: painters) {                painter.paintLabelBackground(context, g, x, y, w, h);            }        }         public void paintLabelBorder(SynthContext context, Graphics g,                                     int x, int y, int w, int h) {            for (SynthPainter painter: painters) {

Lines 1–500 of 2175.