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

Side by Side Diff: chrome/browser/ui/views/frame/opaque_browser_frame_view.cc

Issue 6904160: Implement new gray mock. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review nits Created 9 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/frame/opaque_browser_frame_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/themes/theme_service.h" 9 #include "chrome/browser/themes/theme_service.h"
10 #include "chrome/browser/ui/views/frame/browser_frame.h" 10 #include "chrome/browser/ui/views/frame/browser_frame.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 190
191 gfx::Rect OpaqueBrowserFrameView::GetBoundsForReservedArea() const { 191 gfx::Rect OpaqueBrowserFrameView::GetBoundsForReservedArea() const {
192 gfx::Rect client_view_bounds = CalculateClientAreaBounds(width(), height()); 192 gfx::Rect client_view_bounds = CalculateClientAreaBounds(width(), height());
193 return gfx::Rect( 193 return gfx::Rect(
194 client_view_bounds.x(), 194 client_view_bounds.x(),
195 client_view_bounds.y() + client_view_bounds.height(), 195 client_view_bounds.y() + client_view_bounds.height(),
196 client_view_bounds.width(), 196 client_view_bounds.width(),
197 GetReservedHeight()); 197 GetReservedHeight());
198 } 198 }
199 199
200 int OpaqueBrowserFrameView::NonClientTopBorderHeight(
201 bool restored,
202 bool ignore_vertical_tabs) const {
203 views::Window* window = frame_->GetWindow();
204 views::WindowDelegate* delegate = window->window_delegate();
205 // |delegate| may be NULL if called from callback of InputMethodChanged while
206 // a window is being destroyed.
207 // See more discussion at http://crosbug.com/8958
208 if ((delegate && delegate->ShouldShowWindowTitle()) ||
209 (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs &&
210 browser_view_->UseVerticalTabs())) {
211 return std::max(FrameBorderThickness(restored) + IconSize(),
212 CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) +
213 TitlebarBottomThickness(restored);
214 }
215
216 return FrameBorderThickness(restored) -
217 ((browser_view_->IsTabStripVisible() && !restored &&
218 window->IsMaximized()) ? kTabstripTopShadowThickness : 0);
219 }
220
200 /////////////////////////////////////////////////////////////////////////////// 221 ///////////////////////////////////////////////////////////////////////////////
201 // OpaqueBrowserFrameView, BrowserNonClientFrameView implementation: 222 // OpaqueBrowserFrameView, BrowserNonClientFrameView implementation:
202 223
203 gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip( 224 gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip(
204 views::View* tabstrip) const { 225 views::View* tabstrip) const {
205 if (!tabstrip) { 226 if (!tabstrip) {
206 return gfx::Rect(); 227 return gfx::Rect();
207 } 228 }
208 229
209 if (browser_view_->UseVerticalTabs()) { 230 if (browser_view_->UseVerticalTabs()) {
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 } 488 }
468 489
469 int OpaqueBrowserFrameView::NonClientBorderThickness() const { 490 int OpaqueBrowserFrameView::NonClientBorderThickness() const {
470 // When we fill the screen, we don't show a client edge. 491 // When we fill the screen, we don't show a client edge.
471 views::Window* window = frame_->GetWindow(); 492 views::Window* window = frame_->GetWindow();
472 return FrameBorderThickness(false) + 493 return FrameBorderThickness(false) +
473 ((window->IsMaximized() || window->IsFullscreen()) ? 494 ((window->IsMaximized() || window->IsFullscreen()) ?
474 0 : kClientEdgeThickness); 495 0 : kClientEdgeThickness);
475 } 496 }
476 497
477 int OpaqueBrowserFrameView::NonClientTopBorderHeight( 498 void OpaqueBrowserFrameView::ModifyMaximizedFramePainting(
478 bool restored, 499 int* theme_offset, SkBitmap** left_corner, SkBitmap** right_corner) {
479 bool ignore_vertical_tabs) const {
480 views::Window* window = frame_->GetWindow();
481 views::WindowDelegate* delegate = window->window_delegate();
482 // |delegate| may be NULL if called from callback of InputMethodChanged while
483 // a window is being destroyed.
484 // See more discussion at http://crosbug.com/8958
485 if ((delegate && delegate->ShouldShowWindowTitle()) ||
486 (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs &&
487 browser_view_->UseVerticalTabs())) {
488 return std::max(FrameBorderThickness(restored) + IconSize(),
489 CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) +
490 TitlebarBottomThickness(restored);
491 }
492
493 return FrameBorderThickness(restored) -
494 ((browser_view_->IsTabStripVisible() && !restored &&
495 window->IsMaximized()) ? kTabstripTopShadowThickness : 0);
496 } 500 }
497 501
498 int OpaqueBrowserFrameView::CaptionButtonY(bool restored) const { 502 int OpaqueBrowserFrameView::CaptionButtonY(bool restored) const {
499 // Maximized buttons start at window top so that even if their images aren't 503 // Maximized buttons start at window top so that even if their images aren't
500 // drawn flush with the screen edge, they still obey Fitts' Law. 504 // drawn flush with the screen edge, they still obey Fitts' Law.
501 return (!restored && frame_->GetWindow()->IsMaximized()) ? 505 return (!restored && frame_->GetWindow()->IsMaximized()) ?
502 FrameBorderThickness(false) : kFrameShadowThickness; 506 FrameBorderThickness(false) : kFrameShadowThickness;
503 } 507 }
504 508
505 int OpaqueBrowserFrameView::TitlebarBottomThickness(bool restored) const { 509 int OpaqueBrowserFrameView::TitlebarBottomThickness(bool restored) const {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 width() - bottom_left_corner->width() - bottom_right_corner->width(), 665 width() - bottom_left_corner->width() - bottom_right_corner->width(),
662 bottom_edge->height()); 666 bottom_edge->height());
663 canvas->DrawBitmapInt(*bottom_left_corner, 0, 667 canvas->DrawBitmapInt(*bottom_left_corner, 0,
664 height() - bottom_left_corner->height()); 668 height() - bottom_left_corner->height());
665 669
666 // Left. 670 // Left.
667 canvas->TileImageInt(*left_edge, 0, top_left_height, left_edge->width(), 671 canvas->TileImageInt(*left_edge, 0, top_left_height, left_edge->width(),
668 height() - top_left_height - bottom_left_corner->height()); 672 height() - top_left_height - bottom_left_corner->height());
669 } 673 }
670 674
671
672 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) { 675 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) {
673 ui::ThemeProvider* tp = GetThemeProvider(); 676 ui::ThemeProvider* tp = GetThemeProvider();
674 views::Window* window = frame_->GetWindow(); 677 views::Window* window = frame_->GetWindow();
675 678
676 // Window frame mode and color 679 // Window frame mode and color
677 SkBitmap* theme_frame; 680 SkBitmap* theme_frame;
681
682 // Allow customization of these attributes.
683 SkBitmap* left = NULL;
684 SkBitmap* right = NULL;
685 int top_offset = 0;
686 ModifyMaximizedFramePainting(&top_offset, &left, &right);
687
678 // Never theme app and popup windows. 688 // Never theme app and popup windows.
679 if (!browser_view_->IsBrowserTypeNormal()) { 689 if (!browser_view_->IsBrowserTypeNormal()) {
680 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 690 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
681 theme_frame = rb.GetBitmapNamed(ShouldPaintAsActive() ? 691 theme_frame = rb.GetBitmapNamed(ShouldPaintAsActive() ?
682 IDR_FRAME : IDR_FRAME_INACTIVE); 692 IDR_FRAME : IDR_FRAME_INACTIVE);
683 } else if (!browser_view_->IsOffTheRecord()) { 693 } else if (!browser_view_->IsOffTheRecord()) {
684 theme_frame = tp->GetBitmapNamed(ShouldPaintAsActive() ? 694 theme_frame = tp->GetBitmapNamed(ShouldPaintAsActive() ?
685 IDR_THEME_FRAME : IDR_THEME_FRAME_INACTIVE); 695 IDR_THEME_FRAME : IDR_THEME_FRAME_INACTIVE);
686 } else { 696 } else {
687 theme_frame = tp->GetBitmapNamed(ShouldPaintAsActive() ? 697 theme_frame = tp->GetBitmapNamed(ShouldPaintAsActive() ?
688 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME_INCOGNITO_INACTIVE); 698 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME_INCOGNITO_INACTIVE);
689 } 699 }
690 // Draw the theme frame. It must be aligned with the tabstrip as if we were 700 // Draw the theme frame. It must be aligned with the tabstrip as if we were
691 // in restored mode. Note that the top of the tabstrip is 701 // in restored mode. Note that the top of the tabstrip is
692 // kTabstripTopShadowThickness px off the top of the screen. 702 // kTabstripTopShadowThickness px off the top of the screen.
693 int theme_background_y = -(GetHorizontalTabStripVerticalOffset(true) + 703 int theme_background_y = -(GetHorizontalTabStripVerticalOffset(true) +
694 kTabstripTopShadowThickness); 704 kTabstripTopShadowThickness);
695 canvas->TileImageInt(*theme_frame, 0, theme_background_y, width(), 705 int left_offset = 0, right_offset = 0;
706
707 if (left || right) {
708 // If we have either a left or right we should have both.
709 DCHECK(left && right);
710 left_offset = left->width();
711 right_offset = right->width();
712 canvas->DrawBitmapInt(*left, 0, 0);
713 canvas->DrawBitmapInt(*right, width() - right_offset, 0);
714 }
715
716 canvas->TileImageInt(*theme_frame,
717 left_offset,
718 top_offset,
719 width() - (left_offset + right_offset),
696 theme_frame->height()); 720 theme_frame->height());
697
698 // Draw the theme frame overlay 721 // Draw the theme frame overlay
699 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && 722 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) &&
700 browser_view_->IsBrowserTypeNormal()) { 723 browser_view_->IsBrowserTypeNormal()) {
701 SkBitmap* theme_overlay = tp->GetBitmapNamed(ShouldPaintAsActive() ? 724 SkBitmap* theme_overlay = tp->GetBitmapNamed(ShouldPaintAsActive() ?
702 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); 725 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE);
703 canvas->DrawBitmapInt(*theme_overlay, 0, theme_background_y); 726 canvas->DrawBitmapInt(*theme_overlay, 0, theme_background_y);
704 } 727 }
705 728
706 if (!browser_view_->IsToolbarVisible()) { 729 if (!browser_view_->IsToolbarVisible()) {
707 // There's no toolbar to edge the frame border, so we need to draw a bottom 730 // There's no toolbar to edge the frame border, so we need to draw a bottom
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 1097
1075 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, 1098 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width,
1076 int height) const { 1099 int height) const {
1077 int top_height = NonClientTopBorderHeight(false, false); 1100 int top_height = NonClientTopBorderHeight(false, false);
1078 int border_thickness = NonClientBorderThickness(); 1101 int border_thickness = NonClientBorderThickness();
1079 return gfx::Rect(border_thickness, top_height, 1102 return gfx::Rect(border_thickness, top_height,
1080 std::max(0, width - (2 * border_thickness)), 1103 std::max(0, width - (2 * border_thickness)),
1081 std::max(0, height - GetReservedHeight() - 1104 std::max(0, height - GetReservedHeight() -
1082 top_height - border_thickness)); 1105 top_height - border_thickness));
1083 } 1106 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/opaque_browser_frame_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698