Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1003)

Unified Diff: chrome/browser/ui/cocoa/color_chooser_mac.mm

Issue 7687006: Implement input type=color UI (mac part) (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: rebaselined Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/color_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/color_chooser_mac.mm
diff --git a/chrome/browser/ui/cocoa/color_chooser_mac.mm b/chrome/browser/ui/cocoa/color_chooser_mac.mm
new file mode 100644
index 0000000000000000000000000000000000000000..e44e50b4284d9f7351e3cd1e51aff107d27385da
--- /dev/null
+++ b/chrome/browser/ui/cocoa/color_chooser_mac.mm
@@ -0,0 +1,119 @@
+// Copyright (c) 2011 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/color_chooser.h"
+#include "chrome/browser/ui/cocoa/color_utils.h"
+
+#if defined(ENABLE_INPUT_COLOR)
+
+#import "base/mac/cocoa_protocols.h"
+
+#import <Cocoa/Cocoa.h>
+
+// A Listener class to act as a event target for NSColorPanel and send
+// the results to the C++ class, ColorChooserImpl.
+@interface ColorPanelBridge : NSObject<NSWindowDelegate>
+
++ (ColorPanelBridge*)sharedBridge;
+
+// Called from NSColorPanel
+- (void)didChooseColor:(NSColorPanel *)panel;
+
+@end
+
+class ColorChooserImpl : public ColorChooser {
+public:
+ // Get the singleton instance of this class.
+ static ColorChooserImpl* GetInstance();
+
+ virtual ~ColorChooserImpl();
+
+ // Called from ColorPanelBridge
+ void didChooseColor(WebKit::WebColor color);
+ void cleanup();
+
+protected:
+ virtual void openImpl(Listener* listener, WebKit::WebColor initial_color);
+ virtual void cleanupImpl(Listener* listener);
+ void setSelectedColorImpl(WebKit::WebColor color);
+
+private:
+ ColorChooser::Listener* listener_;
+};
+
+ColorChooser* ColorChooser::GetInstance() {
+ return ColorChooserImpl::GetInstance();
+}
+
+ColorChooserImpl* ColorChooserImpl::GetInstance() {
+ return Singleton<ColorChooserImpl>::get();
+}
+
+ColorChooserImpl::~ColorChooserImpl()
+{
+ cleanupImpl(listener_);
+}
+
+void ColorChooserImpl::didChooseColor(WebKit::WebColor color) {
+ if (!listener_)
+ return;
+ listener_->DidChooseColor(color);
+}
+
+void ColorChooserImpl::openImpl(Listener* listener,
+ WebKit::WebColor initial_color) {
+ listener_ = listener;
+ NSColorPanel* panel = [NSColorPanel sharedColorPanel];
+ [panel setColor:NSColorFromWebColor(initial_color)];
+ [panel setShowsAlpha:NO];
+ [panel setDelegate:[ColorPanelBridge sharedBridge]];
+ [panel setTarget:[ColorPanelBridge sharedBridge]];
+ [panel setAction:@selector(didChooseColor:)];
+ [panel makeKeyAndOrderFront:NULL];
+}
+
+void ColorChooserImpl::cleanup() {
+ NSColorPanel* panel = [NSColorPanel sharedColorPanel];
+ [panel setDelegate:nil];
+ [panel setTarget:nil];
+ [panel setAction:NULL];
+ if (!listener_)
+ return;
+ listener_->DidCleanup();
+ listener_ = 0;
+}
+
+void ColorChooserImpl::cleanupImpl(Listener* listener) {
+ if (listener_ != listener)
+ return;
+ cleanup();
+}
+
+void ColorChooserImpl::setSelectedColorImpl(WebKit::WebColor color) {
+ NSColorPanel* panel = [NSColorPanel sharedColorPanel];
+ [panel setColor:NSColorFromWebColor(color)];
+}
+
+@implementation ColorPanelBridge
+
+static ColorPanelBridge *sharedColorPanelBridge = nil;
+
++ (ColorPanelBridge*)sharedBridge {
+ if (!sharedColorPanelBridge)
+ sharedColorPanelBridge = [[ColorPanelBridge alloc] init];
+ return sharedColorPanelBridge;
+}
+
+- (void)windowWillClose:(NSNotification *)notification {
+ ColorChooserImpl::GetInstance()->cleanup();
+}
+
+- (void)didChooseColor:(NSColorPanel *)panel {
+ ColorChooserImpl::GetInstance()->didChooseColor(WebColorFromNSColor(
+ [[panel color] colorUsingColorSpaceName:NSDeviceRGBColorSpace]));
+}
+
+@end
+
+#endif // defined(ENABLE_INPUT_COLOR)
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/color_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698