package com.vitco.layout.content.colorchooser.components.colorslider; import com.vitco.layout.content.colorchooser.components.ColorSliderPrototype; import com.vitco.layout.content.colorchooser.components.NumberBox; import com.vitco.util.misc.ColorTools; import javax.swing.*; import javax.swing.event.ChangeEvent; import java.awt.*; /** * hsb tab */ public class HSBTab extends TabPrototype { private final static int HUE_STEPCOUNT = 360; private final static int STEPCOUNT = 100; private final HorizontalColorSlider sSlider = new HorizontalColorSlider(0, STEPCOUNT, 0); private final HorizontalColorSlider bSlider = new HorizontalColorSlider(0, STEPCOUNT, 0); public HSBTab() { NumberBox hBox = new NumberBox(0, HUE_STEPCOUNT, 0); NumberBox sBox = new NumberBox(0, STEPCOUNT, 0); NumberBox bBox = new NumberBox(0, STEPCOUNT, 0); HorizontalHueSlider hSlider = new HorizontalHueSlider(0, HUE_STEPCOUNT, 0); init( new String[]{"H", "S", "B"}, new ColorSliderPrototype[]{hSlider, sSlider, bSlider}, new NumberBox[]{hBox, sBox, bBox} ); } @Override protected void onSliderChange(int id, ChangeEvent e) { JSlider source = ((JSlider) e.getSource()); hsb = new float[]{ id == 0 ? (float) source.getValue() / HUE_STEPCOUNT : hsb[0], id == 1 ? (float) source.getValue() / STEPCOUNT : hsb[1], id == 2 ? (float) source.getValue() / STEPCOUNT : hsb[2]}; update(ColorTools.hsbToColor(hsb), false, !source.getValueIsAdjusting()); } @Override protected void onTextFieldChange(int id, NumberBox source) { hsb = new float[]{ id == 0 ? (float) source.getValue() / HUE_STEPCOUNT : hsb[0], id == 1 ? (float) source.getValue() / STEPCOUNT : hsb[1], id == 2 ? (float) source.getValue() / STEPCOUNT : hsb[2]}; update(ColorTools.hsbToColor(hsb), false, true); } @Override protected void refreshUI() { sSlider.setLeftColor(ColorTools.hsbToColor(new float[] {hsb[0], 0, hsb[2]})); sSlider.setRightColor(ColorTools.hsbToColor(new float[] {hsb[0], 1, hsb[2]})); sSlider.repaint(); bSlider.setLeftColor(ColorTools.hsbToColor(new float[] {hsb[0], hsb[1], 0})); bSlider.setRightColor(ColorTools.hsbToColor(new float[] {hsb[0], hsb[1], 1})); bSlider.repaint(); // set the values setValues(new int[] { Math.round(hsb[0] * HUE_STEPCOUNT), Math.round(hsb[1] * STEPCOUNT), Math.round(hsb[2] * STEPCOUNT) }); } // internal variable private float[] hsb = new float[3]; @Override protected void notifyColorChange(Color color) { hsb = ColorTools.colorToHSB(color); } }