1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/views/color_chooser_aura.h"
6
7#include "chrome/browser/ui/browser_dialogs.h"
8#include "chrome/browser/ui/browser_finder.h"
9#include "chrome/browser/ui/browser_window.h"
10#include "content/public/browser/web_contents.h"
11#include "ui/views/color_chooser/color_chooser_view.h"
12#include "ui/views/widget/widget.h"
13
14ColorChooserAura::ColorChooserAura(content::WebContents* web_contents,
15                                   SkColor initial_color)
16    : web_contents_(web_contents) {
17  view_ = new views::ColorChooserView(this, initial_color);
18  widget_ = views::Widget::CreateWindowWithParent(
19      view_, web_contents->GetTopLevelNativeWindow());
20  widget_->Show();
21}
22
23void ColorChooserAura::OnColorChosen(SkColor color) {
24  if (web_contents_)
25    web_contents_->DidChooseColorInColorChooser(color);
26}
27
28void ColorChooserAura::OnColorChooserDialogClosed() {
29  view_ = NULL;
30  widget_ = NULL;
31  DidEndColorChooser();
32}
33
34void ColorChooserAura::End() {
35  if (widget_) {
36    view_->set_listener(NULL);
37    widget_->Close();
38    view_ = NULL;
39    widget_ = NULL;
40    // DidEndColorChooser will invoke Browser::DidEndColorChooser, which deletes
41    // this. Take care of the call order.
42    DidEndColorChooser();
43  }
44}
45
46void ColorChooserAura::DidEndColorChooser() {
47  if (web_contents_)
48    web_contents_->DidEndColorChooser();
49}
50
51void ColorChooserAura::SetSelectedColor(SkColor color) {
52  if (view_)
53    view_->OnColorChanged(color);
54}
55
56// static
57ColorChooserAura* ColorChooserAura::Open(
58    content::WebContents* web_contents, SkColor initial_color) {
59  return new ColorChooserAura(web_contents, initial_color);
60}
61
62#if !defined(OS_WIN)
63namespace chrome {
64
65content::ColorChooser* ShowColorChooser(content::WebContents* web_contents,
66                                        SkColor initial_color) {
67  return ColorChooserAura::Open(web_contents, initial_color);
68}
69
70}  // namespace chrome
71#endif  // OS_WIN
72