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

Unified Diff: chrome/browser/cocoa/tabpose_window.mm

Issue 2819070: Mac: Add tabpose window (Closed)
Patch Set: mac compile?! Created 10 years, 5 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/cocoa/tabpose_window.mm
diff --git a/chrome/browser/cocoa/tabpose_window.mm b/chrome/browser/cocoa/tabpose_window.mm
new file mode 100644
index 0000000000000000000000000000000000000000..c69c5c16b91cb7594513afa03cf49713b00bb04a
--- /dev/null
+++ b/chrome/browser/cocoa/tabpose_window.mm
@@ -0,0 +1,131 @@
+// Copyright (c) 2010 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 "chrome/browser/cocoa/tabpose_window.h"
+
+#import <QuartzCore/QuartzCore.h>
+
+const int kTopGradientHeight = 15;
+
+// CAGradientLayer is 10.6-only -- roll our own.
+@interface DarkGradientLayer : CALayer
+- (void)drawInContext:(CGContextRef)context;
+@end
+
+@implementation DarkGradientLayer
+- (void)drawInContext:(CGContextRef)context {
+ scoped_cftyperef<CGColorSpaceRef> grayColorSpace(
+ CGColorSpaceCreateWithName(kCGColorSpaceGenericGray));
+ CGFloat grays[] = { 0.277, 1.0, 0.39, 1.0 };
+ CGFloat locations[] = { 0, 1 };
+ scoped_cftyperef<CGGradientRef> gradient(CGGradientCreateWithColorComponents(
+ grayColorSpace.get(), grays, locations, arraysize(locations)));
+ CGPoint topLeft = CGPointMake(0.0, kTopGradientHeight);
+ CGContextDrawLinearGradient(context, gradient.get(), topLeft, CGPointZero, 0);
+}
+@end
+
+@interface TabposeWindow (Private)
+- (id)initForWindow:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo;
+- (void)setUpLayers:(NSRect)bgLayerRect;
+@end
+
+@implementation TabposeWindow
+
++ (id)openTabposeFor:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo {
+ // Releases itself when closed.
+ return [[TabposeWindow alloc] initForWindow:parent rect:rect slomo:slomo];
+}
+
+- (id)initForWindow:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo {
+ NSRect frame = [parent frame];
+ if ((self = [super initWithContentRect:frame
+ styleMask:NSBorderlessWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO])) {
+ [self setReleasedWhenClosed:YES];
+ [self setOpaque:NO];
+ [self setBackgroundColor:[NSColor clearColor]];
+ [self setUpLayers:rect];
+ [parent addChildWindow:self ordered:NSWindowAbove];
+ [self makeKeyAndOrderFront:self];
+ }
+ return self;
+}
+
+- (void)setUpLayers:(NSRect)bgLayerRect {
+ // Root layer -- covers whole window.
+ rootLayer_ = [CALayer layer];
+ [[self contentView] setLayer:rootLayer_];
+ [[self contentView] setWantsLayer:YES];
+
+ // Background layer -- the visible part of the window.
+ gray_.reset(CGColorCreateGenericGray(0.39, 1.0));
+ bgLayer_ = [CALayer layer];
+ bgLayer_.backgroundColor = gray_;
+ bgLayer_.frame = NSRectToCGRect(bgLayerRect);
+ bgLayer_.masksToBounds = YES;
+ [rootLayer_ addSublayer:bgLayer_];
+
+ // Top gradient.
+ CALayer* gradientLayer = [DarkGradientLayer layer];
+ gradientLayer.frame = CGRectMake(
+ 0,
+ NSHeight(bgLayerRect) - kTopGradientHeight,
+ NSWidth(bgLayerRect),
+ kTopGradientHeight);
+ [gradientLayer setNeedsDisplay]; // Draw once.
+ [bgLayer_ addSublayer:gradientLayer];
+}
+
+- (BOOL)canBecomeKeyWindow {
+ return YES;
+}
+
+- (void)keyDown:(NSEvent*)event {
+ // Overridden to prevent beeps.
+}
+
+- (void)keyUp:(NSEvent*)event {
+ NSString* characters = [event characters];
+ if ([characters length] < 1)
+ return;
+
+ unichar character = [characters characterAtIndex:0];
+ switch (character) {
+ case NSEnterCharacter:
+ case NSNewlineCharacter:
+ case NSCarriageReturnCharacter:
+ case ' ':
+ case '\e': // Escape
+ [self close];
+ break;
+ }
+}
+
+- (void)mouseDown:(NSEvent*)event {
+ [self close];
+}
+
+- (void)swipeWithEvent:(NSEvent*)event {
+ if ([event deltaY] > 0.5) // Swipe up
+ [self close];
+}
+
+- (void)close {
+ // Prevent parent window from disappearing.
+ [[self parentWindow] removeChildWindow:self];
+ [super close];
+}
+
+- (void)commandDispatch:(id)sender {
+ // Without this, -validateUserInterfaceItem: is not called.
+}
+
+- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item {
+ // Disable all browser-related menu items.
+ return NO;
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698