/*
* ******************************************************************************
* * Copyright 2015 See AUTHORS file.
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
* *****************************************************************************
*/
package com.commons.color;
/**
* Created by azakhary on 7/14/2015.
*/
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.Disposable;
import com.kotcrab.vis.ui.Sizes;
import com.kotcrab.vis.ui.widget.VisLabel;
import com.kotcrab.vis.ui.widget.VisTable;
import com.kotcrab.vis.ui.widget.color.AlphaChannelBar;
import com.kotcrab.vis.ui.widget.color.ChannelBar;
import com.kotcrab.vis.ui.widget.color.ColorPickerStyle;
/**
* Used to display one color channel (hue, saturation etc.) with label, ColorInputField and ChannelBar
* @author Kotcrab
*/
public class ColorChannelWidget extends VisTable implements Disposable {
private ColorPickerStyle style;
private Sizes sizes;
private int value;
private int maxValue;
public ColorChannelWidgetListener drawer;
private boolean useAlpha;
private ColorInputField inputField;
private Texture texture;
private Pixmap pixmap;
private ChannelBar bar;
private ChangeListener barListener;
public ColorChannelWidget (ColorPickerStyle style, Sizes sizes, String label, int maxValue, final ColorChannelWidgetListener drawer) {
this(style, sizes, label, maxValue, false, drawer);
}
public ColorChannelWidget (ColorPickerStyle style, Sizes sizes, String label, int maxValue, boolean useAlpha, final ColorChannelWidgetListener drawer) {
super(true);
this.style = style;
this.sizes = sizes;
this.value = 0;
this.maxValue = maxValue;
this.drawer = drawer;
this.useAlpha = useAlpha;
barListener = new ChangeListener() {
@Override
public void changed (ChangeEvent event, Actor actor) {
value = bar.getValue();
drawer.updateFields();
inputField.setValue(value);
}
};
if (useAlpha)
pixmap = new Pixmap(maxValue, 1, Pixmap.Format.RGBA8888);
else
pixmap = new Pixmap(maxValue, 1, Pixmap.Format.RGB888);
texture = new Texture(pixmap);
add(new VisLabel(label)).width(10 * sizes.scaleFactor).center();
add(inputField = new ColorInputField(maxValue, new ColorInputField.ColorInputFieldListener() {
@Override
public void changed (int newValue) {
value = newValue;
drawer.updateFields();
bar.setValue(newValue);
}
})).width(CustomColorPicker.FIELD_WIDTH * sizes.scaleFactor);
add(bar = createBarImage()).size(CustomColorPicker.BAR_WIDTH * sizes.scaleFactor, CustomColorPicker.BAR_HEIGHT * sizes.scaleFactor);
inputField.setValue(0);
}
@Override
public void dispose () {
pixmap.dispose();
texture.dispose();
}
public void redraw () {
drawer.draw(pixmap);
texture.draw(pixmap, 0, 0);
}
public int getValue () {
return value;
}
public void setValue (int value) {
this.value = value;
inputField.setValue(value);
bar.setValue(value);
}
private ChannelBar createBarImage () {
if (useAlpha)
return new AlphaChannelBar(style, sizes, texture, value, maxValue, barListener);
else
return new ChannelBar(style, sizes, texture, value, maxValue, barListener);
}
public boolean isInputValid () {
return inputField.isInputValid();
}
interface ColorChannelWidgetListener {
void updateFields ();
void draw (Pixmap pixmap);
}
}