package com.vitco.layout.content.colorchooser; import com.vitco.layout.content.colorchooser.basic.ColorChooserPrototype; import com.vitco.util.misc.ColorTools; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * A very simple color chooser. */ public class PresetColorChooser extends ColorChooserPrototype { private final static Color[] DEFAULT_SWATCH = new Color[] { // black to white new Color(0, 0, 0), new Color(14, 14, 14), new Color(27, 27, 27), new Color(41, 41, 41), new Color(54, 54, 54), new Color(68, 68, 68), new Color(81, 81, 81), new Color(95, 95, 95), new Color(108, 108, 108), new Color(122, 122, 122), new Color(135, 135, 135), new Color(149, 149, 149), new Color(162, 162, 162), new Color(176, 176, 176), new Color(189, 189, 189), new Color(203, 203, 203), new Color(216, 216, 216), new Color(230, 230, 230), new Color(243, 243, 243), new Color(255, 255, 255), // "flower" new Color(247, 252, 249), new Color(247, 251, 247), new Color(248, 251, 238), new Color(248, 250, 230), new Color(246, 248, 213), new Color(245, 247, 213), new Color(248, 248, 212), new Color(246, 247, 209), new Color(240, 242, 201), new Color(234, 239, 191), new Color(216, 227, 170), new Color(210, 223, 165), new Color(207, 223, 165), new Color(208, 226, 177), new Color(217, 233, 205), new Color(217, 231, 213), new Color(216, 232, 216), new Color(220, 236, 223), new Color(233, 242, 236), new Color(244, 249, 245), new Color(247, 251, 247), new Color(247, 251, 240), new Color(247, 247, 230), new Color(245, 244, 210), new Color(244, 242, 201), new Color(243, 240, 198), new Color(246, 244, 203), new Color(246, 246, 198), new Color(241, 245, 188), new Color(234, 243, 175), new Color(213, 232, 155), new Color(206, 224, 154), new Color(193, 216, 154), new Color(185, 214, 153), new Color(184, 215, 160), new Color(196, 223, 188), new Color(201, 222, 201), new Color(208, 226, 209), new Color(218, 233, 221), new Color(236, 242, 237), new Color(247, 249, 236), new Color(245, 245, 228), new Color(245, 237, 204), new Color(241, 231, 187), new Color(239, 229, 183), new Color(241, 231, 180), new Color(247, 247, 183), new Color(246, 249, 156), new Color(238, 248, 141), new Color(229, 247, 130), new Color(205, 236, 114), new Color(193, 225, 118), new Color(181, 214, 125), new Color(175, 210, 142), new Color(154, 203, 138), new Color(151, 200, 143), new Color(167, 206, 165), new Color(190, 217, 194), new Color(203, 224, 209), new Color(215, 232, 221), new Color(244, 242, 224), new Color(241, 233, 202), new Color(237, 221, 180), new Color(238, 220, 173), new Color(239, 223, 173), new Color(244, 234, 158), new Color(248, 248, 140), new Color(246, 247, 125), new Color(240, 247, 112), new Color(227, 246, 104), new Color(195, 232, 90), new Color(178, 223, 89), new Color(162, 214, 99), new Color(157, 210, 111), new Color(142, 198, 126), new Color(139, 193, 135), new Color(137, 193, 142), new Color(154, 198, 164), new Color(183, 213, 196), new Color(195, 218, 208), new Color(239, 227, 193), new Color(236, 219, 181), new Color(233, 211, 165), new Color(234, 211, 163), new Color(242, 220, 150), new Color(249, 229, 126), new Color(249, 235, 105), new Color(252, 246, 87), new Color(244, 246, 87), new Color(223, 246, 86), new Color(177, 238, 81), new Color(146, 227, 77), new Color(136, 220, 74), new Color(112, 204, 83), new Color(109, 199, 101), new Color(124, 184, 131), new Color(126, 181, 139), new Color(128, 185, 145), new Color(161, 200, 182), new Color(183, 208, 200), new Color(234, 213, 175), new Color(227, 197, 151), new Color(232, 201, 151), new Color(240, 206, 139), new Color(245, 214, 119), new Color(247, 219, 109), new Color(249, 222, 79), new Color(253, 226, 80), new Color(243, 243, 86), new Color(216, 239, 83), new Color(160, 223, 75), new Color(123, 220, 74), new Color(76, 215, 71), new Color(82, 202, 66), new Color(85, 195, 91), new Color(88, 185, 110), new Color(109, 173, 138), new Color(117, 172, 141), new Color(116, 170, 156), new Color(165, 198, 190), new Color(227, 189, 147), new Color(224, 185, 132), new Color(233, 184, 119), new Color(242, 185, 95), new Color(245, 202, 102), new Color(247, 205, 90), new Color(254, 205, 73), new Color(240, 202, 72), new Color(201, 192, 66), new Color(174, 189, 64), new Color(120, 173, 57), new Color(77, 175, 56), new Color(69, 198, 65), new Color(71, 202, 66), new Color(65, 190, 83), new Color(66, 179, 109), new Color(70, 160, 135), new Color(93, 153, 140), new Color(103, 151, 143), new Color(117, 162, 157), new Color(221, 175, 128), new Color(224, 177, 120), new Color(239, 171, 90), new Color(242, 175, 78), new Color(252, 173, 63), new Color(253, 190, 68), new Color(239, 186, 66), new Color(190, 158, 54), new Color(155, 138, 46), new Color(114, 116, 36), new Color(76, 110, 33), new Color(43, 132, 40), new Color(51, 152, 48), new Color(63, 183, 59), new Color(63, 183, 71), new Color(49, 164, 130), new Color(56, 153, 139), new Color(72, 147, 145), new Color(95, 141, 142), new Color(103, 143, 144), new Color(218, 168, 116), new Color(222, 167, 107), new Color(239, 161, 73), new Color(239, 163, 65), new Color(251, 156, 57), new Color(251, 160, 59), new Color(202, 134, 47), new Color(157, 120, 40), new Color(93, 80, 38), new Color(46, 46, 16), new Color(41, 59, 18), new Color(30, 75, 28), new Color(37, 117, 46), new Color(40, 132, 88), new Color(45, 156, 134), new Color(40, 151, 149), new Color(46, 142, 151), new Color(59, 137, 151), new Color(86, 132, 144), new Color(92, 133, 142), new Color(215, 161, 110), new Color(223, 158, 96), new Color(234, 152, 68), new Color(239, 149, 55), new Color(250, 137, 52), new Color(247, 135, 51), new Color(193, 107, 38), new Color(125, 82, 27), new Color(60, 47, 24), new Color(27, 25, 15), new Color(19, 27, 13), new Color(18, 40, 28), new Color(15, 73, 75), new Color(20, 106, 124), new Color(22, 132, 168), new Color(19, 133, 177), new Color(41, 130, 163), new Color(56, 130, 158), new Color(83, 126, 148), new Color(89, 127, 144), new Color(211, 142, 97), new Color(216, 142, 88), new Color(230, 133, 63), new Color(243, 123, 47), new Color(249, 109, 44), new Color(249, 106, 43), new Color(195, 77, 30), new Color(123, 60, 25), new Color(55, 28, 19), new Color(22, 11, 16), new Color(16, 15, 28), new Color(22, 30, 58), new Color(25, 53, 107), new Color(8, 69, 165), new Color(11, 96, 208), new Color(6, 101, 212), new Color(38, 109, 184), new Color(52, 110, 172), new Color(74, 112, 154), new Color(82, 116, 152), new Color(208, 138, 93), new Color(211, 134, 88), new Color(226, 123, 63), new Color(239, 114, 44), new Color(248, 93, 40), new Color(248, 83, 37), new Color(200, 54, 25), new Color(152, 32, 16), new Color(83, 26, 25), new Color(48, 14, 31), new Color(40, 9, 45), new Color(32, 17, 67), new Color(45, 41, 134), new Color(34, 54, 170), new Color(30, 69, 212), new Color(19, 82, 210), new Color(44, 97, 182), new Color(54, 105, 172), new Color(74, 106, 152), new Color(82, 113, 154), new Color(207, 136, 98), new Color(206, 127, 87), new Color(220, 114, 64), new Color(225, 105, 52), new Color(241, 85, 37), new Color(244, 54, 31), new Color(229, 35, 26), new Color(187, 26, 20), new Color(132, 16, 23), new Color(77, 12, 39), new Color(57, 15, 60), new Color(51, 26, 93), new Color(70, 45, 143), new Color(81, 61, 189), new Color(66, 62, 191), new Color(37, 71, 190), new Color(54, 86, 170), new Color(59, 94, 161), new Color(74, 98, 148), new Color(92, 122, 163), new Color(208, 146, 116), new Color(202, 126, 90), new Color(208, 117, 75), new Color(214, 105, 64), new Color(218, 77, 50), new Color(223, 55, 33), new Color(229, 35, 26), new Color(216, 32, 24), new Color(145, 21, 39), new Color(108, 19, 56), new Color(78, 23, 79), new Color(77, 33, 109), new Color(86, 53, 165), new Color(84, 58, 179), new Color(76, 49, 154), new Color(71, 55, 148), new Color(61, 79, 154), new Color(68, 86, 143), new Color(70, 92, 152), new Color(106, 132, 183), new Color(216, 171, 152), new Color(204, 134, 107), new Color(191, 104, 83), new Color(190, 97, 75), new Color(202, 78, 63), new Color(208, 58, 52), new Color(205, 42, 46), new Color(201, 30, 30), new Color(163, 26, 52), new Color(125, 24, 69), new Color(96, 28, 91), new Color(91, 36, 117), new Color(86, 48, 151), new Color(84, 43, 138), new Color(80, 42, 133), new Color(77, 51, 131), new Color(70, 61, 119), new Color(72, 65, 126), new Color(86, 102, 162), new Color(149, 164, 199), new Color(220, 187, 173), new Color(211, 159, 143), new Color(193, 113, 98), new Color(181, 94, 83), new Color(174, 89, 81), new Color(188, 64, 65), new Color(187, 49, 62), new Color(164, 29, 66), new Color(151, 27, 67), new Color(129, 28, 79), new Color(104, 30, 94), new Color(92, 33, 106), new Color(83, 34, 111), new Color(81, 36, 117), new Color(79, 40, 116), new Color(73, 51, 106), new Color(75, 58, 111), new Color(83, 69, 132), new Color(141, 143, 183), new Color(167, 173, 204), new Color(228, 206, 197), new Color(218, 182, 171), new Color(199, 139, 129), new Color(181, 101, 93), new Color(167, 84, 81), new Color(162, 75, 79), new Color(146, 54, 77), new Color(139, 44, 77), new Color(126, 37, 79), new Color(113, 33, 82), new Color(92, 28, 85), new Color(92, 33, 106), new Color(75, 28, 90), new Color(73, 32, 91), new Color(72, 46, 95), new Color(72, 50, 99), new Color(83, 61, 117), new Color(125, 113, 160), new Color(171, 170, 198), new Color(190, 197, 215), new Color(238, 230, 226), new Color(226, 203, 197), new Color(213, 175, 170), new Color(191, 133, 130), new Color(170, 93, 93), new Color(157, 75, 80), new Color(134, 58, 80), new Color(127, 52, 83), new Color(114, 43, 82), new Color(107, 41, 82), new Color(88, 34, 81), new Color(80, 33, 80), new Color(70, 33, 79), new Color(63, 41, 75), new Color(70, 47, 91), new Color(84, 63, 110), new Color(123, 105, 147), new Color(168, 163, 190), new Color(196, 196, 213), new Color(233, 237, 240), new Color(246, 247, 244), new Color(238, 229, 226), new Color(222, 198, 195), new Color(207, 173, 173), new Color(187, 139, 143), new Color(151, 87, 101), new Color(133, 63, 86), new Color(122, 54, 81), new Color(108, 46, 78), new Color(97, 46, 76), new Color(76, 42, 72), new Color(70, 40, 69), new Color(64, 39, 70), new Color(65, 44, 77), new Color(84, 66, 97), new Color(139, 127, 154), new Color(167, 161, 183), new Color(194, 192, 208), new Color(227, 230, 234), new Color(243, 248, 247), new Color(248, 251, 248), new Color(244, 241, 238), new Color(234, 225, 222), new Color(213, 190, 190), new Color(197, 163, 166), new Color(177, 136, 146), new Color(147, 94, 117), new Color(124, 69, 96), new Color(108, 52, 83), new Color(96, 45, 76), new Color(77, 41, 72), new Color(72, 40, 70), new Color(73, 46, 75), new Color(87, 68, 96), new Color(145, 133, 153), new Color(161, 153, 171), new Color(185, 183, 197), new Color(222, 225, 229), new Color(242, 246, 245), new Color(246, 251, 249) }; private void setupColors(int ROWS, int COLS, Color[] colors) { this.setBorder(BorderFactory.createMatteBorder(1, 1, 0, 0, Color.BLACK)); setLayout(new GridLayout(ROWS,COLS)); // fill the whole panel with labels and colors int i = 0; for( int x=0 ; x<ROWS ; x++) { for( int y=0 ; y<COLS ; y++) { final JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(13,13)); panel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, Color.BLACK)); if (colors.length > i) { panel.setBackground(colors[i++]); } else { panel.setBackground(Color.WHITE); } panel.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { notifyListeners(ColorTools.colorToHSB(panel.getBackground())); } }); add(panel); } } } // custom constructor public PresetColorChooser(Color[] colors) { int maxHeight = (int)Math.floor(Math.sqrt(colors.length)); setupColors(Math.min(colors.length, maxHeight), (int)Math.ceil(colors.length/(double)maxHeight), colors); } // custom constructor public PresetColorChooser(int ROWS, int COLS, Color[] colors) { setupColors(ROWS, COLS, colors); } // default constructor public PresetColorChooser() { // final int ROWS=12; // final int COLS=30; // // Color[] colors = new Color[ROWS*COLS]; // // // generate colors // int i = 0; // for( int x=0 ; x<ROWS ; x++) { // for( int y=0 ; y<COLS ; y++) { // colors[i++] = Color.getHSBColor( // ((float) y) / (COLS - 2), // don't draw duplicate (0 equal 1) // Math.min(1, ((float) x * 2 + 1) / (ROWS + 1)), // Math.min(1, 2 - ((float) x * 2 + 1) / (ROWS + 1)) // ); // } // } //setUpColors(ROWS, COLS, colors); setupColors(21, 20, DEFAULT_SWATCH); } }