OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/tab_contents/tab_contents_controller.h" | 5 #import "chrome/browser/ui/cocoa/tab_contents/tab_contents_controller.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/mac/scoped_cftyperef.h" | 11 #include "base/mac/scoped_cftyperef.h" |
12 #include "base/mac/scoped_nsobject.h" | 12 #include "base/mac/scoped_nsobject.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "chrome/browser/devtools/devtools_window.h" | 14 #include "chrome/browser/devtools/devtools_window.h" |
15 #import "chrome/browser/themes/theme_properties.h" | 15 #import "chrome/browser/themes/theme_properties.h" |
16 #import "chrome/browser/themes/theme_service.h" | 16 #import "chrome/browser/themes/theme_service.h" |
17 #import "chrome/browser/ui/cocoa/themed_window.h" | 17 #import "chrome/browser/ui/cocoa/themed_window.h" |
18 #include "chrome/browser/ui/view_ids.h" | 18 #include "chrome/browser/ui/view_ids.h" |
| 19 #include "chrome/grit/theme_resources.h" |
19 #include "content/public/browser/render_view_host.h" | 20 #include "content/public/browser/render_view_host.h" |
20 #include "content/public/browser/render_widget_host.h" | 21 #include "content/public/browser/render_widget_host.h" |
21 #include "content/public/browser/render_widget_host_view.h" | 22 #include "content/public/browser/render_widget_host_view.h" |
22 #include "content/public/browser/web_contents.h" | 23 #include "content/public/browser/web_contents.h" |
23 #include "content/public/browser/web_contents_observer.h" | 24 #include "content/public/browser/web_contents_observer.h" |
24 #include "skia/ext/skia_utils_mac.h" | 25 #include "skia/ext/skia_utils_mac.h" |
25 #include "ui/base/cocoa/animation_utils.h" | 26 #include "ui/base/cocoa/animation_utils.h" |
26 #include "ui/gfx/geometry/rect.h" | 27 #include "ui/gfx/geometry/rect.h" |
27 | 28 |
28 using content::WebContents; | 29 using content::WebContents; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 @end | 84 @end |
84 | 85 |
85 // An NSView with special-case handling for when the contents view does not | 86 // An NSView with special-case handling for when the contents view does not |
86 // expand to fill the entire tab contents area. See 'AutoEmbedFullscreen mode' | 87 // expand to fill the entire tab contents area. See 'AutoEmbedFullscreen mode' |
87 // in header file comments. | 88 // in header file comments. |
88 @interface TabContentsContainerView : NSView { | 89 @interface TabContentsContainerView : NSView { |
89 @private | 90 @private |
90 TabContentsController* delegate_; // weak | 91 TabContentsController* delegate_; // weak |
91 } | 92 } |
92 | 93 |
93 - (void)updateBackgroundColor; | 94 - (void)updateBackgroundColorFromWindowTheme:(NSWindow*)window; |
94 @end | 95 @end |
95 | 96 |
96 @implementation TabContentsContainerView | 97 @implementation TabContentsContainerView |
97 | 98 |
98 - (id)initWithDelegate:(TabContentsController*)delegate { | 99 - (id)initWithDelegate:(TabContentsController*)delegate { |
99 if ((self = [super initWithFrame:NSZeroRect])) { | 100 if ((self = [super initWithFrame:NSZeroRect])) { |
100 delegate_ = delegate; | 101 delegate_ = delegate; |
101 ScopedCAActionDisabler disabler; | 102 ScopedCAActionDisabler disabler; |
102 base::scoped_nsobject<CALayer> layer([[CALayer alloc] init]); | 103 base::scoped_nsobject<CALayer> layer([[CALayer alloc] init]); |
103 [self setLayer:layer]; | 104 [self setLayer:layer]; |
104 [self setWantsLayer:YES]; | 105 [self setWantsLayer:YES]; |
105 [self updateBackgroundColor]; | |
106 } | 106 } |
107 return self; | 107 return self; |
108 } | 108 } |
109 | 109 |
110 // Called by the delegate during dealloc to invalidate the pointer held by this | 110 // Called by the delegate during dealloc to invalidate the pointer held by this |
111 // view. | 111 // view. |
112 - (void)delegateDestroyed { | 112 - (void)delegateDestroyed { |
113 delegate_ = nil; | 113 delegate_ = nil; |
114 } | 114 } |
115 | 115 |
(...skipping 12 matching lines...) Expand all Loading... |
128 return; | 128 return; |
129 } | 129 } |
130 | 130 |
131 ScopedCAActionDisabler disabler; | 131 ScopedCAActionDisabler disabler; |
132 [contentsView setFrame:[delegate_ frameForContentsViewIn:self]]; | 132 [contentsView setFrame:[delegate_ frameForContentsViewIn:self]]; |
133 } | 133 } |
134 | 134 |
135 // Update the background layer's color whenever the view needs to repaint. | 135 // Update the background layer's color whenever the view needs to repaint. |
136 - (void)setNeedsDisplayInRect:(NSRect)rect { | 136 - (void)setNeedsDisplayInRect:(NSRect)rect { |
137 [super setNeedsDisplayInRect:rect]; | 137 [super setNeedsDisplayInRect:rect]; |
138 [self updateBackgroundColor]; | 138 [self updateBackgroundColorFromWindowTheme:[self window]]; |
139 } | 139 } |
140 | 140 |
141 - (void)updateBackgroundColor { | 141 - (void)updateBackgroundColorFromWindowTheme:(NSWindow*)window { |
142 // This view is sometimes flashed into visibility (e.g, when closing | 142 // This view is sometimes flashed into visibility (e.g, when closing |
143 // windows or opening new tabs), so ensure that the flash be the theme | 143 // windows or opening new tabs), so ensure that the flash be the theme |
144 // background color in those cases. | 144 // background color in those cases. |
145 SkColor skBackgroundColor = SK_ColorWHITE; | 145 const ThemeProvider* theme = [window themeProvider]; |
146 const ThemeProvider* theme = [[self window] themeProvider]; | 146 ThemedWindowStyle windowStyle = [window themedWindowStyle]; |
147 if (theme) | 147 if (!theme) |
148 skBackgroundColor = theme->GetColor(ThemeProperties::COLOR_NTP_BACKGROUND); | 148 return; |
| 149 |
| 150 // This logic and hard-coded color value are duplicated from the function |
| 151 // NTPResourceCache::CreateNewTabIncognitoCSS. This logic should exist in only |
| 152 // one location. |
| 153 // https://crbug.com/719236 |
| 154 SkColor skBackgroundColor = |
| 155 theme->GetColor(ThemeProperties::COLOR_NTP_BACKGROUND); |
| 156 bool incognito = windowStyle & THEMED_INCOGNITO; |
| 157 if (incognito && !theme->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) |
| 158 skBackgroundColor = SkColorSetRGB(0x32, 0x32, 0x32); |
149 | 159 |
150 // If the page is in fullscreen tab capture mode, change the background color | 160 // If the page is in fullscreen tab capture mode, change the background color |
151 // to be a dark tint of the new tab page's background color. | 161 // to be a dark tint of the new tab page's background color. |
152 if ([delegate_ contentsInFullscreenCaptureMode]) { | 162 if ([delegate_ contentsInFullscreenCaptureMode]) { |
153 const int kBackgroundDivisor = 5; | 163 const int kBackgroundDivisor = 5; |
154 skBackgroundColor = skBackgroundColor = SkColorSetARGB( | 164 skBackgroundColor = skBackgroundColor = SkColorSetARGB( |
155 SkColorGetA(skBackgroundColor), | 165 SkColorGetA(skBackgroundColor), |
156 SkColorGetR(skBackgroundColor) / kBackgroundDivisor, | 166 SkColorGetR(skBackgroundColor) / kBackgroundDivisor, |
157 SkColorGetG(skBackgroundColor) / kBackgroundDivisor, | 167 SkColorGetG(skBackgroundColor) / kBackgroundDivisor, |
158 SkColorGetB(skBackgroundColor) / kBackgroundDivisor); | 168 SkColorGetB(skBackgroundColor) / kBackgroundDivisor); |
159 } | 169 } |
160 | 170 |
161 ScopedCAActionDisabler disabler; | 171 ScopedCAActionDisabler disabler; |
162 base::ScopedCFTypeRef<CGColorRef> cgBackgroundColor( | 172 base::ScopedCFTypeRef<CGColorRef> cgBackgroundColor( |
163 skia::CGColorCreateFromSkColor(skBackgroundColor)); | 173 skia::CGColorCreateFromSkColor(skBackgroundColor)); |
164 [[self layer] setBackgroundColor:cgBackgroundColor]; | 174 [[self layer] setBackgroundColor:cgBackgroundColor]; |
165 } | 175 } |
166 | 176 |
| 177 - (void)viewWillMoveToWindow:(NSWindow*)newWindow { |
| 178 [self updateBackgroundColorFromWindowTheme:newWindow]; |
| 179 } |
| 180 |
167 - (ViewID)viewID { | 181 - (ViewID)viewID { |
168 return VIEW_ID_TAB_CONTAINER; | 182 return VIEW_ID_TAB_CONTAINER; |
169 } | 183 } |
170 | 184 |
171 - (BOOL)acceptsFirstResponder { | 185 - (BOOL)acceptsFirstResponder { |
172 return [[self subviews] count] > 0 && | 186 return [[self subviews] count] > 0 && |
173 [[[self subviews] objectAtIndex:0] acceptsFirstResponder]; | 187 [[[self subviews] objectAtIndex:0] acceptsFirstResponder]; |
174 } | 188 } |
175 | 189 |
176 // When receiving a click-to-focus in the solid color area surrounding the | 190 // When receiving a click-to-focus in the solid color area surrounding the |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 | 392 |
379 - (BOOL)shouldResizeContentView { | 393 - (BOOL)shouldResizeContentView { |
380 return !isEmbeddingFullscreenWidget_ || !blockFullscreenResize_; | 394 return !isEmbeddingFullscreenWidget_ || !blockFullscreenResize_; |
381 } | 395 } |
382 | 396 |
383 - (BOOL)isPopup { | 397 - (BOOL)isPopup { |
384 return isPopup_; | 398 return isPopup_; |
385 } | 399 } |
386 | 400 |
387 @end | 401 @end |
OLD | NEW |