| Index: chrome/browser/views/frame/opaque_browser_frame_view.cc
|
| ===================================================================
|
| --- chrome/browser/views/frame/opaque_browser_frame_view.cc (revision 10646)
|
| +++ chrome/browser/views/frame/opaque_browser_frame_view.cc (working copy)
|
| @@ -2,8 +2,9 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/views/frame/opaque_non_client_view.h"
|
| +#include "chrome/browser/views/frame/opaque_browser_frame_view.h"
|
|
|
| +#include "chrome/browser/views/frame/browser_frame.h"
|
| #include "chrome/browser/views/frame/browser_view.h"
|
| #include "chrome/browser/views/tabs/tab_strip.h"
|
| #include "chrome/common/gfx/chrome_font.h"
|
| @@ -251,12 +252,12 @@
|
| SkBitmap* OTRActiveWindowResources::standard_frame_bitmaps_[];
|
| SkBitmap* OTRInactiveWindowResources::standard_frame_bitmaps_[];
|
|
|
| -views::WindowResources* OpaqueNonClientView::active_resources_ = NULL;
|
| -views::WindowResources* OpaqueNonClientView::inactive_resources_ = NULL;
|
| -views::WindowResources* OpaqueNonClientView::active_otr_resources_ = NULL;
|
| -views::WindowResources* OpaqueNonClientView::inactive_otr_resources_ = NULL;
|
| -SkBitmap* OpaqueNonClientView::distributor_logo_ = NULL;
|
| -ChromeFont OpaqueNonClientView::title_font_;
|
| +views::WindowResources* OpaqueBrowserFrameView::active_resources_ = NULL;
|
| +views::WindowResources* OpaqueBrowserFrameView::inactive_resources_ = NULL;
|
| +views::WindowResources* OpaqueBrowserFrameView::active_otr_resources_ = NULL;
|
| +views::WindowResources* OpaqueBrowserFrameView::inactive_otr_resources_ = NULL;
|
| +SkBitmap* OpaqueBrowserFrameView::distributor_logo_ = NULL;
|
| +ChromeFont OpaqueBrowserFrameView::title_font_;
|
|
|
| namespace {
|
| // The frame border is only visible in restored mode and is hardcoded to 4 px on
|
| @@ -325,11 +326,11 @@
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, public:
|
| +// OpaqueBrowserFrameView, public:
|
|
|
| -OpaqueNonClientView::OpaqueNonClientView(OpaqueFrame* frame,
|
| - BrowserView* browser_view)
|
| - : NonClientView(),
|
| +OpaqueBrowserFrameView::OpaqueBrowserFrameView(BrowserFrame* frame,
|
| + BrowserView* browser_view)
|
| + : BrowserNonClientFrameView(),
|
| minimize_button_(new views::Button),
|
| maximize_button_(new views::Button),
|
| restore_button_(new views::Button),
|
| @@ -420,20 +421,14 @@
|
| InitAppWindowResources();
|
| }
|
|
|
| -OpaqueNonClientView::~OpaqueNonClientView() {
|
| +OpaqueBrowserFrameView::~OpaqueBrowserFrameView() {
|
| }
|
|
|
| -gfx::Rect OpaqueNonClientView::GetWindowBoundsForClientBounds(
|
| - const gfx::Rect& client_bounds) {
|
| - int top_height = NonClientTopBorderHeight();
|
| - int border_thickness = NonClientBorderThickness();
|
| - return gfx::Rect(std::max(0, client_bounds.x() - border_thickness),
|
| - std::max(0, client_bounds.y() - top_height),
|
| - client_bounds.width() + (2 * border_thickness),
|
| - client_bounds.height() + top_height + border_thickness);
|
| -}
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +// OpaqueBrowserFrameView, BrowserNonClientFrameView implementation:
|
|
|
| -gfx::Rect OpaqueNonClientView::GetBoundsForTabStrip(TabStrip* tabstrip) {
|
| +gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip(
|
| + TabStrip* tabstrip) const {
|
| int tabstrip_x = browser_view_->ShouldShowOffTheRecordAvatar() ?
|
| (otr_avatar_bounds_.right() + kOTRSideSpacing) :
|
| NonClientBorderThickness();
|
| @@ -444,32 +439,29 @@
|
| std::max(0, tabstrip_width), tabstrip->GetPreferredHeight());
|
| }
|
|
|
| -void OpaqueNonClientView::UpdateWindowIcon() {
|
| +void OpaqueBrowserFrameView::UpdateThrobber(bool running) {
|
| if (window_icon_)
|
| window_icon_->Update();
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, views::NonClientView implementation:
|
| +// OpaqueBrowserFrameView, views::NonClientFrameView implementation:
|
|
|
| -gfx::Rect OpaqueNonClientView::CalculateClientAreaBounds(int width,
|
| - int height) const {
|
| - int top_height = NonClientTopBorderHeight();
|
| - int border_thickness = NonClientBorderThickness();
|
| - return gfx::Rect(border_thickness, top_height,
|
| - std::max(0, width - (2 * border_thickness)),
|
| - std::max(0, height - top_height - border_thickness));
|
| +gfx::Rect OpaqueBrowserFrameView::GetBoundsForClientView() const {
|
| + return client_view_bounds_;
|
| }
|
|
|
| -gfx::Size OpaqueNonClientView::CalculateWindowSizeForClientSize(
|
| - int width,
|
| - int height) const {
|
| +gfx::Rect OpaqueBrowserFrameView::GetWindowBoundsForClientBounds(
|
| + const gfx::Rect& client_bounds) const {
|
| + int top_height = NonClientTopBorderHeight();
|
| int border_thickness = NonClientBorderThickness();
|
| - return gfx::Size(width + (2 * border_thickness),
|
| - height + NonClientTopBorderHeight() + border_thickness);
|
| + return gfx::Rect(std::max(0, client_bounds.x() - border_thickness),
|
| + std::max(0, client_bounds.y() - top_height),
|
| + client_bounds.width() + (2 * border_thickness),
|
| + client_bounds.height() + top_height + border_thickness);
|
| }
|
|
|
| -gfx::Point OpaqueNonClientView::GetSystemMenuPoint() const {
|
| +gfx::Point OpaqueBrowserFrameView::GetSystemMenuPoint() const {
|
| gfx::Point system_menu_point(FrameBorderThickness(),
|
| NonClientTopBorderHeight() + browser_view_->GetTabStripHeight() -
|
| kClientEdgeThickness);
|
| @@ -477,7 +469,7 @@
|
| return system_menu_point;
|
| }
|
|
|
| -int OpaqueNonClientView::NonClientHitTest(const gfx::Point& point) {
|
| +int OpaqueBrowserFrameView::NonClientHitTest(const gfx::Point& point) {
|
| if (!bounds().Contains(point))
|
| return HTNOWHERE;
|
|
|
| @@ -508,8 +500,8 @@
|
| return (window_component == HTNOWHERE) ? HTCAPTION : window_component;
|
| }
|
|
|
| -void OpaqueNonClientView::GetWindowMask(const gfx::Size& size,
|
| - gfx::Path* window_mask) {
|
| +void OpaqueBrowserFrameView::GetWindowMask(const gfx::Size& size,
|
| + gfx::Path* window_mask) {
|
| DCHECK(window_mask);
|
|
|
| if (browser_view_->IsFullscreen())
|
| @@ -534,11 +526,11 @@
|
| window_mask->close();
|
| }
|
|
|
| -void OpaqueNonClientView::EnableClose(bool enable) {
|
| +void OpaqueBrowserFrameView::EnableClose(bool enable) {
|
| close_button_->SetEnabled(enable);
|
| }
|
|
|
| -void OpaqueNonClientView::ResetWindowControls() {
|
| +void OpaqueBrowserFrameView::ResetWindowControls() {
|
| restore_button_->SetState(views::Button::BS_NORMAL);
|
| minimize_button_->SetState(views::Button::BS_NORMAL);
|
| maximize_button_->SetState(views::Button::BS_NORMAL);
|
| @@ -546,9 +538,9 @@
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, views::View overrides:
|
| +// OpaqueBrowserFrameView, views::View overrides:
|
|
|
| -void OpaqueNonClientView::Paint(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::Paint(ChromeCanvas* canvas) {
|
| if (browser_view_->IsFullscreen())
|
| return; // Nothing is visible, so don't bother to paint.
|
|
|
| @@ -564,7 +556,7 @@
|
| PaintRestoredClientEdge(canvas);
|
| }
|
|
|
| -void OpaqueNonClientView::Layout() {
|
| +void OpaqueBrowserFrameView::Layout() {
|
| LayoutWindowControls();
|
| LayoutDistributorLogo();
|
| LayoutTitleBar();
|
| @@ -572,8 +564,8 @@
|
| LayoutClientView();
|
| }
|
|
|
| -views::View* OpaqueNonClientView::GetViewForPoint(const gfx::Point& point,
|
| - bool can_create_floating) {
|
| +views::View* OpaqueBrowserFrameView::GetViewForPoint(const gfx::Point& point,
|
| + bool can_create_floating) {
|
| // We override this function because the ClientView can overlap the non -
|
| // client view, making it impossible to click on the window controls. We need
|
| // to ensure the window controls are checked _first_.
|
| @@ -589,14 +581,10 @@
|
| return View::GetViewForPoint(point, can_create_floating);
|
| }
|
|
|
| -void OpaqueNonClientView::ViewHierarchyChanged(bool is_add,
|
| - views::View* parent,
|
| - views::View* child) {
|
| +void OpaqueBrowserFrameView::ViewHierarchyChanged(bool is_add,
|
| + views::View* parent,
|
| + views::View* child) {
|
| if (is_add && child == this) {
|
| - DCHECK(GetWidget());
|
| - DCHECK(frame_->client_view()->GetParent() != this);
|
| - AddChildView(frame_->client_view());
|
| -
|
| // The Accessibility glue looks for the product name on these two views to
|
| // determine if this is in fact a Chrome window.
|
| GetRootView()->SetAccessibleName(l10n_util::GetString(IDS_PRODUCT_NAME));
|
| @@ -604,7 +592,7 @@
|
| }
|
| }
|
|
|
| -bool OpaqueNonClientView::GetAccessibleRole(VARIANT* role) {
|
| +bool OpaqueBrowserFrameView::GetAccessibleRole(VARIANT* role) {
|
| DCHECK(role);
|
| // We aren't actually the client area of the window, but we act like it as
|
| // far as MSAA and the UI tests are concerned.
|
| @@ -613,7 +601,7 @@
|
| return true;
|
| }
|
|
|
| -bool OpaqueNonClientView::GetAccessibleName(std::wstring* name) {
|
| +bool OpaqueBrowserFrameView::GetAccessibleName(std::wstring* name) {
|
| if (!accessible_name_.empty()) {
|
| *name = accessible_name_;
|
| return true;
|
| @@ -621,14 +609,14 @@
|
| return false;
|
| }
|
|
|
| -void OpaqueNonClientView::SetAccessibleName(const std::wstring& name) {
|
| +void OpaqueBrowserFrameView::SetAccessibleName(const std::wstring& name) {
|
| accessible_name_ = name;
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, views::BaseButton::ButtonListener implementation:
|
| +// OpaqueBrowserFrameView, views::BaseButton::ButtonListener implementation:
|
|
|
| -void OpaqueNonClientView::ButtonPressed(views::BaseButton* sender) {
|
| +void OpaqueBrowserFrameView::ButtonPressed(views::BaseButton* sender) {
|
| if (sender == minimize_button_)
|
| frame_->ExecuteSystemMenuCommand(SC_MINIMIZE);
|
| else if (sender == maximize_button_)
|
| @@ -640,9 +628,9 @@
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, TabIconView::TabContentsProvider implementation:
|
| +// OpaqueBrowserFrameView, TabIconView::TabContentsProvider implementation:
|
|
|
| -bool OpaqueNonClientView::ShouldTabIconViewAnimate() const {
|
| +bool OpaqueBrowserFrameView::ShouldTabIconViewAnimate() const {
|
| // This function is queried during the creation of the window as the
|
| // TabIconView we host is initialized, so we need to NULL check the selected
|
| // TabContents because in this condition there is not yet a selected tab.
|
| @@ -650,31 +638,31 @@
|
| return current_tab ? current_tab->is_loading() : false;
|
| }
|
|
|
| -SkBitmap OpaqueNonClientView::GetFavIconForTabIconView() {
|
| +SkBitmap OpaqueBrowserFrameView::GetFavIconForTabIconView() {
|
| return frame_->window_delegate()->GetWindowIcon();
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// OpaqueNonClientView, private:
|
| +// OpaqueBrowserFrameView, private:
|
|
|
| -int OpaqueNonClientView::FrameBorderThickness() const {
|
| +int OpaqueBrowserFrameView::FrameBorderThickness() const {
|
| if (browser_view_->IsFullscreen())
|
| return 0;
|
| return frame_->IsMaximized() ?
|
| GetSystemMetrics(SM_CXSIZEFRAME) : kFrameBorderThickness;
|
| }
|
|
|
| -int OpaqueNonClientView::TopResizeHeight() const {
|
| +int OpaqueBrowserFrameView::TopResizeHeight() const {
|
| return FrameBorderThickness() - kTopResizeAdjust;
|
| }
|
|
|
| -int OpaqueNonClientView::NonClientBorderThickness() const {
|
| +int OpaqueBrowserFrameView::NonClientBorderThickness() const {
|
| // When we fill the screen, we don't show a client edge.
|
| return FrameBorderThickness() +
|
| (browser_view_->CanCurrentlyResize() ? kClientEdgeThickness : 0);
|
| }
|
|
|
| -int OpaqueNonClientView::NonClientTopBorderHeight() const {
|
| +int OpaqueBrowserFrameView::NonClientTopBorderHeight() const {
|
| if (frame_->window_delegate()->ShouldShowWindowTitle()) {
|
| int title_top_spacing, title_thickness;
|
| return TitleCoordinates(&title_top_spacing, &title_thickness);
|
| @@ -684,7 +672,7 @@
|
| kNonClientRestoredExtraThickness : 0);
|
| }
|
|
|
| -int OpaqueNonClientView::UnavailablePixelsAtBottomOfNonClientHeight() const {
|
| +int OpaqueBrowserFrameView::UnavailablePixelsAtBottomOfNonClientHeight() const {
|
| // Tricky: When a toolbar is edging the titlebar, it not only draws its own
|
| // shadow and client edge, but an extra, light "shadow" pixel as well, which
|
| // is treated as available space. Thus the nonclient area actually _fails_ to
|
| @@ -696,8 +684,8 @@
|
| (frame_->IsMaximized() ? 0 : kClientEdgeThickness);
|
| }
|
|
|
| -int OpaqueNonClientView::TitleCoordinates(int* title_top_spacing,
|
| - int* title_thickness) const {
|
| +int OpaqueBrowserFrameView::TitleCoordinates(int* title_top_spacing,
|
| + int* title_thickness) const {
|
| int frame_thickness = FrameBorderThickness();
|
| int min_titlebar_height = kTitlebarMinimumHeight + frame_thickness;
|
| *title_top_spacing = frame_thickness + kTitleTopSpacing;
|
| @@ -723,7 +711,7 @@
|
| UnavailablePixelsAtBottomOfNonClientHeight();
|
| }
|
|
|
| -void OpaqueNonClientView::PaintRestoredFrameBorder(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintRestoredFrameBorder(ChromeCanvas* canvas) {
|
| SkBitmap* top_left_corner = resources()->GetPartBitmap(FRAME_TOP_LEFT_CORNER);
|
| SkBitmap* top_right_corner =
|
| resources()->GetPartBitmap(FRAME_TOP_RIGHT_CORNER);
|
| @@ -771,7 +759,7 @@
|
| height() - top_left_corner->height() - bottom_left_corner->height());
|
| }
|
|
|
| -void OpaqueNonClientView::PaintMaximizedFrameBorder(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(ChromeCanvas* canvas) {
|
| SkBitmap* top_edge = resources()->GetPartBitmap(FRAME_TOP_EDGE);
|
| canvas->TileImageInt(*top_edge, 0, FrameBorderThickness(), width(),
|
| top_edge->height());
|
| @@ -788,7 +776,7 @@
|
| }
|
| }
|
|
|
| -void OpaqueNonClientView::PaintDistributorLogo(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintDistributorLogo(ChromeCanvas* canvas) {
|
| // The distributor logo is only painted when the frame is not maximized and
|
| // when we actually have a logo.
|
| if (!frame_->IsMaximized() && distributor_logo_) {
|
| @@ -797,7 +785,7 @@
|
| }
|
| }
|
|
|
| -void OpaqueNonClientView::PaintTitleBar(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintTitleBar(ChromeCanvas* canvas) {
|
| // The window icon is painted by the TabIconView.
|
| views::WindowDelegate* d = frame_->window_delegate();
|
| if (d->ShouldShowWindowTitle()) {
|
| @@ -813,7 +801,7 @@
|
| }
|
| }
|
|
|
| -void OpaqueNonClientView::PaintToolbarBackground(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintToolbarBackground(ChromeCanvas* canvas) {
|
| if (!browser_view_->IsToolbarVisible())
|
| return;
|
|
|
| @@ -847,7 +835,7 @@
|
| toolbar_bounds.right(), toolbar_bounds.y());
|
| }
|
|
|
| -void OpaqueNonClientView::PaintOTRAvatar(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintOTRAvatar(ChromeCanvas* canvas) {
|
| if (!browser_view_->ShouldShowOffTheRecordAvatar())
|
| return;
|
|
|
| @@ -859,7 +847,7 @@
|
| otr_avatar_bounds_.width(), otr_avatar_bounds_.height(), false);
|
| }
|
|
|
| -void OpaqueNonClientView::PaintRestoredClientEdge(ChromeCanvas* canvas) {
|
| +void OpaqueBrowserFrameView::PaintRestoredClientEdge(ChromeCanvas* canvas) {
|
| int client_area_top = frame_->client_view()->y();
|
|
|
| gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height());
|
| @@ -915,7 +903,7 @@
|
| client_area_top, left->width(), client_area_height);
|
| }
|
|
|
| -void OpaqueNonClientView::LayoutWindowControls() {
|
| +void OpaqueBrowserFrameView::LayoutWindowControls() {
|
| close_button_->SetImageAlignment(views::Button::ALIGN_LEFT,
|
| views::Button::ALIGN_BOTTOM);
|
| // Maximized buttons start at window top so that even if their images aren't
|
| @@ -964,7 +952,7 @@
|
| minimize_button_size.height() + top_extra_height);
|
| }
|
|
|
| -void OpaqueNonClientView::LayoutDistributorLogo() {
|
| +void OpaqueBrowserFrameView::LayoutDistributorLogo() {
|
| // Always lay out the logo, even when it's not present, so we can lay out the
|
| // window title based on its position.
|
| if (distributor_logo_) {
|
| @@ -976,7 +964,7 @@
|
| }
|
| }
|
|
|
| -void OpaqueNonClientView::LayoutTitleBar() {
|
| +void OpaqueBrowserFrameView::LayoutTitleBar() {
|
| // Always lay out the icon, even when it's not present, so we can lay out the
|
| // window title based on its position.
|
| int frame_thickness = FrameBorderThickness();
|
| @@ -1022,7 +1010,7 @@
|
| }
|
| }
|
|
|
| -void OpaqueNonClientView::LayoutOTRAvatar() {
|
| +void OpaqueBrowserFrameView::LayoutOTRAvatar() {
|
| SkBitmap otr_avatar_icon = browser_view_->GetOTRAvatarIcon();
|
| int top_height = NonClientTopBorderHeight();
|
| int tabstrip_height, otr_height;
|
| @@ -1039,13 +1027,21 @@
|
| otr_avatar_icon.width(), otr_height);
|
| }
|
|
|
| -void OpaqueNonClientView::LayoutClientView() {
|
| - frame_->client_view()->SetBounds(CalculateClientAreaBounds(width(),
|
| - height()));
|
| +void OpaqueBrowserFrameView::LayoutClientView() {
|
| + client_view_bounds_ = CalculateClientAreaBounds(width(), height());
|
| }
|
|
|
| +gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width,
|
| + int height) const {
|
| + int top_height = NonClientTopBorderHeight();
|
| + int border_thickness = NonClientBorderThickness();
|
| + return gfx::Rect(border_thickness, top_height,
|
| + std::max(0, width - (2 * border_thickness)),
|
| + std::max(0, height - top_height - border_thickness));
|
| +}
|
| +
|
| // static
|
| -void OpaqueNonClientView::InitClass() {
|
| +void OpaqueBrowserFrameView::InitClass() {
|
| static bool initialized = false;
|
| if (!initialized) {
|
| active_resources_ = new ActiveWindowResources;
|
| @@ -1061,7 +1057,7 @@
|
| }
|
|
|
| // static
|
| -void OpaqueNonClientView::InitAppWindowResources() {
|
| +void OpaqueBrowserFrameView::InitAppWindowResources() {
|
| static bool initialized = false;
|
| if (!initialized) {
|
| title_font_ = win_util::GetWindowTitleFont();
|
|
|
| Property changes on: chrome\browser\views\frame\opaque_browser_frame_view.cc
|
| ___________________________________________________________________
|
| Added: svn:mergeinfo
|
| Merged /branches/chrome_webkit_merge_branch/chrome/browser/views/frame/opaque_non_client_view.cc:r69-2775
|
|
|
|
|