--- old/make/jdk/src/classes/build/tools/generatenimbus/UIRegion.java 2020-03-23 19:57:27.599962326 +0100 +++ /dev/null 2020-02-11 10:29:13.086348146 +0100 @@ -1,244 +0,0 @@ -/* - * Copyright (c) 2002, 2013, 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 build.tools.generatenimbus; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -class UIRegion { - String name; - String key; - private boolean opaque = false; - - private Insets contentMargins = new Insets(0, 0, 0, 0); - - protected List backgroundStates = new ArrayList(); - - public List getBackgroundStates() { return backgroundStates; } - - protected List foregroundStates = new ArrayList(); - public List getForegroundStates() { return foregroundStates; } - - protected List borderStates = new ArrayList(); - public List getBorderStates() { return borderStates; } - - UIStyle style = new UIStyle(); - - List subRegions = new ArrayList<>(); - public List getSubRegions() { return subRegions; } - - UIRegion(XMLStreamReader reader, boolean parse) - throws XMLStreamException { - name = reader.getAttributeValue(null, "name"); - key = reader.getAttributeValue(null, "key"); - opaque = Boolean.parseBoolean(reader.getAttributeValue(null, "opaque")); - if (!parse) { - return; - } - while (reader.hasNext()) { - int eventType = reader.next(); - switch (eventType) { - case XMLStreamReader.START_ELEMENT: - parse(reader); - break; - case XMLStreamReader.END_ELEMENT: - switch (reader.getLocalName()) { - case "region": - return; - } - break; - } - } - } - - private List states = new ArrayList(); - - void parse(XMLStreamReader reader) throws XMLStreamException { - switch (reader.getLocalName()) { - case "backgroundStates": - backgroundStates = states = new ArrayList<>(); - break; - case "foregroundStates": - foregroundStates = states = new ArrayList<>(); - break; - case "borderStates": - borderStates = states = new ArrayList<>(); - break; - case "style": - style = new UIStyle(reader); - break; - case "region": - subRegions.add(new UIRegion(reader, true)); - break; - case "uiComponent": - subRegions.add(new UIComponent(reader)); - break; - case "uiIconRegion": - subRegions.add(new UIIconRegion(reader)); - break; - case "contentMargins": - contentMargins = new Insets(reader); - break; - case "state": - states.add(new UIState(reader)); - break; - } - } - - protected void initStyles(UIStyle parentStyle) { - style.setParentStyle(parentStyle); - for (UIState state: backgroundStates) { - state.getStyle().setParentStyle(this.style); - } - for (UIState state: foregroundStates) { - state.getStyle().setParentStyle(this.style); - } - for (UIState state: borderStates) { - state.getStyle().setParentStyle(this.style); - } - for (UIRegion region: subRegions) { - region.initStyles(this.style); - } - } - - public String getKey() { - return key == null || "".equals(key) ? name : key; - } - - private boolean hasCanvas() { - for (UIState s : backgroundStates) { - if (s.hasCanvas()) return true; - } - for (UIState s : borderStates) { - if (s.hasCanvas()) return true; - } - for (UIState s : foregroundStates) { - if (s.hasCanvas()) return true; - } - for (UIRegion r: subRegions) { - if (r.hasCanvas()) return true; - } - return false; - } - - public void write(StringBuilder sb, StringBuilder styleBuffer, - UIComponent comp, String prefix, String pkg) { - // write content margins - sb.append(String.format(" d.put(\"%s.contentMargins\", %s);\n", - prefix, contentMargins.write(true))); - // write opaque if true - if (opaque) { - sb.append(String.format(" d.put(\"%s.opaque\", Boolean.TRUE);\n", prefix)); - } - - // register component with LAF - String regionCode = "Region." + Utils.regionNameToCaps(name); - styleBuffer.append(String.format(" register(%s, \"%s\");\n", - regionCode, prefix)); - - //write the State, if necessary - StringBuffer regString = new StringBuffer(); - List types = comp.getStateTypes(); - if (types != null && types.size() > 0) { - for (UIStateType type : types) { - regString.append(type.getKey()); - regString.append(","); - } - //remove the last "," - regString.deleteCharAt(regString.length() - 1); - } - - if (! regString.equals("Enabled,MouseOver,Pressed,Disabled,Focused,Selected,Default") && types.size() > 0) { - //there were either custom states, or the normal states were in a custom order - //so go ahead and write out prefix.State - sb.append(String.format(" d.put(\"%s.States\", \"%s\");\n", - prefix, regString)); - } - - // write out any custom states, if necessary - for (UIStateType type : types) { - String synthState = type.getKey(); - if (! "Enabled".equals(synthState) && - ! "MouseOver".equals(synthState) && - ! "Pressed".equals(synthState) && - ! "Disabled".equals(synthState) && - ! "Focused".equals(synthState) && - ! "Selected".equals(synthState) && - ! "Default".equals(synthState)) { - - //what we have here, gentlemen, is a bona-fide custom state. - //if the type is not one of the standard types, then construct a name for - //the new type, and write out a new subclass of State. - String className = Utils.normalize(prefix) + synthState + "State"; - sb.append(String.format(" d.put(\"%s.%s\", new %s());\n", - prefix, synthState, className)); - - String body = type.getCodeSnippet(); - Map variables = Generator.getVariables(); - variables.put("STATE_NAME", className); - variables.put("STATE_KEY", synthState); - variables.put("BODY", body); - - Generator.writeSrcFile("StateImpl", variables, className); - } - } - - // write style - sb.append(style.write(prefix + '.')); - - String fileName = Utils.normalize(prefix) + "Painter"; - boolean hasCanvas = hasCanvas(); - if (hasCanvas) { - PainterGenerator.writePainter(this, fileName); - } - // write states ui defaults - for (UIState state : backgroundStates) { - state.write(sb, prefix, pkg, fileName, "background"); - } - for (UIState state : foregroundStates) { - state.write(sb, prefix, pkg, fileName, "foreground"); - } - for (UIState state : borderStates) { - state.write(sb, prefix, pkg, fileName, "border"); - } - - // handle sub regions - for (UIRegion subreg : subRegions) { - String p = prefix; - if (! (subreg instanceof UIIconRegion)) { - p = prefix + ":" + Utils.escape(subreg.getKey()); - } - UIComponent c = comp; - if (subreg instanceof UIComponent) { - c = (UIComponent) subreg; - } - subreg.write(sb, styleBuffer, c, p, pkg); - } - } -} --- /dev/null 2020-02-11 10:29:13.086348146 +0100 +++ new/src/java.desktop/share/tools/org/openjdk/buildtools/generatenimbus/UIRegion.java 2020-03-23 19:57:27.179962329 +0100 @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2002, 2013, 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 org.openjdk.buildtools.generatenimbus; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +class UIRegion { + String name; + String key; + private boolean opaque = false; + + private Insets contentMargins = new Insets(0, 0, 0, 0); + + protected List backgroundStates = new ArrayList(); + + public List getBackgroundStates() { return backgroundStates; } + + protected List foregroundStates = new ArrayList(); + public List getForegroundStates() { return foregroundStates; } + + protected List borderStates = new ArrayList(); + public List getBorderStates() { return borderStates; } + + UIStyle style = new UIStyle(); + + List subRegions = new ArrayList<>(); + public List getSubRegions() { return subRegions; } + + UIRegion(XMLStreamReader reader, boolean parse) + throws XMLStreamException { + name = reader.getAttributeValue(null, "name"); + key = reader.getAttributeValue(null, "key"); + opaque = Boolean.parseBoolean(reader.getAttributeValue(null, "opaque")); + if (!parse) { + return; + } + while (reader.hasNext()) { + int eventType = reader.next(); + switch (eventType) { + case XMLStreamReader.START_ELEMENT: + parse(reader); + break; + case XMLStreamReader.END_ELEMENT: + switch (reader.getLocalName()) { + case "region": + return; + } + break; + } + } + } + + private List states = new ArrayList(); + + void parse(XMLStreamReader reader) throws XMLStreamException { + switch (reader.getLocalName()) { + case "backgroundStates": + backgroundStates = states = new ArrayList<>(); + break; + case "foregroundStates": + foregroundStates = states = new ArrayList<>(); + break; + case "borderStates": + borderStates = states = new ArrayList<>(); + break; + case "style": + style = new UIStyle(reader); + break; + case "region": + subRegions.add(new UIRegion(reader, true)); + break; + case "uiComponent": + subRegions.add(new UIComponent(reader)); + break; + case "uiIconRegion": + subRegions.add(new UIIconRegion(reader)); + break; + case "contentMargins": + contentMargins = new Insets(reader); + break; + case "state": + states.add(new UIState(reader)); + break; + } + } + + protected void initStyles(UIStyle parentStyle) { + style.setParentStyle(parentStyle); + for (UIState state: backgroundStates) { + state.getStyle().setParentStyle(this.style); + } + for (UIState state: foregroundStates) { + state.getStyle().setParentStyle(this.style); + } + for (UIState state: borderStates) { + state.getStyle().setParentStyle(this.style); + } + for (UIRegion region: subRegions) { + region.initStyles(this.style); + } + } + + public String getKey() { + return key == null || "".equals(key) ? name : key; + } + + private boolean hasCanvas() { + for (UIState s : backgroundStates) { + if (s.hasCanvas()) return true; + } + for (UIState s : borderStates) { + if (s.hasCanvas()) return true; + } + for (UIState s : foregroundStates) { + if (s.hasCanvas()) return true; + } + for (UIRegion r: subRegions) { + if (r.hasCanvas()) return true; + } + return false; + } + + public void write(StringBuilder sb, StringBuilder styleBuffer, + UIComponent comp, String prefix, String pkg) { + // write content margins + sb.append(String.format(" d.put(\"%s.contentMargins\", %s);\n", + prefix, contentMargins.write(true))); + // write opaque if true + if (opaque) { + sb.append(String.format(" d.put(\"%s.opaque\", Boolean.TRUE);\n", prefix)); + } + + // register component with LAF + String regionCode = "Region." + Utils.regionNameToCaps(name); + styleBuffer.append(String.format(" register(%s, \"%s\");\n", + regionCode, prefix)); + + //write the State, if necessary + StringBuffer regString = new StringBuffer(); + List types = comp.getStateTypes(); + if (types != null && types.size() > 0) { + for (UIStateType type : types) { + regString.append(type.getKey()); + regString.append(","); + } + //remove the last "," + regString.deleteCharAt(regString.length() - 1); + } + + if (! regString.equals("Enabled,MouseOver,Pressed,Disabled,Focused,Selected,Default") && types.size() > 0) { + //there were either custom states, or the normal states were in a custom order + //so go ahead and write out prefix.State + sb.append(String.format(" d.put(\"%s.States\", \"%s\");\n", + prefix, regString)); + } + + // write out any custom states, if necessary + for (UIStateType type : types) { + String synthState = type.getKey(); + if (! "Enabled".equals(synthState) && + ! "MouseOver".equals(synthState) && + ! "Pressed".equals(synthState) && + ! "Disabled".equals(synthState) && + ! "Focused".equals(synthState) && + ! "Selected".equals(synthState) && + ! "Default".equals(synthState)) { + + //what we have here, gentlemen, is a bona-fide custom state. + //if the type is not one of the standard types, then construct a name for + //the new type, and write out a new subclass of State. + String className = Utils.normalize(prefix) + synthState + "State"; + sb.append(String.format(" d.put(\"%s.%s\", new %s());\n", + prefix, synthState, className)); + + String body = type.getCodeSnippet(); + Map variables = Generator.getVariables(); + variables.put("STATE_NAME", className); + variables.put("STATE_KEY", synthState); + variables.put("BODY", body); + + Generator.writeSrcFile("StateImpl", variables, className); + } + } + + // write style + sb.append(style.write(prefix + '.')); + + String fileName = Utils.normalize(prefix) + "Painter"; + boolean hasCanvas = hasCanvas(); + if (hasCanvas) { + PainterGenerator.writePainter(this, fileName); + } + // write states ui defaults + for (UIState state : backgroundStates) { + state.write(sb, prefix, pkg, fileName, "background"); + } + for (UIState state : foregroundStates) { + state.write(sb, prefix, pkg, fileName, "foreground"); + } + for (UIState state : borderStates) { + state.write(sb, prefix, pkg, fileName, "border"); + } + + // handle sub regions + for (UIRegion subreg : subRegions) { + String p = prefix; + if (! (subreg instanceof UIIconRegion)) { + p = prefix + ":" + Utils.escape(subreg.getKey()); + } + UIComponent c = comp; + if (subreg instanceof UIComponent) { + c = (UIComponent) subreg; + } + subreg.write(sb, styleBuffer, c, p, pkg); + } + } +}