| Index: ash/common/frame/custom_frame_view_ash.cc
|
| diff --git a/ash/common/frame/custom_frame_view_ash.cc b/ash/common/frame/custom_frame_view_ash.cc
|
| deleted file mode 100644
|
| index 470dd01cd989fd1fb0dee323a9bf2ee6c5b3a078..0000000000000000000000000000000000000000
|
| --- a/ash/common/frame/custom_frame_view_ash.cc
|
| +++ /dev/null
|
| @@ -1,362 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ash/common/frame/custom_frame_view_ash.h"
|
| -
|
| -#include <algorithm>
|
| -#include <vector>
|
| -
|
| -#include "ash/common/frame/caption_buttons/frame_caption_button_container_view.h"
|
| -#include "ash/common/frame/frame_border_hit_test.h"
|
| -#include "ash/common/frame/header_view.h"
|
| -#include "ash/common/wm/window_state.h"
|
| -#include "ash/common/wm/window_state_delegate.h"
|
| -#include "ash/common/wm/window_state_observer.h"
|
| -#include "ash/common/wm_shell.h"
|
| -#include "ash/common/wm_window.h"
|
| -#include "ash/shared/immersive_fullscreen_controller.h"
|
| -#include "ash/shared/immersive_fullscreen_controller_delegate.h"
|
| -#include "ui/aura/client/aura_constants.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_observer.h"
|
| -#include "ui/gfx/geometry/rect.h"
|
| -#include "ui/gfx/geometry/rect_conversions.h"
|
| -#include "ui/gfx/geometry/size.h"
|
| -#include "ui/views/view.h"
|
| -#include "ui/views/view_targeter.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "ui/views/widget/widget_delegate.h"
|
| -
|
| -namespace ash {
|
| -
|
| -namespace {
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAshWindowStateDelegate
|
| -
|
| -// Handles a user's fullscreen request (Shift+F4/F4). Puts the window into
|
| -// immersive fullscreen if immersive fullscreen is enabled for non-browser
|
| -// windows.
|
| -class CustomFrameViewAshWindowStateDelegate : public wm::WindowStateDelegate,
|
| - public wm::WindowStateObserver,
|
| - public aura::WindowObserver {
|
| - public:
|
| - CustomFrameViewAshWindowStateDelegate(wm::WindowState* window_state,
|
| - CustomFrameViewAsh* custom_frame_view,
|
| - bool enable_immersive)
|
| - : window_state_(nullptr) {
|
| - // Add a window state observer to exit fullscreen properly in case
|
| - // fullscreen is exited without going through
|
| - // WindowState::ToggleFullscreen(). This is the case when exiting
|
| - // immersive fullscreen via the "Restore" window control.
|
| - // TODO(pkotwicz): This is a hack. Remove ASAP. http://crbug.com/319048
|
| - window_state_ = window_state;
|
| - window_state_->AddObserver(this);
|
| - window_state_->window()->aura_window()->AddObserver(this);
|
| -
|
| - if (!enable_immersive)
|
| - return;
|
| -
|
| - immersive_fullscreen_controller_ =
|
| - WmShell::Get()->CreateImmersiveFullscreenController();
|
| - if (immersive_fullscreen_controller_) {
|
| - custom_frame_view->InitImmersiveFullscreenControllerForView(
|
| - immersive_fullscreen_controller_.get());
|
| - }
|
| - }
|
| - ~CustomFrameViewAshWindowStateDelegate() override {
|
| - if (window_state_) {
|
| - window_state_->RemoveObserver(this);
|
| - window_state_->window()->aura_window()->RemoveObserver(this);
|
| - }
|
| - }
|
| -
|
| - private:
|
| - // Overridden from wm::WindowStateDelegate:
|
| - bool ToggleFullscreen(wm::WindowState* window_state) override {
|
| - bool enter_fullscreen = !window_state->IsFullscreen();
|
| - if (enter_fullscreen)
|
| - window_state_->window()->SetShowState(ui::SHOW_STATE_FULLSCREEN);
|
| - else
|
| - window_state->Restore();
|
| - if (immersive_fullscreen_controller_) {
|
| - immersive_fullscreen_controller_->SetEnabled(
|
| - ImmersiveFullscreenController::WINDOW_TYPE_OTHER, enter_fullscreen);
|
| - }
|
| - return true;
|
| - }
|
| - // Overridden from aura::WindowObserver:
|
| - void OnWindowDestroying(aura::Window* window) override {
|
| - window_state_->RemoveObserver(this);
|
| - window->RemoveObserver(this);
|
| - window_state_ = nullptr;
|
| - }
|
| - // Overridden from wm::WindowStateObserver:
|
| - void OnPostWindowStateTypeChange(wm::WindowState* window_state,
|
| - wm::WindowStateType old_type) override {
|
| - if (!window_state->IsFullscreen() && !window_state->IsMinimized() &&
|
| - immersive_fullscreen_controller_ &&
|
| - immersive_fullscreen_controller_->IsEnabled()) {
|
| - immersive_fullscreen_controller_->SetEnabled(
|
| - ImmersiveFullscreenController::WINDOW_TYPE_OTHER, false);
|
| - }
|
| - }
|
| -
|
| - wm::WindowState* window_state_;
|
| - std::unique_ptr<ImmersiveFullscreenController>
|
| - immersive_fullscreen_controller_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAshWindowStateDelegate);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh::OverlayView
|
| -
|
| -// View which takes up the entire widget and contains the HeaderView. HeaderView
|
| -// is a child of OverlayView to avoid creating a larger texture than necessary
|
| -// when painting the HeaderView to its own layer.
|
| -class CustomFrameViewAsh::OverlayView : public views::View,
|
| - public views::ViewTargeterDelegate {
|
| - public:
|
| - explicit OverlayView(HeaderView* header_view);
|
| - ~OverlayView() override;
|
| -
|
| - // views::View:
|
| - void Layout() override;
|
| -
|
| - private:
|
| - // views::ViewTargeterDelegate:
|
| - bool DoesIntersectRect(const views::View* target,
|
| - const gfx::Rect& rect) const override;
|
| -
|
| - HeaderView* header_view_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(OverlayView);
|
| -};
|
| -
|
| -CustomFrameViewAsh::OverlayView::OverlayView(HeaderView* header_view)
|
| - : header_view_(header_view) {
|
| - AddChildView(header_view);
|
| - SetEventTargeter(
|
| - std::unique_ptr<views::ViewTargeter>(new views::ViewTargeter(this)));
|
| -}
|
| -
|
| -CustomFrameViewAsh::OverlayView::~OverlayView() {}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh::OverlayView, views::View overrides:
|
| -
|
| -void CustomFrameViewAsh::OverlayView::Layout() {
|
| - // Layout |header_view_| because layout affects the result of
|
| - // GetPreferredOnScreenHeight().
|
| - header_view_->Layout();
|
| -
|
| - int onscreen_height = header_view_->GetPreferredOnScreenHeight();
|
| - if (onscreen_height == 0) {
|
| - header_view_->SetVisible(false);
|
| - } else {
|
| - int height = header_view_->GetPreferredHeight();
|
| - header_view_->SetBounds(0, onscreen_height - height, width(), height);
|
| - header_view_->SetVisible(true);
|
| - }
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh::OverlayView, views::ViewTargeterDelegate overrides:
|
| -
|
| -bool CustomFrameViewAsh::OverlayView::DoesIntersectRect(
|
| - const views::View* target,
|
| - const gfx::Rect& rect) const {
|
| - CHECK_EQ(target, this);
|
| - // Grab events in the header view. Return false for other events so that they
|
| - // can be handled by the client view.
|
| - return header_view_->HitTestRect(rect);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh, public:
|
| -
|
| -// static
|
| -const char CustomFrameViewAsh::kViewClassName[] = "CustomFrameViewAsh";
|
| -
|
| -CustomFrameViewAsh::CustomFrameViewAsh(
|
| - views::Widget* frame,
|
| - ImmersiveFullscreenControllerDelegate* immersive_delegate,
|
| - bool enable_immersive)
|
| - : frame_(frame),
|
| - header_view_(new HeaderView(frame)),
|
| - immersive_delegate_(immersive_delegate ? immersive_delegate
|
| - : header_view_) {
|
| - WmWindow* frame_window = WmWindow::Get(frame->GetNativeWindow());
|
| - frame_window->InstallResizeHandleWindowTargeter(nullptr);
|
| - // |header_view_| is set as the non client view's overlay view so that it can
|
| - // overlay the web contents in immersive fullscreen.
|
| - frame->non_client_view()->SetOverlayView(new OverlayView(header_view_));
|
| - frame_window->aura_window()->SetProperty(
|
| - aura::client::kTopViewColor, header_view_->GetInactiveFrameColor());
|
| -
|
| - // A delegate for a more complex way of fullscreening the window may already
|
| - // be set. This is the case for packaged apps.
|
| - wm::WindowState* window_state = frame_window->GetWindowState();
|
| - if (!window_state->HasDelegate()) {
|
| - window_state->SetDelegate(std::unique_ptr<wm::WindowStateDelegate>(
|
| - new CustomFrameViewAshWindowStateDelegate(window_state, this,
|
| - enable_immersive)));
|
| - }
|
| -}
|
| -
|
| -CustomFrameViewAsh::~CustomFrameViewAsh() {}
|
| -
|
| -void CustomFrameViewAsh::InitImmersiveFullscreenControllerForView(
|
| - ImmersiveFullscreenController* immersive_fullscreen_controller) {
|
| - immersive_fullscreen_controller->Init(immersive_delegate_, frame_,
|
| - header_view_);
|
| -}
|
| -
|
| -void CustomFrameViewAsh::SetFrameColors(SkColor active_frame_color,
|
| - SkColor inactive_frame_color) {
|
| - header_view_->SetFrameColors(active_frame_color, inactive_frame_color);
|
| - WmWindow* frame_window = WmWindow::Get(frame_->GetNativeWindow());
|
| - frame_window->aura_window()->SetProperty(
|
| - aura::client::kTopViewColor, header_view_->GetInactiveFrameColor());
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh, views::NonClientFrameView overrides:
|
| -
|
| -gfx::Rect CustomFrameViewAsh::GetBoundsForClientView() const {
|
| - gfx::Rect client_bounds = bounds();
|
| - client_bounds.Inset(0, NonClientTopBorderHeight(), 0, 0);
|
| - return client_bounds;
|
| -}
|
| -
|
| -gfx::Rect CustomFrameViewAsh::GetWindowBoundsForClientBounds(
|
| - const gfx::Rect& client_bounds) const {
|
| - gfx::Rect window_bounds = client_bounds;
|
| - window_bounds.Inset(0, -NonClientTopBorderHeight(), 0, 0);
|
| - return window_bounds;
|
| -}
|
| -
|
| -int CustomFrameViewAsh::NonClientHitTest(const gfx::Point& point) {
|
| - return FrameBorderNonClientHitTest(
|
| - this, header_view_->caption_button_container(), point);
|
| -}
|
| -
|
| -void CustomFrameViewAsh::GetWindowMask(const gfx::Size& size,
|
| - gfx::Path* window_mask) {
|
| - // No window masks in Aura.
|
| -}
|
| -
|
| -void CustomFrameViewAsh::ResetWindowControls() {
|
| - header_view_->ResetWindowControls();
|
| -}
|
| -
|
| -void CustomFrameViewAsh::UpdateWindowIcon() {}
|
| -
|
| -void CustomFrameViewAsh::UpdateWindowTitle() {
|
| - header_view_->SchedulePaintForTitle();
|
| -}
|
| -
|
| -void CustomFrameViewAsh::SizeConstraintsChanged() {
|
| - header_view_->SizeConstraintsChanged();
|
| -}
|
| -
|
| -void CustomFrameViewAsh::ActivationChanged(bool active) {
|
| - // The icons differ between active and inactive.
|
| - header_view_->SchedulePaint();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh, views::View overrides:
|
| -
|
| -gfx::Size CustomFrameViewAsh::GetPreferredSize() const {
|
| - gfx::Size pref = frame_->client_view()->GetPreferredSize();
|
| - gfx::Rect bounds(0, 0, pref.width(), pref.height());
|
| - return frame_->non_client_view()
|
| - ->GetWindowBoundsForClientBounds(bounds)
|
| - .size();
|
| -}
|
| -
|
| -void CustomFrameViewAsh::Layout() {
|
| - views::NonClientFrameView::Layout();
|
| - WmWindow* frame_window = WmWindow::Get(frame_->GetNativeWindow());
|
| - frame_window->aura_window()->SetProperty(aura::client::kTopViewInset,
|
| - NonClientTopBorderHeight());
|
| -}
|
| -
|
| -const char* CustomFrameViewAsh::GetClassName() const {
|
| - return kViewClassName;
|
| -}
|
| -
|
| -gfx::Size CustomFrameViewAsh::GetMinimumSize() const {
|
| - gfx::Size min_client_view_size(frame_->client_view()->GetMinimumSize());
|
| - return gfx::Size(
|
| - std::max(header_view_->GetMinimumWidth(), min_client_view_size.width()),
|
| - NonClientTopBorderHeight() + min_client_view_size.height());
|
| -}
|
| -
|
| -gfx::Size CustomFrameViewAsh::GetMaximumSize() const {
|
| - gfx::Size max_client_size(frame_->client_view()->GetMaximumSize());
|
| - int width = 0;
|
| - int height = 0;
|
| -
|
| - if (max_client_size.width() > 0)
|
| - width = std::max(header_view_->GetMinimumWidth(), max_client_size.width());
|
| - if (max_client_size.height() > 0)
|
| - height = NonClientTopBorderHeight() + max_client_size.height();
|
| -
|
| - return gfx::Size(width, height);
|
| -}
|
| -
|
| -void CustomFrameViewAsh::SchedulePaintInRect(const gfx::Rect& r) {
|
| - // We may end up here before |header_view_| has been added to the Widget.
|
| - if (header_view_->GetWidget()) {
|
| - // The HeaderView is not a child of CustomFrameViewAsh. Redirect the paint
|
| - // to HeaderView instead.
|
| - gfx::RectF to_paint(r);
|
| - views::View::ConvertRectToTarget(this, header_view_, &to_paint);
|
| - header_view_->SchedulePaintInRect(gfx::ToEnclosingRect(to_paint));
|
| - } else {
|
| - views::NonClientFrameView::SchedulePaintInRect(r);
|
| - }
|
| -}
|
| -
|
| -void CustomFrameViewAsh::VisibilityChanged(views::View* starting_from,
|
| - bool is_visible) {
|
| - if (is_visible)
|
| - header_view_->UpdateAvatarIcon();
|
| -}
|
| -
|
| -views::View* CustomFrameViewAsh::GetHeaderView() {
|
| - return header_view_;
|
| -}
|
| -
|
| -const views::View* CustomFrameViewAsh::GetAvatarIconViewForTest() const {
|
| - return header_view_->avatar_icon();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CustomFrameViewAsh, private:
|
| -
|
| -// views::NonClientFrameView:
|
| -bool CustomFrameViewAsh::DoesIntersectRect(const views::View* target,
|
| - const gfx::Rect& rect) const {
|
| - CHECK_EQ(target, this);
|
| - // NonClientView hit tests the NonClientFrameView first instead of going in
|
| - // z-order. Return false so that events get to the OverlayView.
|
| - return false;
|
| -}
|
| -
|
| -FrameCaptionButtonContainerView*
|
| -CustomFrameViewAsh::GetFrameCaptionButtonContainerViewForTest() {
|
| - return header_view_->caption_button_container();
|
| -}
|
| -
|
| -int CustomFrameViewAsh::NonClientTopBorderHeight() const {
|
| - return frame_->IsFullscreen() ? 0 : header_view_->GetPreferredHeight();
|
| -}
|
| -
|
| -} // namespace ash
|
|
|