diff options
Diffstat (limited to 'remoting/host/disconnect_window_mac.mm')
-rw-r--r-- | remoting/host/disconnect_window_mac.mm | 119 |
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 + |