summaryrefslogtreecommitdiffstats
path: root/remoting/host/disconnect_window_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/host/disconnect_window_mac.mm')
-rw-r--r--remoting/host/disconnect_window_mac.mm119
1 files changed, 119 insertions, 0 deletions
diff --git a/remoting/host/disconnect_window_mac.mm b/remoting/host/disconnect_window_mac.mm
index 0743c1b..0f177aa 100644
--- a/remoting/host/disconnect_window_mac.mm
+++ b/remoting/host/disconnect_window_mac.mm
@@ -13,6 +13,7 @@
#include "remoting/host/disconnect_window.h"
namespace remoting {
+
class DisconnectWindowMac : public remoting::DisconnectWindow {
public:
DisconnectWindowMac();
@@ -57,6 +58,7 @@ void DisconnectWindowMac::Hide() {
remoting::DisconnectWindow* remoting::DisconnectWindow::Create() {
return new DisconnectWindowMac;
}
+
} // namespace remoting
@interface DisconnectWindowController()
@@ -110,6 +112,27 @@ remoting::DisconnectWindow* remoting::DisconnectWindow::Create() {
[disconnectButton_ setTitle:base::SysUTF16ToNSString(
host_->ui_strings().disconnect_button_text_plus_shortcut)];
+
+ // Resize the window dynamically based on the content.
+ CGFloat oldConnectedWidth = NSWidth([connectedToField_ bounds]);
+ [connectedToField_ sizeToFit];
+ CGFloat newConnectedWidth = NSWidth([connectedToField_ bounds]);
+
+ CGFloat oldDisconnectWidth = NSWidth([disconnectButton_ bounds]);
+ [disconnectButton_ sizeToFit];
+ NSRect disconnectBounds = [disconnectButton_ frame];
+ CGFloat newDisconnectWidth = NSWidth(disconnectBounds);
+
+ // Move the disconnect button appropriately.
+ disconnectBounds.origin.x += newConnectedWidth - oldConnectedWidth;
+ [disconnectButton_ setFrame:disconnectBounds];
+
+ // Then resize the window appropriately
+ NSWindow *window = [self window];
+ NSRect windowFrame = [window frame];
+ windowFrame.size.width += (newConnectedWidth - oldConnectedWidth +
+ newDisconnectWidth - oldDisconnectWidth);
+ [window setFrame:windowFrame display:NO];
}
- (void)windowWillClose:(NSNotification*)notification {
@@ -118,3 +141,99 @@ remoting::DisconnectWindow* remoting::DisconnectWindow::Create() {
}
@end
+
+@implementation DisconnectWindow
+
+- (id)initWithContentRect:(NSRect)contentRect
+ styleMask:(unsigned int)aStyle
+ backing:(NSBackingStoreType)bufferingType
+ defer:(BOOL)flag {
+ // Pass NSBorderlessWindowMask for the styleMask to remove the title bar.
+ self = [super initWithContentRect:contentRect
+ styleMask:NSBorderlessWindowMask
+ backing:bufferingType
+ defer:flag];
+
+ if (self) {
+ // Set window to be clear and non-opaque so we can see through it.
+ [self setBackgroundColor:[NSColor clearColor]];
+ [self setOpaque:NO];
+ [self setMovableByWindowBackground:YES];
+
+ // Pull the window up to Status Level so that it always displays.
+ [self setLevel:NSStatusWindowLevel];
+ }
+ return self;
+}
+
+@end
+
+@implementation DisconnectView
+
+- (void)drawRect:(NSRect)rect {
+ // All magic numbers taken from screen shots provided by UX.
+ NSRect bounds = NSInsetRect([self bounds], 1.5, 1.5);
+
+ NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:bounds
+ xRadius:5
+ yRadius:5];
+ NSColor *gray = [NSColor colorWithCalibratedWhite:0.91 alpha:1.0];
+ [gray setFill];
+ [path fill];
+ [path setLineWidth:3];
+ NSColor *green = [NSColor colorWithCalibratedRed:0.13
+ green:0.69
+ blue:0.11
+ alpha:1.0];
+ [green setStroke];
+ [path stroke];
+
+ // Draw drag handle on left hand side
+ const CGFloat height = 21.0;
+ const CGFloat inset = 12.0;
+ NSColor *dark = [NSColor colorWithCalibratedWhite:0.70 alpha:1.0];
+ NSColor *light = [NSColor colorWithCalibratedWhite:0.97 alpha:1.0];
+
+ // Turn off aliasing so it's nice and crisp.
+ NSGraphicsContext *context = [NSGraphicsContext currentContext];
+ BOOL alias = [context shouldAntialias];
+ [context setShouldAntialias:NO];
+
+ NSPoint top = NSMakePoint(inset, NSMidY(bounds) - height / 2.0);
+ NSPoint bottom = NSMakePoint(inset, top.y + height);
+
+ path = [NSBezierPath bezierPath];
+ [path moveToPoint:top];
+ [path lineToPoint:bottom];
+ [dark setStroke];
+ [path stroke];
+
+ top.x += 1;
+ bottom.x += 1;
+ path = [NSBezierPath bezierPath];
+ [path moveToPoint:top];
+ [path lineToPoint:bottom];
+ [light setStroke];
+ [path stroke];
+
+ top.x += 2;
+ bottom.x += 2;
+ path = [NSBezierPath bezierPath];
+ [path moveToPoint:top];
+ [path lineToPoint:bottom];
+ [dark setStroke];
+ [path stroke];
+
+ top.x += 1;
+ bottom.x += 1;
+ path = [NSBezierPath bezierPath];
+ [path moveToPoint:top];
+ [path lineToPoint:bottom];
+ [light setStroke];
+ [path stroke];
+
+ [context setShouldAntialias:alias];
+}
+
+@end
+