Author: rwhitcomb Date: Thu Jan 14 06:01:39 2021 New Revision: 1885469 URL: http://svn.apache.org/viewvc?rev=1885469&view=rev Log: Enhancements to the CSSColor demo.
Modified: pivot/trunk/demos/src/org/apache/pivot/demos/colors/Colors.java pivot/trunk/wtk/src/org/apache/pivot/wtk/CSSColor.java Modified: pivot/trunk/demos/src/org/apache/pivot/demos/colors/Colors.java URL: http://svn.apache.org/viewvc/pivot/trunk/demos/src/org/apache/pivot/demos/colors/Colors.java?rev=1885469&r1=1885468&r2=1885469&view=diff ============================================================================== --- pivot/trunk/demos/src/org/apache/pivot/demos/colors/Colors.java (original) +++ pivot/trunk/demos/src/org/apache/pivot/demos/colors/Colors.java Thu Jan 14 06:01:39 2021 @@ -17,14 +17,18 @@ package org.apache.pivot.demos.colors; import java.awt.Color; +import java.awt.Font; +import java.util.Set; import org.apache.pivot.collections.Map; +import org.apache.pivot.util.StringUtils; import org.apache.pivot.wtk.Application; import org.apache.pivot.wtk.Border; import org.apache.pivot.wtk.BoxPane; import org.apache.pivot.wtk.CSSColor; import org.apache.pivot.wtk.DesktopApplicationContext; import org.apache.pivot.wtk.Display; -import org.apache.pivot.wtk.FlowPane; +import org.apache.pivot.wtk.FontUtilities; +import org.apache.pivot.wtk.GridPane; import org.apache.pivot.wtk.HorizontalAlignment; import org.apache.pivot.wtk.Label; import org.apache.pivot.wtk.Orientation; @@ -33,38 +37,92 @@ import org.apache.pivot.wtk.Style; import org.apache.pivot.wtk.Window; public final class Colors implements Application { + private static final int CELLS_PER_ROW = 5; + private Window mainWindow; + + private Label makeLabel(final String text) { + Label label = new Label(text); + label.getStyles().put(Style.horizontalAlignment, HorizontalAlignment.CENTER); + return label; + } + @Override - public void startup(Display display, Map<String, String> properties) { - FlowPane flowPane = new FlowPane(); - flowPane.getStyles().put(Style.padding, 6); + public void startup(final Display display, final Map<String, String> properties) { + GridPane gridPane = new GridPane(CELLS_PER_ROW); + gridPane.getStyles().put(Style.padding, 6); + + Font fontBold = FontUtilities.getFont(FontUtilities.SANS_SERIF_FONTS, Font.BOLD, 13); + Font fontRegular = FontUtilities.getFont(FontUtilities.SANS_SERIF_FONTS, Font.PLAIN, 12); + Font fontItalic = FontUtilities.getFont(FontUtilities.SANS_SERIF_FONTS, Font.ITALIC, 11); + + int cell = 0; + GridPane.Row row = null; + + int numColors = CSSColor.numberOfColors(); + for (CSSColor color : CSSColor.values()) { + if (cell % CELLS_PER_ROW == 0) { + row = new GridPane.Row(gridPane); + } + BoxPane container = new BoxPane(Orientation.VERTICAL); container.getStyles().put(Style.padding, 4); container.getStyles().put(Style.fill, true); + BoxPane colorFill = new BoxPane(Orientation.VERTICAL); - Color fillColor = color.getColor(); + + Color fillColor = color.getColor(); + String colorName = color.toString(); + int r = fillColor.getRed(); + int g = fillColor.getGreen(); + int b = fillColor.getBlue(); + colorFill.getStyles().put(Style.backgroundColor, fillColor); - colorFill.setMinimumWidth(50); - colorFill.setPreferredHeight(50); - colorFill.setTooltipText(String.format("%1$s=R:%2$3d,G:%3$3d,B:%4$3d", - color.toString(), fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue())); - Label nameLabel = new Label(color.toString()); - nameLabel.getStyles().put(Style.horizontalAlignment, HorizontalAlignment.CENTER); + colorFill.setPreferredWidth(372); + colorFill.setPreferredHeight(100); + Set<CSSColor> matchingColors = CSSColor.getMatchingColors(color); + String matches = matchingColors.size() == 0 + ? "No matches." + : "Matches: " + StringUtils.toString(matchingColors); + colorFill.setTooltipText(matches); + + Label nameLabel = makeLabel(color.toString()); + nameLabel.getStyles().put(Style.font, fontBold); + + String rgbText = String.format("R=%1$3d, G=%2$3d, B=%3$3d", r, g, b); + Label rgbLabel = makeLabel(rgbText); + rgbLabel.getStyles().put(Style.font, fontRegular); + + float[] hsbValues = Color.RGBtoHSB(r, g, b, null); + String hsbText = String.format("H=%1$5.3f, S=%2$5.3f, V=%3$5.3f", + hsbValues[0], hsbValues[1], hsbValues[2]); + Label hsbLabel = makeLabel(hsbText); + hsbLabel.getStyles().put(Style.font, fontRegular); + + String seqText = String.format("%1$d / %2$d", cell + 1, numColors); + Label seqLabel = makeLabel(seqText); + seqLabel.getStyles().put(Style.font, fontItalic); + container.add(colorFill); container.add(nameLabel); - flowPane.add(new Border(container)); + container.add(rgbLabel); + container.add(hsbLabel); + container.add(seqLabel); + + row.add(new Border(container)); + cell++; } ScrollPane scrollPane = new ScrollPane(ScrollPane.ScrollBarPolicy.FILL, ScrollPane.ScrollBarPolicy.AUTO); - scrollPane.setView(flowPane); + scrollPane.setView(gridPane); mainWindow = new Window(scrollPane); mainWindow.setMaximized(true); mainWindow.open(display); } @Override - public boolean shutdown(boolean optional) { + public boolean shutdown(final boolean optional) { if (mainWindow != null) { mainWindow.close(); mainWindow = null; @@ -72,7 +130,7 @@ public final class Colors implements App return false; } - public static void main(String[] args) { + public static void main(final String[] args) { DesktopApplicationContext.main(Colors.class, args); } } Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/CSSColor.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/CSSColor.java?rev=1885469&r1=1885468&r2=1885469&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/CSSColor.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/CSSColor.java Thu Jan 14 06:01:39 2021 @@ -347,4 +347,30 @@ public enum CSSColor { return matches; } + /** + * Return the set of all these colors with the same RGB value as the given {@code CSSColor}, + * in other words, the synonyms for this color. + * <p> This could be a bit time-consuming because we have to search all the values. + * @param color One of these colors to find the matching enum values. + * @return The complete set (could be empty) of these colors with the same RGB value (not + * including the given color). + */ + public static Set<CSSColor> getMatchingColors(final CSSColor color) { + Set<CSSColor> matches = EnumSet.noneOf(CSSColor.class); + Color solidColor = color.color; + for (CSSColor cssColor : values()) { + if (cssColor.color.equals(solidColor) && cssColor != color) { + matches.add(cssColor); + } + } + return matches; + } + + /** + * @return The number of colors in this list. + */ + public static int numberOfColors() { + return values().length; + } + }