/* -*- 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 + ")"; } }