/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Processing project - http://processing.org
Copyright (c) 2012-15 The Processing Foundation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
This program 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 for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package processing.mode.java.tweak;
public class ColorMode {
final static int RGB = 0;
final static int HSB = 1;
float v1Max, v2Max, v3Max, aMax;
int modeType;
boolean unrecognizedMode;
String drawContext;
public ColorMode(String context) {
this.drawContext = context;
modeType = RGB;
v1Max = 255;
v2Max = 255;
v3Max = 255;
aMax = 255;
unrecognizedMode = false;
}
public ColorMode(String context, int type,
float v1, float v2, float v3, float a) {
this.drawContext = context;
modeType = type;
v1Max = v1;
v2Max = v2;
v3Max = v3;
aMax = a;
unrecognizedMode = false;
}
static public ColorMode fromString(String context, String mode) {
try {
String[] elements = mode.split(",");
// determine the type of the color mode
int type = RGB;
if (elements[0].trim().equals("HSB")) {
type = HSB;
}
if (elements.length == 1) {
// colorMode in the form of colorMode(type)
return new ColorMode(context, type, 255, 255, 255, 255);
} else if (elements.length == 2) {
// colorMode in the form of colorMode(type, max)
float max = Float.parseFloat(elements[1].trim());
return new ColorMode(context, type, max, max, max, max);
} else if (elements.length == 4) {
// colorMode in the form of colorMode(type, max1, max2, max3)
float r = Float.parseFloat(elements[1].trim());
float g = Float.parseFloat(elements[2].trim());
float b = Float.parseFloat(elements[3].trim());
return new ColorMode(context, type, r, g, b, 255);
} else if (elements.length == 5) {
// colorMode in the form of colorMode(type, max1, max2, max3, maxA)
float r = Float.parseFloat(elements[1].trim());
float g = Float.parseFloat(elements[2].trim());
float b = Float.parseFloat(elements[3].trim());
float a = Float.parseFloat(elements[4].trim());
return new ColorMode(context, type, r, g, b, a);
}
} catch (Exception e) { }
// if we failed to parse this mode (uses variables etc..)
// we should still keep it so we'll know there is a mode declaration
// and we should mark it as unrecognizable
ColorMode newMode = new ColorMode(context);
newMode.unrecognizedMode = true;
return newMode;
}
public String toString() {
String type = (modeType == RGB) ? "RGB" : "HSB";
return "ColorMode: " + type +
": (" + v1Max + ", " + v2Max + ", " + v3Max + ", " + aMax + ")";
}
}