Chromium Code Reviews| Index: chrome/browser/ui/cocoa/screen_capture_notification_ui_cocoa.mm |
| diff --git a/remoting/host/disconnect_window_mac.mm b/chrome/browser/ui/cocoa/screen_capture_notification_ui_cocoa.mm |
| similarity index 48% |
| copy from remoting/host/disconnect_window_mac.mm |
| copy to chrome/browser/ui/cocoa/screen_capture_notification_ui_cocoa.mm |
| index 12a4f5fc7ab6432bc17b934cb0a95c8dc64d0301..1689870fa17f9e591f7679b1c548e2c30218ebd9 100644 |
| --- a/remoting/host/disconnect_window_mac.mm |
| +++ b/chrome/browser/ui/cocoa/screen_capture_notification_ui_cocoa.mm |
| @@ -1,87 +1,77 @@ |
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// 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. |
| #import <Cocoa/Cocoa.h> |
| -#import "remoting/host/disconnect_window_mac.h" |
| +#include "chrome/browser/ui/cocoa/screen_capture_notification_ui_cocoa.h" |
| #include "base/compiler_specific.h" |
| +#include "base/i18n/rtl.h" |
| +#include "base/mac/bundle_locations.h" |
| #include "base/string_util.h" |
| #include "base/sys_string_conversions.h" |
| -#include "remoting/host/disconnect_window.h" |
| -#include "remoting/host/ui_strings.h" |
| +#include "grit/generated_resources.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| -@interface DisconnectWindowController() |
| -- (BOOL)isRToL; |
| +@interface ScreenCaptureNotificationController() |
| - (void)Hide; |
| @end |
| -namespace remoting { |
| - |
| -class DisconnectWindowMac : public remoting::DisconnectWindow { |
| +class ScreenCaptureNotificationUICocoa : public ScreenCaptureNotificationUI { |
| public: |
| - explicit DisconnectWindowMac(const UiStrings* ui_strings); |
| - virtual ~DisconnectWindowMac(); |
| + ScreenCaptureNotificationUICocoa(); |
| + virtual ~ScreenCaptureNotificationUICocoa(); |
| - virtual bool Show(const base::Closure& disconnect_callback, |
| - const std::string& username) OVERRIDE; |
| - virtual void Hide() OVERRIDE; |
| + // ScreenCaptureNotificationUI interface. |
| + virtual bool Show(const base::Closure& stop_callback, |
| + const string16& title) OVERRIDE; |
| private: |
| - DisconnectWindowController* window_controller_; |
| - |
| - // Points to the localized strings. |
| - const UiStrings* ui_strings_; |
| + ScreenCaptureNotificationController* window_controller_; |
| - DISALLOW_COPY_AND_ASSIGN(DisconnectWindowMac); |
| + DISALLOW_COPY_AND_ASSIGN(ScreenCaptureNotificationUICocoa); |
| }; |
| -DisconnectWindowMac::DisconnectWindowMac(const UiStrings* ui_strings) |
| - : window_controller_(nil), |
| - ui_strings_(ui_strings) { |
| +ScreenCaptureNotificationUICocoa::ScreenCaptureNotificationUICocoa() |
| + : window_controller_(nil) { |
| } |
| -DisconnectWindowMac::~DisconnectWindowMac() { |
| - Hide(); |
| +ScreenCaptureNotificationUICocoa::~ScreenCaptureNotificationUICocoa() { |
| + // ScreenCaptureNotificationController is responsible for releasing itself in |
| + // its windowWillClose: method. |
| + [window_controller_ Hide]; |
| + window_controller_ = nil; |
| } |
| -bool DisconnectWindowMac::Show(const base::Closure& disconnect_callback, |
| - const std::string& username) { |
| - DCHECK(!disconnect_callback.is_null()); |
| +bool ScreenCaptureNotificationUICocoa::Show(const base::Closure& stop_callback, |
| + const string16& title) { |
| + DCHECK(!stop_callback.is_null()); |
| DCHECK(window_controller_ == nil); |
| window_controller_ = |
| - [[DisconnectWindowController alloc] initWithUiStrings:ui_strings_ |
| - callback:disconnect_callback |
| - username:username]; |
| + [[ScreenCaptureNotificationController alloc] |
| + initWithCallback:stop_callback |
| + title:title]; |
| [window_controller_ showWindow:nil]; |
| return true; |
| } |
| -void DisconnectWindowMac::Hide() { |
| - // DisconnectWindowController is responsible for releasing itself in its |
| - // windowWillClose: method. |
| - [window_controller_ Hide]; |
| - window_controller_ = nil; |
| -} |
| - |
| -scoped_ptr<DisconnectWindow> DisconnectWindow::Create( |
| - const UiStrings* ui_strings) { |
| - return scoped_ptr<DisconnectWindow>(new DisconnectWindowMac(ui_strings)); |
| +scoped_ptr<ScreenCaptureNotificationUI> ScreenCaptureNotificationUI::Create() { |
| + return scoped_ptr<ScreenCaptureNotificationUI>( |
| + new ScreenCaptureNotificationUICocoa()); |
| } |
| -} // namespace remoting |
| - |
| -@implementation DisconnectWindowController |
| -- (id)initWithUiStrings:(const remoting::UiStrings*)ui_strings |
| - callback:(const base::Closure&)disconnect_callback |
| - username:(const std::string&)username { |
| - self = [super initWithWindowNibName:@"disconnect_window"]; |
| +@implementation ScreenCaptureNotificationController |
| +- (id)initWithCallback:(const base::Closure&)stop_callback |
| + title:(const string16&)title { |
| + NSString* nibpath = |
| + [base::mac::FrameworkBundle() pathForResource:@"ScreenCaptureNotification" |
| + ofType:@"nib"]; |
| + self = [super initWithWindowNibPath:nibpath owner:self]; |
| if (self) { |
| - ui_strings_ = ui_strings; |
| - disconnect_callback_ = disconnect_callback; |
| - username_ = UTF8ToUTF16(username); |
| + stop_callback_ = stop_callback; |
| + title_ = title; |
| } |
| return self; |
| } |
| @@ -91,68 +81,64 @@ scoped_ptr<DisconnectWindow> DisconnectWindow::Create( |
| } |
| - (IBAction)stopSharing:(id)sender { |
| - if (!disconnect_callback_.is_null()) { |
| - disconnect_callback_.Run(); |
| + if (!stop_callback_.is_null()) { |
| + stop_callback_.Run(); |
| } |
| } |
| -- (BOOL)isRToL { |
| - return ui_strings_->direction == remoting::UiStrings::RTL; |
| -} |
| - |
| - (void)Hide { |
| - disconnect_callback_.Reset(); |
| + stop_callback_.Reset(); |
| [self close]; |
| } |
| - (void)windowDidLoad { |
| - string16 text = ReplaceStringPlaceholders(ui_strings_->disconnect_message, |
| - username_, NULL); |
| - [connectedToField_ setStringValue:base::SysUTF16ToNSString(text)]; |
| + string16 text = l10n_util::GetStringFUTF16( |
| + IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT, title_); |
| + [statusField_ setStringValue:base::SysUTF16ToNSString(text)]; |
| - [disconnectButton_ setTitle:base::SysUTF16ToNSString( |
| - ui_strings_->disconnect_button_text)]; |
| + string16 button_label = |
| + l10n_util::GetStringUTF16(IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_STOP); |
| + [stopButton_ setTitle:base::SysUTF16ToNSString(button_label)]; |
| // Resize the window dynamically based on the content. |
| - CGFloat oldConnectedWidth = NSWidth([connectedToField_ bounds]); |
| - [connectedToField_ sizeToFit]; |
| - NSRect connectedToFrame = [connectedToField_ frame]; |
| - CGFloat newConnectedWidth = NSWidth(connectedToFrame); |
| + CGFloat oldConnectedWidth = NSWidth([statusField_ bounds]); |
| + [statusField_ sizeToFit]; |
| + NSRect statusFrame = [statusField_ frame]; |
| + CGFloat newConnectedWidth = NSWidth(statusFrame); |
| // Set a max width for the connected to text field. |
| - if (newConnectedWidth > |
| - remoting::DisconnectWindow::kMaximumConnectedNameWidthInPixels) { |
| - newConnectedWidth |
| - = remoting::DisconnectWindow::kMaximumConnectedNameWidthInPixels; |
| - connectedToFrame.size.width = newConnectedWidth; |
| - [connectedToField_ setFrame:connectedToFrame]; |
| + const int kMaximumStatusWidth = 400; |
| + if (newConnectedWidth > kMaximumStatusWidth) { |
| + newConnectedWidth = kMaximumStatusWidth; |
| + statusFrame.size.width = newConnectedWidth; |
| + [statusField_ setFrame:statusFrame]; |
| } |
| - CGFloat oldDisconnectWidth = NSWidth([disconnectButton_ bounds]); |
| - [disconnectButton_ sizeToFit]; |
| - NSRect disconnectFrame = [disconnectButton_ frame]; |
| - CGFloat newDisconnectWidth = NSWidth(disconnectFrame); |
| + CGFloat oldstopWidth = NSWidth([stopButton_ bounds]); |
| + [stopButton_ sizeToFit]; |
| + NSRect stopFrame = [stopButton_ frame]; |
| + CGFloat newStopWidth = NSWidth(stopFrame); |
| - // Move the disconnect button appropriately. |
| - disconnectFrame.origin.x += newConnectedWidth - oldConnectedWidth; |
| - [disconnectButton_ setFrame:disconnectFrame]; |
| + // Move the stop button appropriately. |
| + stopFrame.origin.x += newConnectedWidth - oldConnectedWidth; |
| + [stopButton_ setFrame:stopFrame]; |
| // Then resize the window appropriately |
|
Nico
2013/03/22 18:46:37
.
Sergey Ulanov
2013/03/22 19:39:09
Done.
|
| NSWindow *window = [self window]; |
| NSRect windowFrame = [window frame]; |
| windowFrame.size.width += (newConnectedWidth - oldConnectedWidth + |
| - newDisconnectWidth - oldDisconnectWidth); |
| + newStopWidth - oldstopWidth); |
| [window setFrame:windowFrame display:NO]; |
| - if ([self isRToL]) { |
| + if (base::i18n::IsRTL()) { |
| // Handle right to left case |
| - CGFloat buttonInset = NSWidth(windowFrame) - NSMaxX(disconnectFrame); |
| + CGFloat buttonInset = NSWidth(windowFrame) - NSMaxX(stopFrame); |
| CGFloat buttonTextSpacing |
| - = NSMinX(disconnectFrame) - NSMaxX(connectedToFrame); |
| - disconnectFrame.origin.x = buttonInset; |
| - connectedToFrame.origin.x = NSMaxX(disconnectFrame) + buttonTextSpacing; |
| - [connectedToField_ setFrame:connectedToFrame]; |
| - [disconnectButton_ setFrame:disconnectFrame]; |
| + = NSMinX(stopFrame) - NSMaxX(statusFrame); |
| + stopFrame.origin.x = buttonInset; |
| + statusFrame.origin.x = NSMaxX(stopFrame) + buttonTextSpacing; |
| + [statusField_ setFrame:statusFrame]; |
| + [stopButton_ setFrame:stopFrame]; |
| } |
| // Center the window at the bottom of the screen, above the dock (if present). |
| @@ -171,16 +157,11 @@ scoped_ptr<DisconnectWindow> DisconnectWindow::Create( |
| @end |
| -@interface DisconnectWindow() |
| -- (BOOL)isRToL; |
| -@end |
| - |
| -@implementation DisconnectWindow |
| - |
| +@implementation ScreenCaptureNotificationWindow |
| - (id)initWithContentRect:(NSRect)contentRect |
| styleMask:(NSUInteger)aStyle |
| backing:(NSBackingStoreType)bufferingType |
| - defer:(BOOL)flag { |
| + defer:(BOOL)flag { |
| // Pass NSBorderlessWindowMask for the styleMask to remove the title bar. |
| self = [super initWithContentRect:contentRect |
| styleMask:NSBorderlessWindowMask |
| @@ -198,26 +179,9 @@ scoped_ptr<DisconnectWindow> DisconnectWindow::Create( |
| } |
| return self; |
| } |
| - |
| -- (BOOL)isRToL { |
| - DCHECK([[self windowController] respondsToSelector:@selector(isRToL)]); |
| - return [[self windowController] isRToL]; |
| -} |
| - |
| @end |
| - |
| -@interface DisconnectView() |
| -- (BOOL)isRToL; |
| -@end |
| - |
| -@implementation DisconnectView |
| - |
| -- (BOOL)isRToL { |
| - DCHECK([[self window] isKindOfClass:[DisconnectWindow class]]); |
| - return [static_cast<DisconnectWindow*>([self window]) isRToL]; |
| -} |
| - |
| +@implementation ScreenCaptureNotificationView |
| - (void)drawRect:(NSRect)rect { |
| // All magic numbers taken from screen shots provided by UX. |
| NSRect bounds = NSInsetRect([self bounds], 1, 1); |
| @@ -251,8 +215,8 @@ scoped_ptr<DisconnectWindow> DisconnectWindow::Create( |
| [context setShouldAntialias:NO]; |
|
Nico
2013/03/22 18:46:37
Can you upload a screenshot for this please?
Anti
Sergey Ulanov
2013/03/22 19:39:09
Here is a screenshot from mac: http://i.imgur.com/
|
| // Handle bidirectional locales properly. |
|
Nico
2013/03/22 18:46:37
Chrome/Mac doesn't handle RTL as far as I know. (m
|
| - CGFloat inset = [self isRToL] ? NSMaxX(bounds) - kBaseInset - kDragHandleWidth |
| - : kBaseInset; |
| + CGFloat inset = base::i18n::IsRTL() ? |
| + NSMaxX(bounds) - kBaseInset - kDragHandleWidth : kBaseInset; |
| NSPoint top = NSMakePoint(inset, NSMidY(bounds) - kHeight / 2.0); |
| NSPoint bottom = NSMakePoint(inset, top.y + kHeight); |