| 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..158a23de59f540066c0c88c1f04828a95c7bd0dc 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
|
| + // Then resize the window appropriately.
|
| 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];
|
|
|
| // Handle bidirectional locales properly.
|
| - 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);
|
|
|