/*
Part of the G4P library for Processing
http://www.lagers.org.uk/g4p/index.html
http://sourceforge.net/projects/g4p/files/?source=navbar
Copyright (c) 2012 Peter Lager
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
*/
package automenta.vivisect.gui;
import java.awt.Color;
import processing.core.PApplet;
import processing.core.PImage;
/**
* Defines a number of color schemes for the GUI components. <br>
*
* It loads an image file with all the colors used by the various colour schemes. <br>
* It will search for a file for a user defined scheme (user_gui_palette.png) and
* if it can't find it it will use the library default scheme (default_gui_palette.png).
*
* @author Peter Lager
*
*/
public class GCScheme implements GConstants {
private static int[][] palettes = null;
private static Color[][] jpalettes = null;
/**
* Set the color scheme to one of the preset schemes
* BLUE / GREEN / RED / PURPLE / YELLOW / CYAN / BROWN
* or if you have created your own schemes following the instructions
* at gui4processing.lagers.org.uk/colorscheme.html then you can enter
* the appropriate numeric value of the scheme.
*
* @param schemeNo
* @return the color scheme based on the scheme number
*/
public static int[] getColor(int schemeNo){
schemeNo = Math.abs(schemeNo) % 16;
return palettes[schemeNo];
}
/**
* Set the color scheme to one of the preset schemes
* BLUE / GREEN / RED / PURPLE / YELLOW / CYAN / BROWN
* or if you have created your own schemes following the instructions
* at gui4processing.lagers.org.uk/colorscheme.html then you can enter
* the appropriate numeric value of the scheme.
*
* @param schemeNo
* @return the color scheme based on the scheme number
*/
public static Color[] getJavaColor(int schemeNo){
schemeNo = Math.abs(schemeNo) % 16;
return jpalettes[schemeNo];
}
/**
* Called every time we create a control. The palettes will be made when
* the first control is created.
*
* @param app
*/
public static void makeColorSchemes(PApplet app) {
// If the palettes have not been created then create them
// otherwise do nothing
if(palettes != null)
return;
// Load the image
PImage image = null;
/*InputStream is = app.createInput("user_gui_palette.png");
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
image = app.loadImage("user_gui_palette.png");
GMessenger.message(USER_COL_SCHEME, null);
}
else*/ {
// User image not provided
image = app.loadImage("data/default_gui_palette.png");
// Added to 3.4 to hopefully fix problem with OpenProcessing
if(image == null)
image = new PImage((new javax.swing.ImageIcon(new GCScheme().getClass().getResource("/data/default_gui_palette.png"))).getImage());
}
// Now make the palletes
palettes = new int[16][16];
jpalettes = new Color[16][16];
for(int p = 0; p < 16; p++)
for(int c = 0; c < 16; c++){
int col = image.get(c * 16 + 8, p * 16 + 8);
palettes[p][c] = col;
jpalettes[p][c] = new Color((col >> 16) & 0xff, (col >> 8) & 0xff, col & 0xff);
}
}
/**
* This method is called by the G4P GUI Builder tool when there is no
* sketch = no PApplet object to use
*/
public static void makeColorSchemes() {
// If the palettes have not been created then create them
// otherwise do nothing
if(palettes != null)
return;
// Load the image
PImage image = new PImage((new javax.swing.ImageIcon(new GCScheme().getClass().getResource("/data/default_gui_palette.png"))).getImage());
// Now make the palletes
palettes = new int[16][16];
jpalettes = new Color[16][16];
for(int p = 0; p < 16; p++)
for(int c = 0; c < 16; c++){
int col = image.get(c * 16 + 8, p * 16 + 8);
palettes[p][c] = col;
jpalettes[p][c] = new Color((col >> 16) & 0xff, (col >> 8) & 0xff, col & 0xff);
}
}
}