15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_COLOR_CHOOSER_COLOR_CHOOSER_VIEW_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_COLOR_CHOOSER_COLOR_CHOOSER_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkScalar.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield_controller.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_export.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ColorChooserListener; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Textfield; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ColorChooserView provides the UI to choose a color by mouse and/or keyboard. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is typically used for <input type="color">. Currently the user can 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// choose a color by dragging over the bar for hue and the area for saturation 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and value. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT ColorChooserView : public WidgetDelegateView, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public TextfieldController { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColorChooserView(ColorChooserListener* listener, SkColor initial_color); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ColorChooserView(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when its color value is changed in the web contents. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnColorChanged(SkColor color); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the user chooses a hue from the UI. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnHueChosen(SkScalar hue); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the user chooses saturation/value from the UI. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSaturationValueChosen(SkScalar saturation, SkScalar value); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float hue() const { return hsv_[0]; } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float saturation() const { return hsv_[1]; } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float value() const { return hsv_[2]; } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_listener(ColorChooserListener* listener) { listener_ = listener; } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class HueView; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SaturationValueView; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SelectedColorPatchView; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WidgetDelegate overrides: 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool CanMinimize() const OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual View* GetInitiallyFocusedView() OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::ModalType GetModalType() const OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WindowClosing() OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual View* GetContentsView() OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TextfieldController overrides: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ContentsChanged(Textfield* sender, 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& new_contents) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyEvent(Textfield* sender, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& key_event) OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The current color in HSV coordinate. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkScalar hsv_[3]; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pointer to the current color chooser for callbacks. It doesn't take 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ownership on |listener_| so the user of this class should take care of 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its lifetime. See chrome/browser/ui/browser.cc for example. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColorChooserListener* listener_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Child views. These are owned as part of the normal views hierarchy. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The view of hue chooser. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HueView* hue_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The view of saturation/value choosing area. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SaturationValueView* saturation_value_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The textfield to write the color explicitly. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Textfield* textfield_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The rectangle to denote the selected color. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SelectedColorPatchView* selected_color_patch_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ColorChooserView); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_COLOR_CHOOSER_COLOR_CHOOSER_VIEW_H_ 90