| 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 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h" | 5 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h" |
| 6 | 6 |
| 7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/win/windows_version.h" | 9 #include "base/win/windows_version.h" |
| 10 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 // so that the region above the tab's hit-test zone matches) versus the shadow | 337 // so that the region above the tab's hit-test zone matches) versus the shadow |
| 338 // thickness. | 338 // thickness. |
| 339 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); | 339 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); |
| 340 return (frame()->IsMaximized() && !restored) ? | 340 return (frame()->IsMaximized() && !restored) ? |
| 341 (top - GetLayoutInsets(TAB).top() + 1) : | 341 (top - GetLayoutInsets(TAB).top() + 1) : |
| 342 (top + kNonClientRestoredExtraThickness - exclusion); | 342 (top + kNonClientRestoredExtraThickness - exclusion); |
| 343 } | 343 } |
| 344 | 344 |
| 345 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) { | 345 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) { |
| 346 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); | 346 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); |
| 347 if (toolbar_bounds.IsEmpty()) |
| 348 return; |
| 347 gfx::Point toolbar_origin(toolbar_bounds.origin()); | 349 gfx::Point toolbar_origin(toolbar_bounds.origin()); |
| 348 ConvertPointToTarget(browser_view(), this, &toolbar_origin); | 350 ConvertPointToTarget(browser_view(), this, &toolbar_origin); |
| 349 toolbar_bounds.set_origin(toolbar_origin); | 351 toolbar_bounds.set_origin(toolbar_origin); |
| 350 const int h = toolbar_bounds.height(); | 352 const int h = toolbar_bounds.height(); |
| 351 ui::ThemeProvider* tp = GetThemeProvider(); | 353 ui::ThemeProvider* tp = GetThemeProvider(); |
| 352 | 354 |
| 353 // Background. | 355 // Background. |
| 354 gfx::ImageSkia* bg = tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); | |
| 355 int x = toolbar_bounds.x(); | 356 int x = toolbar_bounds.x(); |
| 356 const int y = toolbar_bounds.y(); | 357 const int y = toolbar_bounds.y(); |
| 357 int w = toolbar_bounds.width(); | 358 int w = toolbar_bounds.width(); |
| 358 | 359 |
| 359 const int split_point = kContentEdgeShadowThickness; | 360 // The top stroke is drawn using the IDR_CONTENT_TOP_XXX images, which overlay |
| 360 const int split_y = | 361 // the toolbar. The top 2 px of these images is the actual top stroke + |
| 361 y + (browser_view()->IsTabStripVisible() ? split_point : 0); | 362 // shadow, and is partly transparent, so the toolbar background shouldn't be |
| 362 const int bg_y = GetTopInset(false) + Tab::GetYInsetForActiveTabBackground(); | 363 // drawn over it. |
| 363 canvas->TileImageInt(*bg, x + GetThemeBackgroundXInset(), split_y - bg_y, x, | 364 const int split_point = std::min(kContentEdgeShadowThickness, h); |
| 364 split_y, w, bg->height()); | 365 if (h > split_point) { |
| 366 // Tile the toolbar image starting at the frame edge on the left and where |
| 367 // the tabstrip is on the top. |
| 368 const int split_y = |
| 369 y + (browser_view()->IsTabStripVisible() ? split_point : 0); |
| 370 const int bg_y = |
| 371 GetTopInset(false) + Tab::GetYInsetForActiveTabBackground(); |
| 372 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR), |
| 373 x + GetThemeBackgroundXInset(), split_y - bg_y, x, |
| 374 split_y, w, h - split_point); |
| 375 } |
| 365 | 376 |
| 366 if (browser_view()->IsTabStripVisible()) { | 377 if (browser_view()->IsTabStripVisible()) { |
| 367 // On Windows 10+ where we don't draw our own window border but rather go | 378 // On Windows 10+ where we don't draw our own window border but rather go |
| 368 // right to the system border, the toolbar has no corners or side strokes. | 379 // right to the system border, the toolbar has no corners or side strokes. |
| 369 if (base::win::GetVersion() < base::win::VERSION_WIN10) { | 380 if (base::win::GetVersion() < base::win::VERSION_WIN10) { |
| 370 // Mask out the corners. | 381 // Mask out the corners. |
| 371 gfx::ImageSkia* left = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER); | 382 gfx::ImageSkia* left = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER); |
| 372 const int img_w = left->width(); | 383 const int img_w = left->width(); |
| 373 x -= kContentEdgeShadowThickness; | 384 x -= kContentEdgeShadowThickness; |
| 374 SkPaint paint; | 385 SkPaint paint; |
| 375 paint.setXfermodeMode(SkXfermode::kDstIn_Mode); | 386 paint.setXfermodeMode(SkXfermode::kDstIn_Mode); |
| 376 canvas->DrawImageInt( | 387 canvas->DrawImageInt( |
| 377 *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER_MASK), x, y, | 388 *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER_MASK), 0, 0, img_w, |
| 378 paint); | 389 h, x, y, img_w, h, false, paint); |
| 379 const int right_x = | 390 const int right_x = |
| 380 toolbar_bounds.right() + kContentEdgeShadowThickness - img_w; | 391 toolbar_bounds.right() + kContentEdgeShadowThickness - img_w; |
| 381 canvas->DrawImageInt( | 392 canvas->DrawImageInt( |
| 382 *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER_MASK), right_x, y, | 393 *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER_MASK), 0, 0, |
| 383 paint); | 394 img_w, h, right_x, y, img_w, h, false, paint); |
| 384 | 395 |
| 385 // Corner and side strokes. | 396 // Corner and side strokes. |
| 386 canvas->DrawImageInt(*left, x, y); | 397 canvas->DrawImageInt(*left, 0, 0, img_w, h, x, y, img_w, h, false); |
| 387 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER), | 398 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER), |
| 388 right_x, y); | 399 0, 0, img_w, h, right_x, y, img_w, h, false); |
| 389 | 400 |
| 390 x += img_w; | 401 x += img_w; |
| 391 w = right_x - x; | 402 w = right_x - x; |
| 392 } | 403 } |
| 393 | 404 |
| 394 // Top stroke. | 405 // Top stroke. |
| 395 gfx::ImageSkia* toolbar_center = | 406 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER), x, y, |
| 396 tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER); | 407 w, split_point); |
| 397 canvas->TileImageInt(*toolbar_center, x, y, w, toolbar_center->height()); | |
| 398 } | 408 } |
| 399 | 409 |
| 400 // Toolbar/content separator. | 410 // Toolbar/content separator. |
| 401 const SkColor separator_color = | 411 const SkColor separator_color = |
| 402 tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR); | 412 tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR); |
| 403 if (ui::MaterialDesignController::IsModeMaterial()) { | 413 if (ui::MaterialDesignController::IsModeMaterial()) { |
| 404 toolbar_bounds.Inset(kClientEdgeThickness, 0); | 414 toolbar_bounds.Inset(kClientEdgeThickness, 0); |
| 405 BrowserView::Paint1pxHorizontalLine(canvas, separator_color, | 415 BrowserView::Paint1pxHorizontalLine(canvas, separator_color, |
| 406 toolbar_bounds); | 416 toolbar_bounds); |
| 407 } else { | 417 } else { |
| 408 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness, | 418 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness, |
| 409 kClientEdgeThickness, 0); | 419 kClientEdgeThickness, 0); |
| 410 canvas->FillRect(toolbar_bounds, separator_color); | 420 canvas->FillRect(toolbar_bounds, separator_color); |
| 411 } | 421 } |
| 412 } | 422 } |
| 413 | 423 |
| 414 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { | 424 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { |
| 415 ui::ThemeProvider* tp = GetThemeProvider(); | 425 ui::ThemeProvider* tp = GetThemeProvider(); |
| 416 int y = frame()->client_view()->y(); | 426 int y = frame()->client_view()->y(); |
| 417 | 427 |
| 418 gfx::Rect client_bounds = CalculateClientAreaBounds(); | 428 gfx::Rect client_bounds = CalculateClientAreaBounds(); |
| 419 const int x = client_bounds.x(); | 429 const int x = client_bounds.x(); |
| 420 const int w = client_bounds.width(); | 430 const int w = client_bounds.width(); |
| 421 const int right = client_bounds.right(); | 431 const int right = client_bounds.right(); |
| 422 const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR); | 432 const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR); |
| 423 | 433 |
| 424 // The client edges start below the toolbar upper corner images regardless | 434 // The client edges start below the toolbar. |
| 425 // of how tall the toolbar itself is. | 435 y += browser_view()->GetToolbarBounds().bottom(); |
| 426 y += browser_view()->GetToolbarBounds().y() + | |
| 427 tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER)->height(); | |
| 428 | 436 |
| 429 const int bottom = std::max(y, height() - NonClientBorderThickness(false)); | 437 const int bottom = std::max(y, height() - NonClientBorderThickness(false)); |
| 430 int height = bottom - y; | 438 int height = bottom - y; |
| 431 | 439 |
| 432 // Draw the client edge images. | 440 // Draw the client edge images. |
| 433 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); | 441 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); |
| 434 const int img_w = right_image->width(); | 442 const int img_w = right_image->width(); |
| 435 canvas->TileImageInt(*right_image, right, y, img_w, height); | 443 canvas->TileImageInt(*right_image, right, y, img_w, height); |
| 436 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), | 444 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), |
| 437 right, bottom); | 445 right, bottom); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 static bool initialized = false; | 620 static bool initialized = false; |
| 613 if (!initialized) { | 621 if (!initialized) { |
| 614 for (int i = 0; i < kThrobberIconCount; ++i) { | 622 for (int i = 0; i < kThrobberIconCount; ++i) { |
| 615 throbber_icons_[i] = | 623 throbber_icons_[i] = |
| 616 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i); | 624 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i); |
| 617 DCHECK(throbber_icons_[i]); | 625 DCHECK(throbber_icons_[i]); |
| 618 } | 626 } |
| 619 initialized = true; | 627 initialized = true; |
| 620 } | 628 } |
| 621 } | 629 } |
| OLD | NEW |