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_layout.h" | 5 #include "chrome/browser/ui/views/frame/browser_view_layout.h" |
| 6 | 6 |
| 7 #include "base/observer_list.h" | 7 #include "base/observer_list.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 10 #include "chrome/browser/ui/browser_finder.h" | 10 #include "chrome/browser/ui/browser_finder.h" |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 242 int scrollbar_width = gfx::scrollbar_size(); | 242 int scrollbar_width = gfx::scrollbar_size(); |
| 243 bounding_box.set_width(std::max(0, bounding_box.width() - scrollbar_width)); | 243 bounding_box.set_width(std::max(0, bounding_box.width() - scrollbar_width)); |
| 244 if (base::i18n::IsRTL()) | 244 if (base::i18n::IsRTL()) |
| 245 bounding_box.set_x(bounding_box.x() + scrollbar_width); | 245 bounding_box.set_x(bounding_box.x() + scrollbar_width); |
| 246 | 246 |
| 247 return bounding_box; | 247 return bounding_box; |
| 248 } | 248 } |
| 249 | 249 |
| 250 bool BrowserViewLayout::IsPositionInWindowCaption( | 250 bool BrowserViewLayout::IsPositionInWindowCaption( |
| 251 const gfx::Point& point) { | 251 const gfx::Point& point) { |
| 252 // Tab strip may transiently have no parent between the RemoveChildView() and | 252 views::View* window_switcher_button = delegate_->GetWindowSwitcherButton(); |
| 253 // AddChildView() caused by reparenting during an immersive mode reveal. | 253 if (window_switcher_button) { |
| 254 // During this window report that the point didn't hit a tab. | 254 gfx::Point window_switcher_point(point); |
| 255 if (!tab_strip_->parent()) | 255 views::View::ConvertPointToTarget(browser_view_, window_switcher_button, |
| 256 return true; | 256 &window_switcher_point); |
| 257 if (window_switcher_button->HitTestPoint(window_switcher_point)) | |
| 258 return false; | |
| 259 } | |
| 260 | |
| 257 gfx::Point tabstrip_point(point); | 261 gfx::Point tabstrip_point(point); |
| 258 views::View::ConvertPointToTarget(browser_view_, tab_strip_, &tabstrip_point); | 262 views::View::ConvertPointToTarget(browser_view_, tab_strip_, &tabstrip_point); |
| 263 | |
| 264 // NonClientFrameView::HitTestRect() should have filtered out any points | |
| 265 // below |tab_strip_|. | |
| 266 DCHECK_LE(point.y(), tab_strip_->bounds().bottom()); | |
| 267 | |
| 268 // The window controls are in the non client view. | |
| 269 if (!tab_strip_->HitTestPoint(tabstrip_point)) | |
|
James Cook
2013/07/12 23:12:12
Is there some other way to do this? In particular
| |
| 270 return true; | |
| 259 return tab_strip_->IsPositionInWindowCaption(tabstrip_point); | 271 return tab_strip_->IsPositionInWindowCaption(tabstrip_point); |
| 260 } | 272 } |
| 261 | 273 |
| 262 int BrowserViewLayout::NonClientHitTest( | 274 int BrowserViewLayout::NonClientHitTest( |
| 263 const gfx::Point& point) { | 275 const gfx::Point& point) { |
| 264 // Since the TabStrip only renders in some parts of the top of the window, | 276 // Since the TabStrip only renders in some parts of the top of the window, |
| 265 // the un-obscured area is considered to be part of the non-client caption | 277 // the un-obscured area is considered to be part of the non-client caption |
| 266 // area of the window. So we need to treat hit-tests in these regions as | 278 // area of the window. So we need to treat hit-tests in these regions as |
| 267 // hit-tests of the titlebar. | 279 // hit-tests of the titlebar. |
| 268 | 280 |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 641 return bottom; | 653 return bottom; |
| 642 } | 654 } |
| 643 | 655 |
| 644 bool BrowserViewLayout::InfobarVisible() const { | 656 bool BrowserViewLayout::InfobarVisible() const { |
| 645 // Cast to a views::View to access GetPreferredSize(). | 657 // Cast to a views::View to access GetPreferredSize(). |
| 646 views::View* infobar_container = infobar_container_; | 658 views::View* infobar_container = infobar_container_; |
| 647 // NOTE: Can't check if the size IsEmpty() since it's always 0-width. | 659 // NOTE: Can't check if the size IsEmpty() since it's always 0-width. |
| 648 return browser_->SupportsWindowFeature(Browser::FEATURE_INFOBAR) && | 660 return browser_->SupportsWindowFeature(Browser::FEATURE_INFOBAR) && |
| 649 (infobar_container->GetPreferredSize().height() != 0); | 661 (infobar_container->GetPreferredSize().height() != 0); |
| 650 } | 662 } |
| OLD | NEW |