/* * 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.ui.components.colorpicker; import java.util.Objects; import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.shared.ui.colorpicker.ColorPickerGradientServerRpc; import com.vaadin.shared.ui.colorpicker.ColorPickerGradientState; import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; import com.vaadin.ui.AbstractField; /** * A component that represents a color gradient within a color picker. * * @since 7.0.0 */ public class ColorPickerGradient extends AbstractField<Color> { private ColorPickerGradientServerRpc rpc = new ColorPickerGradientServerRpc() { @Override public void select(int cursorX, int cursorY) { setValue(converter.calculate(cursorX, cursorY), true); } }; /** The converter. */ private Coordinates2Color converter; /** The foreground color. */ private Color color; 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; } /** * Sets the value of this object. If the new value is not equal to * {@code getValue()}, fires a {@link ValueChangeEvent}. Throws * {@code NullPointerException} if the value is null. * * @param color * the new color, not {@code null} * @throws NullPointerException * if {@code color} is {@code null} */ @Override public void setValue(Color color) { Objects.requireNonNull(color, "value must not be null"); super.setValue(color); } @Override public Color getValue() { return color; } @Override protected void doSetValue(Color color) { this.color = color; int[] coords = converter.calculate(color); getState().cursorX = coords[0]; getState().cursorY = coords[1]; } /** * Sets the background color. * * @param color * the new background color */ public void setBackgroundColor(Color color) { getState().bgColor = color.getCSS(); } @Override protected ColorPickerGradientState getState() { return (ColorPickerGradientState) super.getState(); } @Override protected ColorPickerGradientState getState(boolean markAsDirty) { return (ColorPickerGradientState) super.getState(markAsDirty); } }