You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
771 lines
20 KiB
771 lines
20 KiB
/*
|
|
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
package javax.swing.colorchooser;
|
|
|
|
import javax.swing.*;
|
|
import javax.swing.border.*;
|
|
import javax.swing.event.*;
|
|
import java.awt.*;
|
|
import java.awt.image.*;
|
|
import java.awt.event.*;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.io.Serializable;
|
|
import javax.accessibility.*;
|
|
|
|
|
|
/**
|
|
* The standard color swatch chooser.
|
|
* <p>
|
|
* <strong>Warning:</strong>
|
|
* Serialized objects of this class will not be compatible with
|
|
* future Swing releases. The current serialization support is
|
|
* appropriate for short term storage or RMI between applications running
|
|
* the same version of Swing. As of 1.4, support for long term storage
|
|
* of all JavaBeans™
|
|
* has been added to the <code>java.beans</code> package.
|
|
* Please see {@link java.beans.XMLEncoder}.
|
|
*
|
|
* @author Steve Wilson
|
|
*/
|
|
class DefaultSwatchChooserPanel extends AbstractColorChooserPanel {
|
|
|
|
SwatchPanel swatchPanel;
|
|
RecentSwatchPanel recentSwatchPanel;
|
|
MouseListener mainSwatchListener;
|
|
MouseListener recentSwatchListener;
|
|
private KeyListener mainSwatchKeyListener;
|
|
private KeyListener recentSwatchKeyListener;
|
|
|
|
public DefaultSwatchChooserPanel() {
|
|
super();
|
|
setInheritsPopupMenu(true);
|
|
}
|
|
|
|
public String getDisplayName() {
|
|
return UIManager.getString("ColorChooser.swatchesNameText", getLocale());
|
|
}
|
|
|
|
/**
|
|
* Provides a hint to the look and feel as to the
|
|
* <code>KeyEvent.VK</code> constant that can be used as a mnemonic to
|
|
* access the panel. A return value <= 0 indicates there is no mnemonic.
|
|
* <p>
|
|
* The return value here is a hint, it is ultimately up to the look
|
|
* and feel to honor the return value in some meaningful way.
|
|
* <p>
|
|
* This implementation looks up the value from the default
|
|
* <code>ColorChooser.swatchesMnemonic</code>, or if it
|
|
* isn't available (or not an <code>Integer</code>) returns -1.
|
|
* The lookup for the default is done through the <code>UIManager</code>:
|
|
* <code>UIManager.get("ColorChooser.swatchesMnemonic");</code>.
|
|
*
|
|
* @return KeyEvent.VK constant identifying the mnemonic; <= 0 for no
|
|
* mnemonic
|
|
* @see #getDisplayedMnemonicIndex
|
|
* @since 1.4
|
|
*/
|
|
public int getMnemonic() {
|
|
return getInt("ColorChooser.swatchesMnemonic", -1);
|
|
}
|
|
|
|
/**
|
|
* Provides a hint to the look and feel as to the index of the character in
|
|
* <code>getDisplayName</code> that should be visually identified as the
|
|
* mnemonic. The look and feel should only use this if
|
|
* <code>getMnemonic</code> returns a value > 0.
|
|
* <p>
|
|
* The return value here is a hint, it is ultimately up to the look
|
|
* and feel to honor the return value in some meaningful way. For example,
|
|
* a look and feel may wish to render each
|
|
* <code>AbstractColorChooserPanel</code> in a <code>JTabbedPane</code>,
|
|
* and further use this return value to underline a character in
|
|
* the <code>getDisplayName</code>.
|
|
* <p>
|
|
* This implementation looks up the value from the default
|
|
* <code>ColorChooser.rgbDisplayedMnemonicIndex</code>, or if it
|
|
* isn't available (or not an <code>Integer</code>) returns -1.
|
|
* The lookup for the default is done through the <code>UIManager</code>:
|
|
* <code>UIManager.get("ColorChooser.swatchesDisplayedMnemonicIndex");</code>.
|
|
*
|
|
* @return Character index to render mnemonic for; -1 to provide no
|
|
* visual identifier for this panel.
|
|
* @see #getMnemonic
|
|
* @since 1.4
|
|
*/
|
|
public int getDisplayedMnemonicIndex() {
|
|
return getInt("ColorChooser.swatchesDisplayedMnemonicIndex", -1);
|
|
}
|
|
|
|
public Icon getSmallDisplayIcon() {
|
|
return null;
|
|
}
|
|
|
|
public Icon getLargeDisplayIcon() {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* The background color, foreground color, and font are already set to the
|
|
* defaults from the defaults table before this method is called.
|
|
*/
|
|
public void installChooserPanel(JColorChooser enclosingChooser) {
|
|
super.installChooserPanel(enclosingChooser);
|
|
}
|
|
|
|
protected void buildChooser() {
|
|
|
|
String recentStr = UIManager.getString("ColorChooser.swatchesRecentText", getLocale());
|
|
|
|
GridBagLayout gb = new GridBagLayout();
|
|
GridBagConstraints gbc = new GridBagConstraints();
|
|
JPanel superHolder = new JPanel(gb);
|
|
|
|
swatchPanel = new MainSwatchPanel();
|
|
swatchPanel.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,
|
|
getDisplayName());
|
|
swatchPanel.setInheritsPopupMenu(true);
|
|
|
|
recentSwatchPanel = new RecentSwatchPanel();
|
|
recentSwatchPanel.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,
|
|
recentStr);
|
|
|
|
mainSwatchKeyListener = new MainSwatchKeyListener();
|
|
mainSwatchListener = new MainSwatchListener();
|
|
swatchPanel.addMouseListener(mainSwatchListener);
|
|
swatchPanel.addKeyListener(mainSwatchKeyListener);
|
|
recentSwatchListener = new RecentSwatchListener();
|
|
recentSwatchKeyListener = new RecentSwatchKeyListener();
|
|
recentSwatchPanel.addMouseListener(recentSwatchListener);
|
|
recentSwatchPanel.addKeyListener(recentSwatchKeyListener);
|
|
|
|
JPanel mainHolder = new JPanel(new BorderLayout());
|
|
Border border = new CompoundBorder( new LineBorder(Color.black),
|
|
new LineBorder(Color.white) );
|
|
mainHolder.setBorder(border);
|
|
mainHolder.add(swatchPanel, BorderLayout.CENTER);
|
|
|
|
gbc.anchor = GridBagConstraints.LAST_LINE_START;
|
|
gbc.gridwidth = 1;
|
|
gbc.gridheight = 2;
|
|
Insets oldInsets = gbc.insets;
|
|
gbc.insets = new Insets(0, 0, 0, 10);
|
|
superHolder.add(mainHolder, gbc);
|
|
gbc.insets = oldInsets;
|
|
|
|
recentSwatchPanel.setInheritsPopupMenu(true);
|
|
JPanel recentHolder = new JPanel( new BorderLayout() );
|
|
recentHolder.setBorder(border);
|
|
recentHolder.setInheritsPopupMenu(true);
|
|
recentHolder.add(recentSwatchPanel, BorderLayout.CENTER);
|
|
|
|
JLabel l = new JLabel(recentStr);
|
|
l.setLabelFor(recentSwatchPanel);
|
|
|
|
gbc.gridwidth = GridBagConstraints.REMAINDER;
|
|
gbc.gridheight = 1;
|
|
gbc.weighty = 1.0;
|
|
superHolder.add(l, gbc);
|
|
|
|
gbc.weighty = 0;
|
|
gbc.gridheight = GridBagConstraints.REMAINDER;
|
|
gbc.insets = new Insets(0, 0, 0, 2);
|
|
superHolder.add(recentHolder, gbc);
|
|
superHolder.setInheritsPopupMenu(true);
|
|
|
|
add(superHolder);
|
|
}
|
|
|
|
public void uninstallChooserPanel(JColorChooser enclosingChooser) {
|
|
super.uninstallChooserPanel(enclosingChooser);
|
|
swatchPanel.removeMouseListener(mainSwatchListener);
|
|
swatchPanel.removeKeyListener(mainSwatchKeyListener);
|
|
recentSwatchPanel.removeMouseListener(recentSwatchListener);
|
|
recentSwatchPanel.removeKeyListener(recentSwatchKeyListener);
|
|
|
|
swatchPanel = null;
|
|
recentSwatchPanel = null;
|
|
mainSwatchListener = null;
|
|
mainSwatchKeyListener = null;
|
|
recentSwatchListener = null;
|
|
recentSwatchKeyListener = null;
|
|
|
|
removeAll(); // strip out all the sub-components
|
|
}
|
|
|
|
public void updateChooser() {
|
|
|
|
}
|
|
|
|
|
|
private class RecentSwatchKeyListener extends KeyAdapter {
|
|
public void keyPressed(KeyEvent e) {
|
|
if (KeyEvent.VK_SPACE == e.getKeyCode()) {
|
|
Color color = recentSwatchPanel.getSelectedColor();
|
|
setSelectedColor(color);
|
|
}
|
|
}
|
|
}
|
|
|
|
private class MainSwatchKeyListener extends KeyAdapter {
|
|
public void keyPressed(KeyEvent e) {
|
|
if (KeyEvent.VK_SPACE == e.getKeyCode()) {
|
|
Color color = swatchPanel.getSelectedColor();
|
|
setSelectedColor(color);
|
|
recentSwatchPanel.setMostRecentColor(color);
|
|
}
|
|
}
|
|
}
|
|
|
|
class RecentSwatchListener extends MouseAdapter implements Serializable {
|
|
public void mousePressed(MouseEvent e) {
|
|
if (isEnabled()) {
|
|
Color color = recentSwatchPanel.getColorForLocation(e.getX(), e.getY());
|
|
recentSwatchPanel.setSelectedColorFromLocation(e.getX(), e.getY());
|
|
setSelectedColor(color);
|
|
recentSwatchPanel.requestFocusInWindow();
|
|
}
|
|
}
|
|
}
|
|
|
|
class MainSwatchListener extends MouseAdapter implements Serializable {
|
|
public void mousePressed(MouseEvent e) {
|
|
if (isEnabled()) {
|
|
Color color = swatchPanel.getColorForLocation(e.getX(), e.getY());
|
|
setSelectedColor(color);
|
|
swatchPanel.setSelectedColorFromLocation(e.getX(), e.getY());
|
|
recentSwatchPanel.setMostRecentColor(color);
|
|
swatchPanel.requestFocusInWindow();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class SwatchPanel extends JPanel {
|
|
|
|
protected Color[] colors;
|
|
protected Dimension swatchSize;
|
|
protected Dimension numSwatches;
|
|
protected Dimension gap;
|
|
|
|
private int selRow;
|
|
private int selCol;
|
|
|
|
public SwatchPanel() {
|
|
initValues();
|
|
initColors();
|
|
setToolTipText(""); // register for events
|
|
setOpaque(true);
|
|
setBackground(Color.white);
|
|
setFocusable(true);
|
|
setInheritsPopupMenu(true);
|
|
|
|
addFocusListener(new FocusAdapter() {
|
|
public void focusGained(FocusEvent e) {
|
|
repaint();
|
|
}
|
|
|
|
public void focusLost(FocusEvent e) {
|
|
repaint();
|
|
}
|
|
});
|
|
|
|
addKeyListener(new KeyAdapter() {
|
|
public void keyPressed(KeyEvent e) {
|
|
int typed = e.getKeyCode();
|
|
switch (typed) {
|
|
case KeyEvent.VK_UP:
|
|
if (selRow > 0) {
|
|
selRow--;
|
|
repaint();
|
|
}
|
|
break;
|
|
case KeyEvent.VK_DOWN:
|
|
if (selRow < numSwatches.height - 1) {
|
|
selRow++;
|
|
repaint();
|
|
}
|
|
break;
|
|
case KeyEvent.VK_LEFT:
|
|
if (selCol > 0 && SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
|
|
selCol--;
|
|
repaint();
|
|
} else if (selCol < numSwatches.width - 1
|
|
&& !SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
|
|
selCol++;
|
|
repaint();
|
|
}
|
|
break;
|
|
case KeyEvent.VK_RIGHT:
|
|
if (selCol < numSwatches.width - 1
|
|
&& SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
|
|
selCol++;
|
|
repaint();
|
|
} else if (selCol > 0 && !SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
|
|
selCol--;
|
|
repaint();
|
|
}
|
|
break;
|
|
case KeyEvent.VK_HOME:
|
|
selCol = 0;
|
|
selRow = 0;
|
|
repaint();
|
|
break;
|
|
case KeyEvent.VK_END:
|
|
selCol = numSwatches.width - 1;
|
|
selRow = numSwatches.height - 1;
|
|
repaint();
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public Color getSelectedColor() {
|
|
return getColorForCell(selCol, selRow);
|
|
}
|
|
|
|
protected void initValues() {
|
|
|
|
}
|
|
|
|
public void paintComponent(Graphics g) {
|
|
g.setColor(getBackground());
|
|
g.fillRect(0,0,getWidth(), getHeight());
|
|
for (int row = 0; row < numSwatches.height; row++) {
|
|
int y = row * (swatchSize.height + gap.height);
|
|
for (int column = 0; column < numSwatches.width; column++) {
|
|
Color c = getColorForCell(column, row);
|
|
g.setColor(c);
|
|
int x;
|
|
if (!this.getComponentOrientation().isLeftToRight()) {
|
|
x = (numSwatches.width - column - 1) * (swatchSize.width + gap.width);
|
|
} else {
|
|
x = column * (swatchSize.width + gap.width);
|
|
}
|
|
g.fillRect( x, y, swatchSize.width, swatchSize.height);
|
|
g.setColor(Color.black);
|
|
g.drawLine( x+swatchSize.width-1, y, x+swatchSize.width-1, y+swatchSize.height-1);
|
|
g.drawLine( x, y+swatchSize.height-1, x+swatchSize.width-1, y+swatchSize.height-1);
|
|
|
|
if (selRow == row && selCol == column && this.isFocusOwner()) {
|
|
Color c2 = new Color(c.getRed() < 125 ? 255 : 0,
|
|
c.getGreen() < 125 ? 255 : 0,
|
|
c.getBlue() < 125 ? 255 : 0);
|
|
g.setColor(c2);
|
|
|
|
g.drawLine(x, y, x + swatchSize.width - 1, y);
|
|
g.drawLine(x, y, x, y + swatchSize.height - 1);
|
|
g.drawLine(x + swatchSize.width - 1, y, x + swatchSize.width - 1, y + swatchSize.height - 1);
|
|
g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y + swatchSize.height - 1);
|
|
g.drawLine(x, y, x + swatchSize.width - 1, y + swatchSize.height - 1);
|
|
g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public Dimension getPreferredSize() {
|
|
int x = numSwatches.width * (swatchSize.width + gap.width) - 1;
|
|
int y = numSwatches.height * (swatchSize.height + gap.height) - 1;
|
|
return new Dimension( x, y );
|
|
}
|
|
|
|
protected void initColors() {
|
|
|
|
|
|
}
|
|
|
|
public String getToolTipText(MouseEvent e) {
|
|
Color color = getColorForLocation(e.getX(), e.getY());
|
|
return color.getRed()+", "+ color.getGreen() + ", " + color.getBlue();
|
|
}
|
|
|
|
public void setSelectedColorFromLocation(int x, int y) {
|
|
if (!this.getComponentOrientation().isLeftToRight()) {
|
|
selCol = numSwatches.width - x / (swatchSize.width + gap.width) - 1;
|
|
} else {
|
|
selCol = x / (swatchSize.width + gap.width);
|
|
}
|
|
selRow = y / (swatchSize.height + gap.height);
|
|
repaint();
|
|
}
|
|
|
|
public Color getColorForLocation( int x, int y ) {
|
|
int column;
|
|
if (!this.getComponentOrientation().isLeftToRight()) {
|
|
column = numSwatches.width - x / (swatchSize.width + gap.width) - 1;
|
|
} else {
|
|
column = x / (swatchSize.width + gap.width);
|
|
}
|
|
int row = y / (swatchSize.height + gap.height);
|
|
return getColorForCell(column, row);
|
|
}
|
|
|
|
private Color getColorForCell( int column, int row) {
|
|
return colors[ (row * numSwatches.width) + column ]; // (STEVE) - change data orientation here
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
class RecentSwatchPanel extends SwatchPanel {
|
|
protected void initValues() {
|
|
swatchSize = UIManager.getDimension("ColorChooser.swatchesRecentSwatchSize", getLocale());
|
|
numSwatches = new Dimension( 5, 7 );
|
|
gap = new Dimension(1, 1);
|
|
}
|
|
|
|
|
|
protected void initColors() {
|
|
Color defaultRecentColor = UIManager.getColor("ColorChooser.swatchesDefaultRecentColor", getLocale());
|
|
int numColors = numSwatches.width * numSwatches.height;
|
|
|
|
colors = new Color[numColors];
|
|
for (int i = 0; i < numColors ; i++) {
|
|
colors[i] = defaultRecentColor;
|
|
}
|
|
}
|
|
|
|
public void setMostRecentColor(Color c) {
|
|
|
|
System.arraycopy( colors, 0, colors, 1, colors.length-1);
|
|
colors[0] = c;
|
|
repaint();
|
|
}
|
|
|
|
}
|
|
|
|
class MainSwatchPanel extends SwatchPanel {
|
|
|
|
|
|
protected void initValues() {
|
|
swatchSize = UIManager.getDimension("ColorChooser.swatchesSwatchSize", getLocale());
|
|
numSwatches = new Dimension( 31, 9 );
|
|
gap = new Dimension(1, 1);
|
|
}
|
|
|
|
protected void initColors() {
|
|
int[] rawValues = initRawValues();
|
|
int numColors = rawValues.length / 3;
|
|
|
|
colors = new Color[numColors];
|
|
for (int i = 0; i < numColors ; i++) {
|
|
colors[i] = new Color( rawValues[(i*3)], rawValues[(i*3)+1], rawValues[(i*3)+2] );
|
|
}
|
|
}
|
|
|
|
private int[] initRawValues() {
|
|
|
|
int[] rawValues = {
|
|
255, 255, 255, // first row.
|
|
204, 255, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
204, 204, 255,
|
|
255, 204, 255,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 204, 204,
|
|
255, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 255, 204,
|
|
204, 204, 204, // second row.
|
|
153, 255, 255,
|
|
153, 204, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
153, 153, 255,
|
|
204, 153, 255,
|
|
255, 153, 255,
|
|
255, 153, 204,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 153, 153,
|
|
255, 204, 153,
|
|
255, 255, 153,
|
|
204, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 153,
|
|
153, 255, 204,
|
|
204, 204, 204, // third row
|
|
102, 255, 255,
|
|
102, 204, 255,
|
|
102, 153, 255,
|
|
102, 102, 255,
|
|
102, 102, 255,
|
|
102, 102, 255,
|
|
102, 102, 255,
|
|
102, 102, 255,
|
|
153, 102, 255,
|
|
204, 102, 255,
|
|
255, 102, 255,
|
|
255, 102, 204,
|
|
255, 102, 153,
|
|
255, 102, 102,
|
|
255, 102, 102,
|
|
255, 102, 102,
|
|
255, 102, 102,
|
|
255, 102, 102,
|
|
255, 153, 102,
|
|
255, 204, 102,
|
|
255, 255, 102,
|
|
204, 255, 102,
|
|
153, 255, 102,
|
|
102, 255, 102,
|
|
102, 255, 102,
|
|
102, 255, 102,
|
|
102, 255, 102,
|
|
102, 255, 102,
|
|
102, 255, 153,
|
|
102, 255, 204,
|
|
153, 153, 153, // fourth row
|
|
51, 255, 255,
|
|
51, 204, 255,
|
|
51, 153, 255,
|
|
51, 102, 255,
|
|
51, 51, 255,
|
|
51, 51, 255,
|
|
51, 51, 255,
|
|
102, 51, 255,
|
|
153, 51, 255,
|
|
204, 51, 255,
|
|
255, 51, 255,
|
|
255, 51, 204,
|
|
255, 51, 153,
|
|
255, 51, 102,
|
|
255, 51, 51,
|
|
255, 51, 51,
|
|
255, 51, 51,
|
|
255, 102, 51,
|
|
255, 153, 51,
|
|
255, 204, 51,
|
|
255, 255, 51,
|
|
204, 255, 51,
|
|
153, 255, 51,
|
|
102, 255, 51,
|
|
51, 255, 51,
|
|
51, 255, 51,
|
|
51, 255, 51,
|
|
51, 255, 102,
|
|
51, 255, 153,
|
|
51, 255, 204,
|
|
153, 153, 153, // Fifth row
|
|
0, 255, 255,
|
|
0, 204, 255,
|
|
0, 153, 255,
|
|
0, 102, 255,
|
|
0, 51, 255,
|
|
0, 0, 255,
|
|
51, 0, 255,
|
|
102, 0, 255,
|
|
153, 0, 255,
|
|
204, 0, 255,
|
|
255, 0, 255,
|
|
255, 0, 204,
|
|
255, 0, 153,
|
|
255, 0, 102,
|
|
255, 0, 51,
|
|
255, 0 , 0,
|
|
255, 51, 0,
|
|
255, 102, 0,
|
|
255, 153, 0,
|
|
255, 204, 0,
|
|
255, 255, 0,
|
|
204, 255, 0,
|
|
153, 255, 0,
|
|
102, 255, 0,
|
|
51, 255, 0,
|
|
0, 255, 0,
|
|
0, 255, 51,
|
|
0, 255, 102,
|
|
0, 255, 153,
|
|
0, 255, 204,
|
|
102, 102, 102, // sixth row
|
|
0, 204, 204,
|
|
0, 204, 204,
|
|
0, 153, 204,
|
|
0, 102, 204,
|
|
0, 51, 204,
|
|
0, 0, 204,
|
|
51, 0, 204,
|
|
102, 0, 204,
|
|
153, 0, 204,
|
|
204, 0, 204,
|
|
204, 0, 204,
|
|
204, 0, 204,
|
|
204, 0, 153,
|
|
204, 0, 102,
|
|
204, 0, 51,
|
|
204, 0, 0,
|
|
204, 51, 0,
|
|
204, 102, 0,
|
|
204, 153, 0,
|
|
204, 204, 0,
|
|
204, 204, 0,
|
|
204, 204, 0,
|
|
153, 204, 0,
|
|
102, 204, 0,
|
|
51, 204, 0,
|
|
0, 204, 0,
|
|
0, 204, 51,
|
|
0, 204, 102,
|
|
0, 204, 153,
|
|
0, 204, 204,
|
|
102, 102, 102, // seventh row
|
|
0, 153, 153,
|
|
0, 153, 153,
|
|
0, 153, 153,
|
|
0, 102, 153,
|
|
0, 51, 153,
|
|
0, 0, 153,
|
|
51, 0, 153,
|
|
102, 0, 153,
|
|
153, 0, 153,
|
|
153, 0, 153,
|
|
153, 0, 153,
|
|
153, 0, 153,
|
|
153, 0, 153,
|
|
153, 0, 102,
|
|
153, 0, 51,
|
|
153, 0, 0,
|
|
153, 51, 0,
|
|
153, 102, 0,
|
|
153, 153, 0,
|
|
153, 153, 0,
|
|
153, 153, 0,
|
|
153, 153, 0,
|
|
153, 153, 0,
|
|
102, 153, 0,
|
|
51, 153, 0,
|
|
0, 153, 0,
|
|
0, 153, 51,
|
|
0, 153, 102,
|
|
0, 153, 153,
|
|
0, 153, 153,
|
|
51, 51, 51, // eigth row
|
|
0, 102, 102,
|
|
0, 102, 102,
|
|
0, 102, 102,
|
|
0, 102, 102,
|
|
0, 51, 102,
|
|
0, 0, 102,
|
|
51, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 102,
|
|
102, 0, 51,
|
|
102, 0, 0,
|
|
102, 51, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
102, 102, 0,
|
|
51, 102, 0,
|
|
0, 102, 0,
|
|
0, 102, 51,
|
|
0, 102, 102,
|
|
0, 102, 102,
|
|
0, 102, 102,
|
|
0, 0, 0, // ninth row
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 51,
|
|
51, 0, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
51, 51, 0,
|
|
0, 51, 0,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
0, 51, 51,
|
|
51, 51, 51 };
|
|
return rawValues;
|
|
}
|
|
}
|