Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #include "chrome/browser/ui/views/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 | 194 |
| 195 // The name of a key to store on the window handle so that other code can | 195 // The name of a key to store on the window handle so that other code can |
| 196 // locate this object using just the handle. | 196 // locate this object using just the handle. |
| 197 const char* const kBrowserViewKey = "__BROWSER_VIEW__"; | 197 const char* const kBrowserViewKey = "__BROWSER_VIEW__"; |
| 198 | 198 |
| 199 // The number of milliseconds between loading animation frames. | 199 // The number of milliseconds between loading animation frames. |
| 200 const int kLoadingAnimationFrameTimeMs = 30; | 200 const int kLoadingAnimationFrameTimeMs = 30; |
| 201 | 201 |
| 202 // Paints the horizontal border separating the Bookmarks Bar from the Toolbar | 202 // Paints the horizontal border separating the Bookmarks Bar from the Toolbar |
| 203 // or page content according to |at_top| with |color|. | 203 // or page content according to |at_top| with |color|. |
| 204 void PaintHorizontalBorder(gfx::Canvas* canvas, | |
| 205 BookmarkBarView* view, | |
| 206 bool at_top, | |
| 207 SkColor color) { | |
| 208 int thickness = views::NonClientFrameView::kClientEdgeThickness; | |
| 209 int y = at_top ? 0 : (view->height() - thickness); | |
| 210 canvas->FillRect(gfx::Rect(0, y, view->width(), thickness), color); | |
| 211 } | |
| 212 | |
| 213 void PaintDetachedBookmarkBar(gfx::Canvas* canvas, | 204 void PaintDetachedBookmarkBar(gfx::Canvas* canvas, |
| 214 BookmarkBarView* view) { | 205 BookmarkBarView* view) { |
| 215 // Paint background for detached state; if animating, this is fade in/out. | 206 // Paint background for detached state; if animating, this is fade in/out. |
| 216 const ui::ThemeProvider* tp = view->GetThemeProvider(); | 207 const ui::ThemeProvider* tp = view->GetThemeProvider(); |
| 217 gfx::Rect fill_rect = view->GetLocalBounds(); | 208 gfx::Rect fill_rect = view->GetLocalBounds(); |
| 218 // In MD, we have to not color the top 1dp, because that should be painted by | 209 // We have to not color the top 1dp, because that should be painted by the |
| 219 // the toolbar. We will, however, paint the 1px separator at the bottom of the | 210 // toolbar. We will, however, paint the 1px separator at the bottom of the |
| 220 // first dp. See crbug.com/610359 | 211 // first dp. See crbug.com/610359 |
| 221 if (ui::MaterialDesignController::IsModeMaterial()) | 212 fill_rect.Inset(0, 1, 0, 0); |
| 222 fill_rect.Inset(0, 1, 0, 0); | |
| 223 | 213 |
| 224 // In detached mode, the bar is meant to overlap with |contents_container_|. | 214 // In detached mode, the bar is meant to overlap with |contents_container_|. |
| 225 // The detached background color may be partially transparent, but the layer | 215 // The detached background color may be partially transparent, but the layer |
| 226 // for |view| must be painted opaquely to avoid subpixel anti-aliasing | 216 // for |view| must be painted opaquely to avoid subpixel anti-aliasing |
| 227 // artifacts, so we recreate the contents container base color here. | 217 // artifacts, so we recreate the contents container base color here. |
| 228 canvas->FillRect(fill_rect, | 218 canvas->FillRect(fill_rect, |
| 229 tp->GetColor(ThemeProperties::COLOR_CONTROL_BACKGROUND)); | 219 tp->GetColor(ThemeProperties::COLOR_CONTROL_BACKGROUND)); |
| 230 canvas->FillRect( | 220 canvas->FillRect( |
| 231 fill_rect, | 221 fill_rect, |
| 232 tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND)); | 222 tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND)); |
| 233 | 223 |
| 234 // Draw the separators above and below bookmark bar; | 224 // Draw the separators above and below bookmark bar; |
| 235 // if animating, these are fading in/out. | 225 // if animating, these are fading in/out. |
| 236 SkColor separator_color = | 226 SkColor separator_color = |
| 237 tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR); | 227 tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR); |
| 238 | 228 |
| 239 // In material mode the toolbar bottom stroke serves as our top stroke. | |
| 240 if (!ui::MaterialDesignController::IsModeMaterial()) | |
| 241 PaintHorizontalBorder(canvas, view, true, separator_color); | |
| 242 | |
| 243 // For the bottom separator, increase the luminance. Either double it or halve | 229 // For the bottom separator, increase the luminance. Either double it or halve |
| 244 // the distance to 1.0, whichever is less of a difference. | 230 // the distance to 1.0, whichever is less of a difference. |
| 245 color_utils::HSL hsl; | 231 color_utils::HSL hsl; |
| 246 color_utils::SkColorToHSL(separator_color, &hsl); | 232 color_utils::SkColorToHSL(separator_color, &hsl); |
| 247 hsl.l = std::min((hsl.l + 1) / 2, hsl.l * 2); | 233 hsl.l = std::min((hsl.l + 1) / 2, hsl.l * 2); |
| 248 BrowserView::Paint1pxHorizontalLine( | 234 BrowserView::Paint1pxHorizontalLine( |
| 249 canvas, color_utils::HSLToSkColor(hsl, SK_AlphaOPAQUE), | 235 canvas, color_utils::HSLToSkColor(hsl, SK_AlphaOPAQUE), |
| 250 view->GetLocalBounds(), true); | 236 view->GetLocalBounds(), true); |
| 251 } | 237 } |
| 252 | 238 |
| 253 // Paints the background (including the theme image behind content area) for | 239 // Paints the background (including the theme image behind content area) for |
| 254 // the Bookmarks Bar when it is attached to the Toolbar into |bounds|. | 240 // the Bookmarks Bar when it is attached to the Toolbar into |bounds|. |
| 255 // |background_origin| is the origin to use for painting the theme image. | 241 // |background_origin| is the origin to use for painting the theme image. |
| 256 void PaintBackgroundAttachedMode(gfx::Canvas* canvas, | 242 void PaintBackgroundAttachedMode(gfx::Canvas* canvas, |
| 257 const ui::ThemeProvider* theme_provider, | 243 const ui::ThemeProvider* theme_provider, |
| 258 const gfx::Rect& bounds, | 244 const gfx::Rect& bounds, |
| 259 const gfx::Point& background_origin) { | 245 const gfx::Point& background_origin) { |
| 260 canvas->DrawColor(theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR)); | 246 canvas->DrawColor(theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR)); |
| 261 | 247 |
| 262 // Always tile the background image in pre-MD. In MD, only tile if there's a | 248 // Always tile the background image in pre-MD. In MD, only tile if there's a |
| 263 // non-default image. | 249 // non-default image. |
|
Peter Kasting
2016/10/21 21:07:50
Nit: Update comment
Evan Stade
2016/10/21 22:11:12
Done.
| |
| 264 // TODO(estade): remove IDR_THEME_TOOLBAR when MD is default. | 250 if (theme_provider->HasCustomImage(IDR_THEME_TOOLBAR)) { |
|
Peter Kasting
2016/10/21 21:07:50
Not sure what this meant
Evan Stade
2016/10/21 22:11:12
it meant the asset could be removed (i.e. what thi
| |
| 265 if (theme_provider->HasCustomImage(IDR_THEME_TOOLBAR) || | |
| 266 !ui::MaterialDesignController::IsModeMaterial()) { | |
| 267 canvas->TileImageInt(*theme_provider->GetImageSkiaNamed(IDR_THEME_TOOLBAR), | 251 canvas->TileImageInt(*theme_provider->GetImageSkiaNamed(IDR_THEME_TOOLBAR), |
| 268 background_origin.x(), | 252 background_origin.x(), |
| 269 background_origin.y(), | 253 background_origin.y(), |
| 270 bounds.x(), | 254 bounds.x(), |
| 271 bounds.y(), | 255 bounds.y(), |
| 272 bounds.width(), | 256 bounds.width(), |
| 273 bounds.height()); | 257 bounds.height()); |
| 274 } | 258 } |
| 275 | |
| 276 #if defined(USE_ASH) | |
| 277 if (!ui::MaterialDesignController::IsModeMaterial()) { | |
| 278 // The pre-material design version of Ash provides additional lightening | |
| 279 // at the edges of the toolbar. | |
| 280 gfx::ImageSkia* toolbar_left = | |
| 281 theme_provider->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_LEFT); | |
| 282 canvas->TileImageInt(*toolbar_left, | |
| 283 bounds.x(), | |
| 284 bounds.y(), | |
| 285 toolbar_left->width(), | |
| 286 bounds.height()); | |
| 287 gfx::ImageSkia* toolbar_right = | |
| 288 theme_provider->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_RIGHT); | |
| 289 canvas->TileImageInt(*toolbar_right, | |
| 290 bounds.right() - toolbar_right->width(), | |
| 291 bounds.y(), | |
| 292 toolbar_right->width(), | |
| 293 bounds.height()); | |
| 294 } | |
| 295 #endif // USE_ASH | |
| 296 } | 259 } |
| 297 | 260 |
| 298 void PaintAttachedBookmarkBar(gfx::Canvas* canvas, | 261 void PaintAttachedBookmarkBar(gfx::Canvas* canvas, |
| 299 BookmarkBarView* view, | 262 BookmarkBarView* view, |
| 300 BrowserView* browser_view, | 263 BrowserView* browser_view, |
| 301 int toolbar_overlap) { | 264 int toolbar_overlap) { |
| 302 // Paint background for attached state, this is fade in/out. | 265 // Paint background for attached state. |
| 303 gfx::Point background_image_offset = | 266 gfx::Point background_image_offset = |
| 304 browser_view->OffsetPointForToolbarBackgroundImage( | 267 browser_view->OffsetPointForToolbarBackgroundImage( |
| 305 gfx::Point(view->GetMirroredX(), view->y())); | 268 gfx::Point(view->GetMirroredX(), view->y())); |
| 306 PaintBackgroundAttachedMode(canvas, view->GetThemeProvider(), | 269 PaintBackgroundAttachedMode(canvas, view->GetThemeProvider(), |
| 307 view->GetLocalBounds(), background_image_offset); | 270 view->GetLocalBounds(), background_image_offset); |
| 308 if (view->height() >= toolbar_overlap) { | 271 if (view->height() >= toolbar_overlap) { |
| 309 // Draw the separator below the Bookmarks Bar; this is fading in/out. | 272 BrowserView::Paint1pxHorizontalLine( |
| 310 if (ui::MaterialDesignController::IsModeMaterial()) { | 273 canvas, view->GetThemeProvider()->GetColor( |
| 311 BrowserView::Paint1pxHorizontalLine( | 274 ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR), |
| 312 canvas, view->GetThemeProvider()->GetColor( | 275 view->GetLocalBounds(), true); |
| 313 ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR), | |
| 314 view->GetLocalBounds(), true); | |
| 315 } else { | |
| 316 PaintHorizontalBorder( | |
| 317 canvas, view, false, | |
| 318 view->GetThemeProvider()->GetColor( | |
| 319 ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR)); | |
| 320 } | |
| 321 } | 276 } |
| 322 } | 277 } |
| 323 | 278 |
| 324 } // namespace | 279 } // namespace |
| 325 | 280 |
| 326 /////////////////////////////////////////////////////////////////////////////// | 281 /////////////////////////////////////////////////////////////////////////////// |
| 327 // Delegate implementation for BrowserViewLayout. Usually just forwards calls | 282 // Delegate implementation for BrowserViewLayout. Usually just forwards calls |
| 328 // into BrowserView. | 283 // into BrowserView. |
| 329 class BrowserViewLayoutDelegateImpl : public BrowserViewLayoutDelegate { | 284 class BrowserViewLayoutDelegateImpl : public BrowserViewLayoutDelegate { |
| 330 public: | 285 public: |
| (...skipping 1609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1940 | 1895 |
| 1941 void BrowserView::ChildPreferredSizeChanged(View* child) { | 1896 void BrowserView::ChildPreferredSizeChanged(View* child) { |
| 1942 Layout(); | 1897 Layout(); |
| 1943 } | 1898 } |
| 1944 | 1899 |
| 1945 void BrowserView::GetAccessibleState(ui::AXViewState* state) { | 1900 void BrowserView::GetAccessibleState(ui::AXViewState* state) { |
| 1946 state->role = ui::AX_ROLE_CLIENT; | 1901 state->role = ui::AX_ROLE_CLIENT; |
| 1947 } | 1902 } |
| 1948 | 1903 |
| 1949 void BrowserView::OnThemeChanged() { | 1904 void BrowserView::OnThemeChanged() { |
| 1950 if (!IsRegularOrGuestSession() && | 1905 if (!IsRegularOrGuestSession()) { |
| 1951 ui::MaterialDesignController::IsModeMaterial()) { | |
| 1952 // When the theme changes, the native theme may also change (in incognito, | 1906 // When the theme changes, the native theme may also change (in incognito, |
| 1953 // the usage of dark or normal hinges on the browser theme), so we have to | 1907 // the usage of dark or normal hinges on the browser theme), so we have to |
| 1954 // propagate both kinds of change. | 1908 // propagate both kinds of change. |
| 1955 base::AutoReset<bool> reset(&handling_theme_changed_, true); | 1909 base::AutoReset<bool> reset(&handling_theme_changed_, true); |
| 1956 #if defined(OS_WIN) | 1910 #if defined(OS_WIN) |
| 1957 ui::NativeThemeDarkWin::instance()->NotifyObservers(); | 1911 ui::NativeThemeDarkWin::instance()->NotifyObservers(); |
| 1958 ui::NativeThemeWin::instance()->NotifyObservers(); | 1912 ui::NativeThemeWin::instance()->NotifyObservers(); |
| 1959 #elif defined(OS_LINUX) | 1913 #elif defined(OS_LINUX) |
| 1960 ui::NativeThemeDarkAura::instance()->NotifyObservers(); | 1914 ui::NativeThemeDarkAura::instance()->NotifyObservers(); |
| 1961 ui::NativeThemeAura::instance()->NotifyObservers(); | 1915 ui::NativeThemeAura::instance()->NotifyObservers(); |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2636 } | 2590 } |
| 2637 | 2591 |
| 2638 extensions::ActiveTabPermissionGranter* | 2592 extensions::ActiveTabPermissionGranter* |
| 2639 BrowserView::GetActiveTabPermissionGranter() { | 2593 BrowserView::GetActiveTabPermissionGranter() { |
| 2640 content::WebContents* web_contents = GetActiveWebContents(); | 2594 content::WebContents* web_contents = GetActiveWebContents(); |
| 2641 if (!web_contents) | 2595 if (!web_contents) |
| 2642 return nullptr; | 2596 return nullptr; |
| 2643 return extensions::TabHelper::FromWebContents(web_contents) | 2597 return extensions::TabHelper::FromWebContents(web_contents) |
| 2644 ->active_tab_permission_granter(); | 2598 ->active_tab_permission_granter(); |
| 2645 } | 2599 } |
| OLD | NEW |