From de494981029b6558222d50e472f6019c6ed5f1ba Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 31 Oct 2014 23:06:50 +0800 Subject: [PATCH] aura: Add color chooser dialog --- atom.gyp | 2 + .../browser/ui/views/color_chooser_aura.cc | 69 +++++++++++++++++++ .../browser/ui/views/color_chooser_aura.h | 58 ++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 chromium_src/chrome/browser/ui/views/color_chooser_aura.cc create mode 100644 chromium_src/chrome/browser/ui/views/color_chooser_aura.h diff --git a/atom.gyp b/atom.gyp index 52940e144fcc..842f199b8327 100644 --- a/atom.gyp +++ b/atom.gyp @@ -304,6 +304,8 @@ 'chromium_src/chrome/browser/speech/tts_win.cc', 'chromium_src/chrome/browser/ui/browser_dialogs.h', 'chromium_src/chrome/browser/ui/cocoa/color_chooser_mac.mm', + 'chromium_src/chrome/browser/ui/views/color_chooser_aura.cc', + 'chromium_src/chrome/browser/ui/views/color_chooser_aura.h', 'chromium_src/chrome/browser/ui/libgtk2ui/app_indicator_icon_menu.cc', 'chromium_src/chrome/browser/ui/libgtk2ui/app_indicator_icon_menu.h', 'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_status_icon.cc', diff --git a/chromium_src/chrome/browser/ui/views/color_chooser_aura.cc b/chromium_src/chrome/browser/ui/views/color_chooser_aura.cc new file mode 100644 index 000000000000..95bdb7c46d94 --- /dev/null +++ b/chromium_src/chrome/browser/ui/views/color_chooser_aura.cc @@ -0,0 +1,69 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/color_chooser_aura.h" + +#include "chrome/browser/ui/browser_dialogs.h" +#include "content/public/browser/web_contents.h" +#include "ui/views/color_chooser/color_chooser_view.h" +#include "ui/views/widget/widget.h" + +ColorChooserAura::ColorChooserAura(content::WebContents* web_contents, + SkColor initial_color) + : web_contents_(web_contents) { + view_ = new views::ColorChooserView(this, initial_color); + widget_ = views::Widget::CreateWindowWithParent( + view_, web_contents->GetTopLevelNativeWindow()); + widget_->Show(); +} + +void ColorChooserAura::OnColorChosen(SkColor color) { + if (web_contents_) + web_contents_->DidChooseColorInColorChooser(color); +} + +void ColorChooserAura::OnColorChooserDialogClosed() { + view_ = NULL; + widget_ = NULL; + DidEndColorChooser(); +} + +void ColorChooserAura::End() { + if (widget_) { + view_->set_listener(NULL); + widget_->Close(); + view_ = NULL; + widget_ = NULL; + // DidEndColorChooser will invoke Browser::DidEndColorChooser, which deletes + // this. Take care of the call order. + DidEndColorChooser(); + } +} + +void ColorChooserAura::DidEndColorChooser() { + if (web_contents_) + web_contents_->DidEndColorChooser(); +} + +void ColorChooserAura::SetSelectedColor(SkColor color) { + if (view_) + view_->OnColorChanged(color); +} + +// static +ColorChooserAura* ColorChooserAura::Open( + content::WebContents* web_contents, SkColor initial_color) { + return new ColorChooserAura(web_contents, initial_color); +} + +#if !defined(OS_WIN) +namespace chrome { + +content::ColorChooser* ShowColorChooser(content::WebContents* web_contents, + SkColor initial_color) { + return ColorChooserAura::Open(web_contents, initial_color); +} + +} // namespace chrome +#endif // OS_WIN diff --git a/chromium_src/chrome/browser/ui/views/color_chooser_aura.h b/chromium_src/chrome/browser/ui/views/color_chooser_aura.h new file mode 100644 index 000000000000..cb33d6a3983e --- /dev/null +++ b/chromium_src/chrome/browser/ui/views/color_chooser_aura.h @@ -0,0 +1,58 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_COLOR_CHOOSER_AURA_H_ +#define CHROME_BROWSER_UI_VIEWS_COLOR_CHOOSER_AURA_H_ + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "content/public/browser/color_chooser.h" +#include "ui/views/color_chooser/color_chooser_listener.h" + +namespace content { +class WebContents; +} + +namespace views { +class ColorChooserView; +class Widget; +} + +// TODO(mukai): rename this as -Ash and move to c/b/ui/ash after Linux-aura +// switches to its native color chooser. +class ColorChooserAura : public content::ColorChooser, + public views::ColorChooserListener { + public: + static ColorChooserAura* Open(content::WebContents* web_contents, + SkColor initial_color); + + private: + ColorChooserAura(content::WebContents* web_contents, SkColor initial_color); + + // content::ColorChooser overrides: + virtual void End() OVERRIDE; + virtual void SetSelectedColor(SkColor color) OVERRIDE; + + // views::ColorChooserListener overrides: + virtual void OnColorChosen(SkColor color) OVERRIDE; + virtual void OnColorChooserDialogClosed() OVERRIDE; + + void DidEndColorChooser(); + + // The actual view of the color chooser. No ownership because its parent + // view will take care of its lifetime. + views::ColorChooserView* view_; + + // The widget for the color chooser. No ownership because it's released + // automatically when closed. + views::Widget* widget_; + + // The web contents invoking the color chooser. No ownership because it will + // outlive this class. + content::WebContents* web_contents_; + + DISALLOW_COPY_AND_ASSIGN(ColorChooserAura); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_COLOR_CHOOSER_AURA_H_