Commit 1258a956 authored by Avery Musbach's avatar Avery Musbach Committed by Commit Bot

split view: Adjust divider code to not call SplitViewController::Get()

The present CL is similar to [1]. The rationale in the commit message of
[1] does not apply to the current plan for multi-display split view, but
similar code changes seem reasonable anyway.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/1726310

Bug: 970013
Change-Id: I1a1572d89c2d25ac60b9ac25dc37edce7b74fce8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1856890
Commit-Queue: Avery Musbach <amusbach@chromium.org>
Reviewed-by: default avatarXiaoqian Dai <xdai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706009}
parent 4835be8a
...@@ -348,8 +348,7 @@ void SplitViewController::SnapWindow(aura::Window* window, ...@@ -348,8 +348,7 @@ void SplitViewController::SnapWindow(aura::Window* window,
// There is no divider bar in clamshell splitview mode. // There is no divider bar in clamshell splitview mode.
if (split_view_type_ == SplitViewType::kTabletType) { if (split_view_type_ == SplitViewType::kTabletType) {
split_view_divider_ = split_view_divider_ = std::make_unique<SplitViewDivider>(this);
std::make_unique<SplitViewDivider>(this, root_window_);
// The divider spawn animation adds a finishing touch to the |window| // The divider spawn animation adds a finishing touch to the |window|
// animation that generally accommodates snapping by dragging, but if // animation that generally accommodates snapping by dragging, but if
// |window| is currently minimized then it will undergo the unminimizing // |window| is currently minimized then it will undergo the unminimizing
...@@ -1146,8 +1145,7 @@ void SplitViewController::OnTabletModeStarted() { ...@@ -1146,8 +1145,7 @@ void SplitViewController::OnTabletModeStarted() {
// the three fixed positions. // the three fixed positions.
if (InSplitViewMode()) { if (InSplitViewMode()) {
divider_position_ = GetClosestFixedDividerPosition(); divider_position_ = GetClosestFixedDividerPosition();
split_view_divider_ = split_view_divider_ = std::make_unique<SplitViewDivider>(this);
std::make_unique<SplitViewDivider>(this, root_window_);
UpdateSnappedWindowsAndDividerBounds(); UpdateSnappedWindowsAndDividerBounds();
NotifyDividerPositionChanged(); NotifyDividerPositionChanged();
} }
......
...@@ -74,8 +74,9 @@ class AlwaysOnTopWindowTargeter : public aura::WindowTargeter { ...@@ -74,8 +74,9 @@ class AlwaysOnTopWindowTargeter : public aura::WindowTargeter {
// mouse/gesture events in the bounds of the |DividerView| object itself. // mouse/gesture events in the bounds of the |DividerView| object itself.
class DividerView : public views::View, public views::ViewTargeterDelegate { class DividerView : public views::View, public views::ViewTargeterDelegate {
public: public:
explicit DividerView(SplitViewDivider* divider) explicit DividerView(SplitViewController* controller,
: controller_(SplitViewController::Get()), divider_(divider) { SplitViewDivider* divider)
: controller_(controller), divider_(divider) {
divider_view_ = new views::View(); divider_view_ = new views::View();
divider_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR); divider_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR);
divider_view_->layer()->SetColor(kSplitviewDividerColor); divider_view_->layer()->SetColor(kSplitviewDividerColor);
...@@ -122,7 +123,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate { ...@@ -122,7 +123,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
// views::View: // views::View:
void Layout() override { void Layout() override {
divider_view_->SetBoundsRect(GetLocalBounds()); divider_view_->SetBoundsRect(GetLocalBounds());
divider_handler_view_->Refresh(); divider_handler_view_->Refresh(controller_->is_resizing());
} }
bool OnMousePressed(const ui::MouseEvent& event) override { bool OnMousePressed(const ui::MouseEvent& event) override {
...@@ -215,7 +216,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate { ...@@ -215,7 +216,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
divider_view_->SetTransform(transform); divider_view_->SetTransform(transform);
divider_handler_view_->Refresh(); divider_handler_view_->Refresh(controller_->is_resizing());
} }
views::View* divider_view_ = nullptr; views::View* divider_view_ = nullptr;
...@@ -228,14 +229,13 @@ class DividerView : public views::View, public views::ViewTargeterDelegate { ...@@ -228,14 +229,13 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
} // namespace } // namespace
SplitViewDivider::SplitViewDivider(SplitViewController* controller, SplitViewDivider::SplitViewDivider(SplitViewController* controller)
aura::Window* root_window)
: controller_(controller) { : controller_(controller) {
Shell::Get()->activation_client()->AddObserver(this); Shell::Get()->activation_client()->AddObserver(this);
CreateDividerWidget(root_window); CreateDividerWidget(controller);
aura::Window* always_on_top_container = aura::Window* always_on_top_container = Shell::GetContainer(
Shell::GetContainer(root_window, kShellWindowId_AlwaysOnTopContainer); controller->root_window(), kShellWindowId_AlwaysOnTopContainer);
split_view_window_targeter_ = std::make_unique<aura::ScopedWindowTargeter>( split_view_window_targeter_ = std::make_unique<aura::ScopedWindowTargeter>(
always_on_top_container, std::make_unique<AlwaysOnTopWindowTargeter>( always_on_top_container, std::make_unique<AlwaysOnTopWindowTargeter>(
divider_widget_->GetNativeWindow())); divider_widget_->GetNativeWindow()));
...@@ -424,17 +424,17 @@ void SplitViewDivider::OnTransientChildRemoved(aura::Window* window, ...@@ -424,17 +424,17 @@ void SplitViewDivider::OnTransientChildRemoved(aura::Window* window,
transient_windows_observer_.Remove(transient); transient_windows_observer_.Remove(transient);
} }
void SplitViewDivider::CreateDividerWidget(aura::Window* root_window) { void SplitViewDivider::CreateDividerWidget(SplitViewController* controller) {
DCHECK(!divider_widget_); DCHECK(!divider_widget_);
// Native widget owns this widget. // Native widget owns this widget.
divider_widget_ = new views::Widget; divider_widget_ = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
params.opacity = views::Widget::InitParams::OPAQUE_WINDOW; params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
params.activatable = views::Widget::InitParams::ACTIVATABLE_NO; params.activatable = views::Widget::InitParams::ACTIVATABLE_NO;
params.parent = params.parent = Shell::GetContainer(controller->root_window(),
Shell::GetContainer(root_window, kShellWindowId_AlwaysOnTopContainer); kShellWindowId_AlwaysOnTopContainer);
params.init_properties_container.SetProperty(kHideInDeskMiniViewKey, true); params.init_properties_container.SetProperty(kHideInDeskMiniViewKey, true);
DividerView* divider_view = new DividerView(this); DividerView* divider_view = new DividerView(controller, this);
divider_widget_->set_focus_on_creation(false); divider_widget_->set_focus_on_creation(false);
divider_widget_->Init(std::move(params)); divider_widget_->Init(std::move(params));
divider_widget_->SetVisibilityAnimationTransition( divider_widget_->SetVisibilityAnimationTransition(
......
...@@ -38,7 +38,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver, ...@@ -38,7 +38,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver,
public ::wm::ActivationChangeObserver, public ::wm::ActivationChangeObserver,
public ::wm::TransientWindowObserver { public ::wm::TransientWindowObserver {
public: public:
SplitViewDivider(SplitViewController* controller, aura::Window* root_window); SplitViewDivider(SplitViewController* controller);
~SplitViewDivider() override; ~SplitViewDivider() override;
// static version of GetDividerBoundsInScreen(bool is_dragging) function. // static version of GetDividerBoundsInScreen(bool is_dragging) function.
...@@ -90,7 +90,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver, ...@@ -90,7 +90,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver,
views::Widget* divider_widget() { return divider_widget_; } views::Widget* divider_widget() { return divider_widget_; }
private: private:
void CreateDividerWidget(aura::Window* root_window); void CreateDividerWidget(SplitViewController* controller);
SplitViewController* controller_; SplitViewController* controller_;
......
...@@ -120,11 +120,11 @@ void SplitViewDividerHandlerView::DoSpawningAnimation( ...@@ -120,11 +120,11 @@ void SplitViewDividerHandlerView::DoSpawningAnimation(
spawning_animation_->Activate(); spawning_animation_->Activate();
} }
void SplitViewDividerHandlerView::Refresh() { void SplitViewDividerHandlerView::Refresh(bool is_resizing) {
spawning_animation_.reset(); spawning_animation_.reset();
SetVisible(true); SetVisible(true);
selection_animation_->UpdateWhiteHandlerBounds(); selection_animation_->UpdateWhiteHandlerBounds();
if (SplitViewController::Get()->is_resizing()) if (is_resizing)
selection_animation_->Show(); selection_animation_->Show();
else else
selection_animation_->Hide(); selection_animation_->Hide();
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/cpp/ash_constants.h" #include "ash/public/cpp/ash_constants.h"
#include "ash/wm/overview/rounded_rect_view.h" #include "ash/wm/overview/rounded_rect_view.h"
#include "ash/wm/splitview/split_view_controller.h"
#include "base/macros.h" #include "base/macros.h"
#include "ui/gfx/canvas.h" #include "ui/gfx/canvas.h"
#include "ui/views/view.h" #include "ui/views/view.h"
...@@ -35,7 +34,7 @@ class ASH_EXPORT SplitViewDividerHandlerView : public RoundedRectView { ...@@ -35,7 +34,7 @@ class ASH_EXPORT SplitViewDividerHandlerView : public RoundedRectView {
// If the spawning animation is running, stop it and show the white handler. // If the spawning animation is running, stop it and show the white handler.
// Update bounds. Do the enlarge/shrink animation when starting/ending // Update bounds. Do the enlarge/shrink animation when starting/ending
// dragging. // dragging.
void Refresh(); void Refresh(bool is_resizing);
private: private:
class SelectionAnimation; class SelectionAnimation;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment