Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2441)

Unified Diff: ash/common/frame/custom_frame_view_ash.cc

Issue 2736573002: chromeos: Move files in //ash/common to //ash, part 2 (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/common/frame/custom_frame_view_ash.h ('k') | ash/common/frame/custom_frame_view_ash_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ash/common/frame/custom_frame_view_ash.h ('k') | ash/common/frame/custom_frame_view_ash_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698