/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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.vaadin.v7.ui.components.colorpicker;
import java.lang.reflect.Method;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.v7.shared.ui.colorpicker.Color;
import com.vaadin.v7.shared.ui.colorpicker.ColorPickerGradientServerRpc;
import com.vaadin.v7.shared.ui.colorpicker.ColorPickerGradientState;
import com.vaadin.v7.ui.AbstractColorPicker.Coordinates2Color;
/**
* A component that represents a color gradient within a color picker.
*
* @since 7.0.0
*/
@Deprecated
public class ColorPickerGradient extends AbstractComponent implements
ColorSelector {
private static final Method COLOR_CHANGE_METHOD;
static {
try {
COLOR_CHANGE_METHOD = ColorChangeListener.class.getDeclaredMethod(
"colorChanged", new Class[] { ColorChangeEvent.class });
} catch (final java.lang.NoSuchMethodException e) {
// This should never happen
throw new java.lang.RuntimeException(
"Internal error finding methods in ColorPicker");
}
}
private ColorPickerGradientServerRpc rpc = new ColorPickerGradientServerRpc() {
@Override
public void select(int cursorX, int cursorY) {
x = cursorX;
y = cursorY;
color = converter.calculate(x, y);
fireColorChanged(color);
}
};
/** The converter. */
private Coordinates2Color converter;
/** The foreground color. */
private Color color;
/** The x-coordinate. */
private int x = 0;
/** The y-coordinate. */
private int y = 0;
private ColorPickerGradient() {
registerRpc(rpc);
// width and height must be set here instead of in theme, otherwise
// coordinate calculations fail
getState().width = "220px";
getState().height = "220px";
}
/**
* Instantiates a new color picker gradient.
*
* @param id
* the id
* @param converter
* the converter
*/
public ColorPickerGradient(String id, Coordinates2Color converter) {
this();
addStyleName(id);
this.converter = converter;
}
@Override
public void setColor(Color c) {
color = c;
int[] coords = converter.calculate(c);
x = coords[0];
y = coords[1];
getState().cursorX = x;
getState().cursorY = y;
}
@Override
public void addColorChangeListener(ColorChangeListener listener) {
addListener(ColorChangeEvent.class, listener, COLOR_CHANGE_METHOD);
}
@Override
public void removeColorChangeListener(ColorChangeListener listener) {
removeListener(ColorChangeEvent.class, listener);
}
/**
* Sets the background color.
*
* @param color
* the new background color
*/
public void setBackgroundColor(Color color) {
getState().bgColor = color.getCSS();
}
@Override
public Color getColor() {
return color;
}
/**
* Notifies the listeners that the color has changed
*
* @param color
* The color which it changed to
*/
public void fireColorChanged(Color color) {
fireEvent(new ColorChangeEvent(this, color));
}
@Override
protected ColorPickerGradientState getState() {
return (ColorPickerGradientState) super.getState();
}
}