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

Side by Side Diff: chrome/browser/cocoa/tabpose_window.mm

Issue 2819070: Mac: Add tabpose window (Closed)
Patch Set: mac compile?! Created 10 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "chrome/browser/cocoa/tabpose_window.h"
6
7 #import <QuartzCore/QuartzCore.h>
8
9 const int kTopGradientHeight = 15;
10
11 // CAGradientLayer is 10.6-only -- roll our own.
12 @interface DarkGradientLayer : CALayer
13 - (void)drawInContext:(CGContextRef)context;
14 @end
15
16 @implementation DarkGradientLayer
17 - (void)drawInContext:(CGContextRef)context {
18 scoped_cftyperef<CGColorSpaceRef> grayColorSpace(
19 CGColorSpaceCreateWithName(kCGColorSpaceGenericGray));
20 CGFloat grays[] = { 0.277, 1.0, 0.39, 1.0 };
21 CGFloat locations[] = { 0, 1 };
22 scoped_cftyperef<CGGradientRef> gradient(CGGradientCreateWithColorComponents(
23 grayColorSpace.get(), grays, locations, arraysize(locations)));
24 CGPoint topLeft = CGPointMake(0.0, kTopGradientHeight);
25 CGContextDrawLinearGradient(context, gradient.get(), topLeft, CGPointZero, 0);
26 }
27 @end
28
29 @interface TabposeWindow (Private)
30 - (id)initForWindow:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo;
31 - (void)setUpLayers:(NSRect)bgLayerRect;
32 @end
33
34 @implementation TabposeWindow
35
36 + (id)openTabposeFor:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo {
37 // Releases itself when closed.
38 return [[TabposeWindow alloc] initForWindow:parent rect:rect slomo:slomo];
39 }
40
41 - (id)initForWindow:(NSWindow*)parent rect:(NSRect)rect slomo:(BOOL)slomo {
42 NSRect frame = [parent frame];
43 if ((self = [super initWithContentRect:frame
44 styleMask:NSBorderlessWindowMask
45 backing:NSBackingStoreBuffered
46 defer:NO])) {
47 [self setReleasedWhenClosed:YES];
48 [self setOpaque:NO];
49 [self setBackgroundColor:[NSColor clearColor]];
50 [self setUpLayers:rect];
51 [parent addChildWindow:self ordered:NSWindowAbove];
52 [self makeKeyAndOrderFront:self];
53 }
54 return self;
55 }
56
57 - (void)setUpLayers:(NSRect)bgLayerRect {
58 // Root layer -- covers whole window.
59 rootLayer_ = [CALayer layer];
60 [[self contentView] setLayer:rootLayer_];
61 [[self contentView] setWantsLayer:YES];
62
63 // Background layer -- the visible part of the window.
64 gray_.reset(CGColorCreateGenericGray(0.39, 1.0));
65 bgLayer_ = [CALayer layer];
66 bgLayer_.backgroundColor = gray_;
67 bgLayer_.frame = NSRectToCGRect(bgLayerRect);
68 bgLayer_.masksToBounds = YES;
69 [rootLayer_ addSublayer:bgLayer_];
70
71 // Top gradient.
72 CALayer* gradientLayer = [DarkGradientLayer layer];
73 gradientLayer.frame = CGRectMake(
74 0,
75 NSHeight(bgLayerRect) - kTopGradientHeight,
76 NSWidth(bgLayerRect),
77 kTopGradientHeight);
78 [gradientLayer setNeedsDisplay]; // Draw once.
79 [bgLayer_ addSublayer:gradientLayer];
80 }
81
82 - (BOOL)canBecomeKeyWindow {
83 return YES;
84 }
85
86 - (void)keyDown:(NSEvent*)event {
87 // Overridden to prevent beeps.
88 }
89
90 - (void)keyUp:(NSEvent*)event {
91 NSString* characters = [event characters];
92 if ([characters length] < 1)
93 return;
94
95 unichar character = [characters characterAtIndex:0];
96 switch (character) {
97 case NSEnterCharacter:
98 case NSNewlineCharacter:
99 case NSCarriageReturnCharacter:
100 case ' ':
101 case '\e': // Escape
102 [self close];
103 break;
104 }
105 }
106
107 - (void)mouseDown:(NSEvent*)event {
108 [self close];
109 }
110
111 - (void)swipeWithEvent:(NSEvent*)event {
112 if ([event deltaY] > 0.5) // Swipe up
113 [self close];
114 }
115
116 - (void)close {
117 // Prevent parent window from disappearing.
118 [[self parentWindow] removeChildWindow:self];
119 [super close];
120 }
121
122 - (void)commandDispatch:(id)sender {
123 // Without this, -validateUserInterfaceItem: is not called.
124 }
125
126 - (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item {
127 // Disable all browser-related menu items.
128 return NO;
129 }
130
131 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698