| Index: chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| index 20616aa7b4921c7bb067eac7ebc2d44b35d30c34..ae417260eac941ef06f9970832a00a6ac94fe352 100644
|
| --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| @@ -197,6 +197,27 @@ gfx::Rect OpaqueBrowserFrameView::GetBoundsForReservedArea() const {
|
| GetReservedHeight());
|
| }
|
|
|
| +int OpaqueBrowserFrameView::NonClientTopBorderHeight(
|
| + bool restored,
|
| + bool ignore_vertical_tabs) const {
|
| + views::Window* window = frame_->GetWindow();
|
| + views::WindowDelegate* delegate = window->window_delegate();
|
| + // |delegate| may be NULL if called from callback of InputMethodChanged while
|
| + // a window is being destroyed.
|
| + // See more discussion at http://crosbug.com/8958
|
| + if ((delegate && delegate->ShouldShowWindowTitle()) ||
|
| + (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs &&
|
| + browser_view_->UseVerticalTabs())) {
|
| + return std::max(FrameBorderThickness(restored) + IconSize(),
|
| + CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) +
|
| + TitlebarBottomThickness(restored);
|
| + }
|
| +
|
| + return FrameBorderThickness(restored) -
|
| + ((browser_view_->IsTabStripVisible() && !restored &&
|
| + window->IsMaximized()) ? kTabstripTopShadowThickness : 0);
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // OpaqueBrowserFrameView, BrowserNonClientFrameView implementation:
|
|
|
| @@ -474,25 +495,8 @@ int OpaqueBrowserFrameView::NonClientBorderThickness() const {
|
| 0 : kClientEdgeThickness);
|
| }
|
|
|
| -int OpaqueBrowserFrameView::NonClientTopBorderHeight(
|
| - bool restored,
|
| - bool ignore_vertical_tabs) const {
|
| - views::Window* window = frame_->GetWindow();
|
| - views::WindowDelegate* delegate = window->window_delegate();
|
| - // |delegate| may be NULL if called from callback of InputMethodChanged while
|
| - // a window is being destroyed.
|
| - // See more discussion at http://crosbug.com/8958
|
| - if ((delegate && delegate->ShouldShowWindowTitle()) ||
|
| - (browser_view_->IsTabStripVisible() && !ignore_vertical_tabs &&
|
| - browser_view_->UseVerticalTabs())) {
|
| - return std::max(FrameBorderThickness(restored) + IconSize(),
|
| - CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) +
|
| - TitlebarBottomThickness(restored);
|
| - }
|
| -
|
| - return FrameBorderThickness(restored) -
|
| - ((browser_view_->IsTabStripVisible() && !restored &&
|
| - window->IsMaximized()) ? kTabstripTopShadowThickness : 0);
|
| +void OpaqueBrowserFrameView::ModifyMaximizedFramePainting(
|
| + int* theme_offset, SkBitmap** left_corner, SkBitmap** right_corner) {
|
| }
|
|
|
| int OpaqueBrowserFrameView::CaptionButtonY(bool restored) const {
|
| @@ -668,13 +672,19 @@ void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) {
|
| height() - top_left_height - bottom_left_corner->height());
|
| }
|
|
|
| -
|
| void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) {
|
| ui::ThemeProvider* tp = GetThemeProvider();
|
| views::Window* window = frame_->GetWindow();
|
|
|
| // Window frame mode and color
|
| SkBitmap* theme_frame;
|
| +
|
| + // Allow customization of these attributes.
|
| + SkBitmap* left = NULL;
|
| + SkBitmap* right = NULL;
|
| + int top_offset = 0;
|
| + ModifyMaximizedFramePainting(&top_offset, &left, &right);
|
| +
|
| // Never theme app and popup windows.
|
| if (!browser_view_->IsBrowserTypeNormal()) {
|
| ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| @@ -692,9 +702,22 @@ void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) {
|
| // kTabstripTopShadowThickness px off the top of the screen.
|
| int theme_background_y = -(GetHorizontalTabStripVerticalOffset(true) +
|
| kTabstripTopShadowThickness);
|
| - canvas->TileImageInt(*theme_frame, 0, theme_background_y, width(),
|
| - theme_frame->height());
|
| + int left_offset = 0, right_offset = 0;
|
| +
|
| + if (left || right) {
|
| + // If we have either a left or right we should have both.
|
| + DCHECK(left && right);
|
| + left_offset = left->width();
|
| + right_offset = right->width();
|
| + canvas->DrawBitmapInt(*left, 0, 0);
|
| + canvas->DrawBitmapInt(*right, width() - right_offset, 0);
|
| + }
|
|
|
| + canvas->TileImageInt(*theme_frame,
|
| + left_offset,
|
| + top_offset,
|
| + width() - (left_offset + right_offset),
|
| + theme_frame->height());
|
| // Draw the theme frame overlay
|
| if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) &&
|
| browser_view_->IsBrowserTypeNormal()) {
|
|
|