OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_toolbar_view.h" | 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_toolbar_view.h" |
6 | 6 |
7 #include "chrome/browser/search/search.h" | 7 #include "chrome/browser/search/search.h" |
8 #include "chrome/browser/themes/theme_properties.h" | 8 #include "chrome/browser/themes/theme_properties.h" |
9 #include "chrome/browser/themes/theme_service.h" | 9 #include "chrome/browser/themes/theme_service.h" |
10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h" | 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h" |
11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" | 11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" |
12 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 12 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
13 #include "skia/ext/skia_utils_mac.h" | 13 #include "skia/ext/skia_utils_mac.h" |
14 #import "ui/base/cocoa/nsview_additions.h" | 14 #import "ui/base/cocoa/nsview_additions.h" |
15 #include "ui/base/theme_provider.h" | 15 #include "ui/base/theme_provider.h" |
16 #include "ui/gfx/canvas_skia_paint.h" | 16 #include "ui/gfx/canvas_skia_paint.h" |
17 #include "ui/gfx/geometry/rect.h" | 17 #include "ui/gfx/geometry/rect.h" |
18 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 18 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
19 | 19 |
20 @interface BookmarkBarToolbarView (Private) | 20 @interface BookmarkBarToolbarView (Private) |
21 - (void)drawAsDetachedBubble:(NSRect)dirtyRect; | 21 - (void)drawAsDetachedBubble:(NSRect)dirtyRect; |
22 @end | 22 @end |
23 | 23 |
24 @implementation BookmarkBarToolbarView | 24 @implementation BookmarkBarToolbarView |
25 | 25 |
26 - (BOOL)isOpaque { | 26 - (BOOL)isOpaque { |
27 // -drawRect: calls -drawAsDetachedBubble: or -[super drawRect:], both of | 27 // -drawRect: calls -drawAsDetachedBubble: or -drawBackground:, both of which |
28 // which fill the dirty rect with an opaque color. | 28 // fill the dirty rect with an opaque color. |
29 return YES; | 29 return YES; |
30 } | 30 } |
31 | 31 |
32 - (void)resetCursorRects { | 32 - (void)resetCursorRects { |
33 NSCursor *arrow = [NSCursor arrowCursor]; | 33 NSCursor *arrow = [NSCursor arrowCursor]; |
34 [self addCursorRect:[self visibleRect] cursor:arrow]; | 34 [self addCursorRect:[self visibleRect] cursor:arrow]; |
35 [arrow setOnMouseEntered:YES]; | 35 [arrow setOnMouseEntered:YES]; |
36 } | 36 } |
37 | 37 |
38 - (void)drawRect:(NSRect)dirtyRect { | 38 - (void)drawRect:(NSRect)dirtyRect { |
39 if ([controller_ isInState:BookmarkBar::DETACHED] || | 39 if ([controller_ isInState:BookmarkBar::DETACHED] || |
40 [controller_ isAnimatingToState:BookmarkBar::DETACHED] || | 40 [controller_ isAnimatingToState:BookmarkBar::DETACHED] || |
41 [controller_ isAnimatingFromState:BookmarkBar::DETACHED]) { | 41 [controller_ isAnimatingFromState:BookmarkBar::DETACHED]) { |
42 [self drawAsDetachedBubble:dirtyRect]; | 42 [self drawAsDetachedBubble:dirtyRect]; |
43 } else { | 43 } else { |
44 [super drawRect:dirtyRect]; | 44 [self drawBackground:dirtyRect]; |
45 } | 45 } |
46 } | 46 } |
47 | 47 |
48 - (void)drawAsDetachedBubble:(NSRect)dirtyRect { | 48 - (void)drawAsDetachedBubble:(NSRect)dirtyRect { |
49 CGFloat morph = [controller_ detachedMorphProgress]; | 49 CGFloat morph = [controller_ detachedMorphProgress]; |
50 Profile* profile = [controller_ profile]; | 50 Profile* profile = [controller_ profile]; |
51 if (!profile) | 51 if (!profile) |
52 return; | 52 return; |
53 | 53 |
54 [[NSColor whiteColor] set]; | 54 [[NSColor whiteColor] set]; |
55 NSRectFill(dirtyRect); | 55 NSRectFill(dirtyRect); |
56 | 56 |
57 // Overlay with a lighter background color. | 57 // Overlay with a lighter background color. |
58 const ui::ThemeProvider& tp = | 58 const ui::ThemeProvider& tp = |
59 ThemeService::GetThemeProviderForProfile(profile); | 59 ThemeService::GetThemeProviderForProfile(profile); |
60 NSColor* toolbarColor = | 60 NSColor* toolbarColor = |
61 tp.GetNSColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND); | 61 tp.GetNSColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND); |
62 CGFloat alpha = morph * [toolbarColor alphaComponent]; | 62 CGFloat alpha = morph * [toolbarColor alphaComponent]; |
63 [[toolbarColor colorWithAlphaComponent:alpha] set]; | 63 [[toolbarColor colorWithAlphaComponent:alpha] set]; |
64 NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver); | 64 NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver); |
65 | 65 |
66 // Fade in/out the background. | 66 // Fade in/out the background. |
67 { | 67 { |
68 gfx::ScopedNSGraphicsContextSaveGState bgScopedState; | 68 gfx::ScopedNSGraphicsContextSaveGState bgScopedState; |
69 NSGraphicsContext* context = [NSGraphicsContext currentContext]; | 69 NSGraphicsContext* context = [NSGraphicsContext currentContext]; |
70 CGContextRef cgContext = static_cast<CGContextRef>([context graphicsPort]); | 70 CGContextRef cgContext = static_cast<CGContextRef>([context graphicsPort]); |
71 CGContextSetAlpha(cgContext, 1 - morph); | 71 CGContextSetAlpha(cgContext, 1 - morph); |
72 CGContextBeginTransparencyLayer(cgContext, NULL); | 72 CGContextBeginTransparencyLayer(cgContext, NULL); |
73 [super drawRect:dirtyRect]; | 73 [self drawBackground:dirtyRect]; |
74 CGContextEndTransparencyLayer(cgContext); | 74 CGContextEndTransparencyLayer(cgContext); |
75 } | 75 } |
76 | 76 |
77 // Bottom stroke. | 77 // Bottom stroke. |
78 NSRect strokeRect = [self bounds]; | 78 NSRect strokeRect = [self bounds]; |
79 strokeRect.size.height = [self cr_lineWidth]; | 79 strokeRect.size.height = [self cr_lineWidth]; |
80 if (NSIntersectsRect(strokeRect, dirtyRect)) { | 80 if (NSIntersectsRect(strokeRect, dirtyRect)) { |
81 NSColor* strokeColor = | 81 NSColor* strokeColor = |
82 tp.GetNSColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR); | 82 tp.GetNSColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR); |
83 strokeColor = [[self strokeColor] blendedColorWithFraction:morph | 83 strokeColor = [[self strokeColor] blendedColorWithFraction:morph |
84 ofColor:strokeColor]; | 84 ofColor:strokeColor]; |
85 strokeColor = [strokeColor colorWithAlphaComponent:0.5]; | 85 strokeColor = [strokeColor colorWithAlphaComponent:0.5]; |
86 [strokeColor set]; | 86 [strokeColor set]; |
87 NSRectFillUsingOperation(NSIntersectionRect(strokeRect, dirtyRect), | 87 NSRectFillUsingOperation(NSIntersectionRect(strokeRect, dirtyRect), |
88 NSCompositeSourceOver); | 88 NSCompositeSourceOver); |
89 } | 89 } |
90 } | 90 } |
91 | 91 |
92 @end // @implementation BookmarkBarToolbarView | 92 @end // @implementation BookmarkBarToolbarView |
OLD | NEW |