color_chooser_aura.cc revision f2477e01787aa58f445919b809d89e252beef54f
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::current_color_chooser_ = NULL; 15 16ColorChooserAura::ColorChooserAura(content::WebContents* web_contents, 17 SkColor initial_color) 18 : web_contents_(web_contents) { 19 view_ = new views::ColorChooserView(this, initial_color); 20 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 21 widget_ = views::Widget::CreateWindowWithParent( 22 view_, browser->window()->GetNativeWindow()); 23 widget_->Show(); 24} 25 26void ColorChooserAura::OnColorChosen(SkColor color) { 27 if (web_contents_) 28 web_contents_->DidChooseColorInColorChooser(color); 29} 30 31void ColorChooserAura::OnColorChooserDialogClosed() { 32 view_ = NULL; 33 widget_ = NULL; 34 DidEndColorChooser(); 35} 36 37void ColorChooserAura::End() { 38 if (widget_ && widget_->IsVisible()) { 39 view_->set_listener(NULL); 40 widget_->Close(); 41 view_ = NULL; 42 widget_ = NULL; 43 // DidEndColorChooser will invoke Browser::DidEndColorChooser, which deletes 44 // this. Take care of the call order. 45 DidEndColorChooser(); 46 } 47} 48 49void ColorChooserAura::DidEndColorChooser() { 50 DCHECK(current_color_chooser_ == this); 51 current_color_chooser_ = NULL; 52 if (web_contents_) 53 web_contents_->DidEndColorChooser(); 54} 55 56void ColorChooserAura::SetSelectedColor(SkColor color) { 57 if (view_) 58 view_->OnColorChanged(color); 59} 60 61// static 62ColorChooserAura* ColorChooserAura::Open( 63 content::WebContents* web_contents, SkColor initial_color) { 64 if (current_color_chooser_) 65 current_color_chooser_->End(); 66 DCHECK(!current_color_chooser_); 67 current_color_chooser_ = new ColorChooserAura(web_contents, initial_color); 68 return current_color_chooser_; 69} 70 71#if !defined(OS_WIN) 72namespace chrome { 73 74content::ColorChooser* ShowColorChooser(content::WebContents* web_contents, 75 SkColor initial_color) { 76 return ColorChooserAura::Open(web_contents, initial_color); 77} 78 79} // namespace chrome 80#endif // OS_WIN 81