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

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

Issue 9203001: Implement input type=color UI (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fixed comment Created 8 years, 11 months 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
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..afcefbdedf35d60adc863d652bde1bba7db55484
--- /dev/null
+++ b/chrome/browser/ui/cocoa/color_chooser_mac.mm
@@ -0,0 +1,137 @@
+// 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"
+
+#import "base/mac/cocoa_protocols.h"
+
+#import <Cocoa/Cocoa.h>
+
+class ColorChooserMac;
+
+// A Listener class to act as a event target for NSColorPanel and send
+// the results to the C++ class, ColorChooserMac.
+@interface ColorPanelBridge : NSObject<NSWindowDelegate> {
+ BOOL nonUserChange_;
+ ColorChooserMac* chooser_;
+}
+
+- (id)initWithChooser:(ColorChooserMac*)chooser;
+
+// Called from NSColorPanel
+- (void)didChooseColor:(NSColorPanel *)panel;
+
+- (void)setColor:(NSColor *)color;
+
+@end
+
+class ColorChooserMac : public ColorChooser {
+public:
+
+ virtual ~ColorChooserMac();
+
+ // Called from ColorPanelBridge
+ void DidChooseColor(WebKit::WebColor color);
+ void DidClose();
+
+protected:
+ virtual void Open(Listener* listener, WebKit::WebColor initial_color);
+ virtual void End(Listener* listener);
+ virtual void SetSelectedColor(WebKit::WebColor color);
+
+ void Cleanup();
+
+private:
+ ColorChooser::Listener* listener_;
+ ColorPanelBridge *bridge_;
+};
+
+ColorChooser* ColorChooser::Create() {
+ return new ColorChooserMac();
+}
+
+ColorChooserMac::~ColorChooserMac()
+{
+ End(listener_);
+}
+
+void ColorChooserMac::DidChooseColor(WebKit::WebColor color) {
+ if (!listener_)
+ return;
+ listener_->DidChooseColor(color);
+}
+
+void ColorChooserMac::Open(Listener* listener,
+ WebKit::WebColor initial_color) {
+ listener_ = listener;
+ bridge_ = [[ColorPanelBridge alloc] initWithChooser:this];
+ NSColorPanel* panel = [NSColorPanel sharedColorPanel];
+ [bridge_ setColor:NSColorFromWebColor(initial_color)];
+ [panel setShowsAlpha:NO];
+ [panel setDelegate:bridge_];
+ [panel setTarget:bridge_];
+ [panel setAction:@selector(didChooseColor:)];
+ [panel makeKeyAndOrderFront:NULL];
+}
+
+void ColorChooserMac::Cleanup() {
+ NSColorPanel* panel = [NSColorPanel sharedColorPanel];
+ [panel setDelegate:nil];
+ [panel setTarget:nil];
+ [panel setAction:nil];
+ bridge_ = NULL;
+ if (!listener_)
+ return;
+ listener_ = NULL;
+}
+
+void ColorChooserMac::DidClose() {
+ if (!listener_)
+ return;
+ listener_->DidEnd();
+ Cleanup();
+}
+
+
+void ColorChooserMac::End(Listener* listener) {
+ if (listener_ != listener)
+ return;
+ Cleanup();
+}
+
+void ColorChooserMac::SetSelectedColor(WebKit::WebColor color) {
+ [bridge_ setColor:NSColorFromWebColor(color)];
+}
+
+@implementation ColorPanelBridge
+
+- (id)initWithChooser:(ColorChooserMac*)chooser
+{
+ if (self = [super init])
+ chooser_ = chooser;
+ return self;
+}
+
+- (void)windowWillClose:(NSNotification *)notification {
+ chooser_->DidClose();
+ nonUserChange_ = NO;
+}
+
+- (void)didChooseColor:(NSColorPanel *)panel {
+ if (nonUserChange_) {
+ nonUserChange_ = NO;
+ return;
+ }
+ chooser_->DidChooseColor(WebColorFromNSColor(
+ [[panel color] colorUsingColorSpaceName:NSDeviceRGBColorSpace]));
+ nonUserChange_ = NO;
+}
+
+- (void)setColor:(NSColor *)color {
+ nonUserChange_ = YES;
+ [[NSColorPanel sharedColorPanel] setColor:color];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698