| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_layout.h" | 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "chrome/browser/profiles/profiles_state.h" | 9 #include "chrome/browser/profiles/profiles_state.h" |
| 10 #include "chrome/browser/ui/layout_constants.h" | 10 #include "chrome/browser/ui/layout_constants.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 const int kCaptionButtonSpacing = 0; | 35 const int kCaptionButtonSpacing = 0; |
| 36 #endif | 36 #endif |
| 37 | 37 |
| 38 } // namespace | 38 } // namespace |
| 39 | 39 |
| 40 /////////////////////////////////////////////////////////////////////////////// | 40 /////////////////////////////////////////////////////////////////////////////// |
| 41 // OpaqueBrowserFrameView, public: | 41 // OpaqueBrowserFrameView, public: |
| 42 | 42 |
| 43 // statics | 43 // statics |
| 44 | 44 |
| 45 // The content edge images have a shadow built into them. |
| 46 const int OpaqueBrowserFrameViewLayout::kContentEdgeShadowThickness = 2; |
| 47 |
| 45 // Besides the frame border, there's empty space atop the window in restored | 48 // Besides the frame border, there's empty space atop the window in restored |
| 46 // mode, to use to drag the window around. | 49 // mode, to use to drag the window around. |
| 47 const int OpaqueBrowserFrameViewLayout::kNonClientRestoredExtraThickness = 11; | 50 const int OpaqueBrowserFrameViewLayout::kNonClientRestoredExtraThickness = 11; |
| 48 | 51 |
| 49 // The frame border is only visible in restored mode and is hardcoded to 4 px on | 52 // The frame border is only visible in restored mode and is hardcoded to 4 px on |
| 50 // each side regardless of the system window border size. | 53 // each side regardless of the system window border size. |
| 51 const int OpaqueBrowserFrameViewLayout::kFrameBorderThickness = 4; | 54 const int OpaqueBrowserFrameViewLayout::kFrameBorderThickness = 4; |
| 52 | 55 |
| 53 // The titlebar has a 2 px 3D edge along the top and bottom. | 56 // The titlebar has a 2 px 3D edge along the top. |
| 54 const int OpaqueBrowserFrameViewLayout::kTitlebarTopAndBottomEdgeThickness = 2; | 57 const int OpaqueBrowserFrameViewLayout::kTitlebarTopEdgeThickness = 2; |
| 55 | 58 |
| 56 // The icon is inset 2 px from the left frame border. | 59 // The icon is inset 2 px from the left frame border. |
| 57 const int OpaqueBrowserFrameViewLayout::kIconLeftSpacing = 2; | 60 const int OpaqueBrowserFrameViewLayout::kIconLeftSpacing = 2; |
| 58 | 61 |
| 59 // There is a 4 px gap between the icon and the title text. | 62 // There is a 4 px gap between the icon and the title text. |
| 60 const int OpaqueBrowserFrameViewLayout::kIconTitleSpacing = 4; | 63 const int OpaqueBrowserFrameViewLayout::kIconTitleSpacing = 4; |
| 61 | 64 |
| 62 // The horizontal spacing to use in most cases when laying out things near the | 65 // The horizontal spacing to use in most cases when laying out things near the |
| 63 // caption button area. | 66 // caption button area. |
| 64 const int OpaqueBrowserFrameViewLayout::kCaptionSpacing = 5; | 67 const int OpaqueBrowserFrameViewLayout::kCaptionSpacing = 5; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 // Annoyingly, the pre-MD layout uses different heights for the hit-test | 179 // Annoyingly, the pre-MD layout uses different heights for the hit-test |
| 177 // exclusion region (which we want here, since we're trying to size the border | 180 // exclusion region (which we want here, since we're trying to size the border |
| 178 // so that the region above the tab's hit-test zone matches) versus the shadow | 181 // so that the region above the tab's hit-test zone matches) versus the shadow |
| 179 // thickness. | 182 // thickness. |
| 180 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); | 183 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); |
| 181 return (!restored && (IsTitleBarCondensed() || delegate_->IsFullscreen())) ? | 184 return (!restored && (IsTitleBarCondensed() || delegate_->IsFullscreen())) ? |
| 182 top : (top + kNonClientRestoredExtraThickness - exclusion); | 185 top : (top + kNonClientRestoredExtraThickness - exclusion); |
| 183 } | 186 } |
| 184 | 187 |
| 185 int OpaqueBrowserFrameViewLayout::TitlebarBottomThickness(bool restored) const { | 188 int OpaqueBrowserFrameViewLayout::TitlebarBottomThickness(bool restored) const { |
| 186 int thickness = kTitleBarAdditionalPadding; | 189 const int thickness = |
| 187 // If there's a non-empty toolbar, it will render the bottom portion of the | 190 kTitleBarAdditionalPadding + kContentEdgeShadowThickness; |
| 188 // titlebar. | 191 return (delegate_->IsToolbarVisible() || !IsTitleBarCondensed() || restored) |
| 189 if (delegate_->IsToolbarVisible()) | 192 ? (thickness + views::NonClientFrameView::kClientEdgeThickness) |
| 190 return thickness; | 193 : thickness; |
| 191 thickness += kTitlebarTopAndBottomEdgeThickness; | |
| 192 return (!restored && IsTitleBarCondensed()) ? | |
| 193 thickness : (thickness + views::NonClientFrameView::kClientEdgeThickness); | |
| 194 } | 194 } |
| 195 | 195 |
| 196 int OpaqueBrowserFrameViewLayout::CaptionButtonY(bool restored) const { | 196 int OpaqueBrowserFrameViewLayout::CaptionButtonY(bool restored) const { |
| 197 // Maximized buttons start at window top, since the window has no border. This | 197 // Maximized buttons start at window top, since the window has no border. This |
| 198 // offset is for the image (the actual clickable bounds extend all the way to | 198 // offset is for the image (the actual clickable bounds extend all the way to |
| 199 // the top to take Fitts' Law into account). | 199 // the top to take Fitts' Law into account). |
| 200 const int frame = (!restored && IsTitleBarCondensed()) ? | 200 const int frame = (!restored && IsTitleBarCondensed()) ? |
| 201 FrameBorderThickness(false) : | 201 FrameBorderThickness(false) : |
| 202 views::NonClientFrameView::kFrameShadowThickness; | 202 views::NonClientFrameView::kFrameShadowThickness; |
| 203 return frame + extra_caption_y_; | 203 return frame + extra_caption_y_; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 | 284 |
| 285 // Our frame border has a different "3D look" than Windows'. Theirs has | 285 // Our frame border has a different "3D look" than Windows'. Theirs has |
| 286 // a more complex gradient on the top that they push their icon/title | 286 // a more complex gradient on the top that they push their icon/title |
| 287 // below; then the maximized window cuts this off and the icon/title are | 287 // below; then the maximized window cuts this off and the icon/title are |
| 288 // centered in the remaining space. Because the apparent shape of our | 288 // centered in the remaining space. Because the apparent shape of our |
| 289 // border is simpler, using the same positioning makes things look | 289 // border is simpler, using the same positioning makes things look |
| 290 // slightly uncentered with restored windows, so when the window is | 290 // slightly uncentered with restored windows, so when the window is |
| 291 // restored, instead of calculating the remaining space from below the | 291 // restored, instead of calculating the remaining space from below the |
| 292 // frame border, we calculate from below the 3D edge. | 292 // frame border, we calculate from below the 3D edge. |
| 293 int unavailable_px_at_top = IsTitleBarCondensed() ? | 293 int unavailable_px_at_top = IsTitleBarCondensed() ? |
| 294 frame_thickness : kTitlebarTopAndBottomEdgeThickness; | 294 frame_thickness : kTitlebarTopEdgeThickness; |
| 295 // When the icon is shorter than the minimum space we reserve for the | 295 // When the icon is shorter than the minimum space we reserve for the |
| 296 // caption button, we vertically center it. We want to bias rounding to | 296 // caption button, we vertically center it. We want to bias rounding to |
| 297 // put extra space above the icon, since the 3D edge (+ client edge, for | 297 // put extra space above the icon, since the 3D edge (+ client edge, for |
| 298 // restored windows) below looks (to the eye) more like additional space | 298 // restored windows) below looks (to the eye) more like additional space |
| 299 // than does the 3D edge (or nothing at all, for maximized windows) | 299 // than does the 3D edge (or nothing at all, for maximized windows) |
| 300 // above; hence the +1. | 300 // above; hence the +1. |
| 301 int y = unavailable_px_at_top + (NonClientTopBorderHeight(false) - | 301 int y = unavailable_px_at_top + (NonClientTopBorderHeight(false) - |
| 302 unavailable_px_at_top - size - | 302 unavailable_px_at_top - size - |
| 303 TitlebarBottomThickness(false) + 1) / 2; | 303 TitlebarBottomThickness(false) + 1) / 2; |
| 304 | 304 |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 | 619 |
| 620 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, | 620 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, |
| 621 views::View* view) { | 621 views::View* view) { |
| 622 SetView(view->id(), view); | 622 SetView(view->id(), view); |
| 623 } | 623 } |
| 624 | 624 |
| 625 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, | 625 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, |
| 626 views::View* view) { | 626 views::View* view) { |
| 627 SetView(view->id(), nullptr); | 627 SetView(view->id(), nullptr); |
| 628 } | 628 } |
| OLD | NEW |