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,
// There is no divider bar in clamshell splitview mode.
if (split_view_type_ == SplitViewType::kTabletType) {
split_view_divider_ =
std::make_unique<SplitViewDivider>(this, root_window_);
split_view_divider_ = std::make_unique<SplitViewDivider>(this);
// The divider spawn animation adds a finishing touch to the |window|
// animation that generally accommodates snapping by dragging, but if
// |window| is currently minimized then it will undergo the unminimizing
......@@ -1146,8 +1145,7 @@ void SplitViewController::OnTabletModeStarted() {
// the three fixed positions.
if (InSplitViewMode()) {
divider_position_ = GetClosestFixedDividerPosition();
split_view_divider_ =
std::make_unique<SplitViewDivider>(this, root_window_);
split_view_divider_ = std::make_unique<SplitViewDivider>(this);
UpdateSnappedWindowsAndDividerBounds();
NotifyDividerPositionChanged();
}
......
......@@ -74,8 +74,9 @@ class AlwaysOnTopWindowTargeter : public aura::WindowTargeter {
// mouse/gesture events in the bounds of the |DividerView| object itself.
class DividerView : public views::View, public views::ViewTargeterDelegate {
public:
explicit DividerView(SplitViewDivider* divider)
: controller_(SplitViewController::Get()), divider_(divider) {
explicit DividerView(SplitViewController* controller,
SplitViewDivider* divider)
: controller_(controller), divider_(divider) {
divider_view_ = new views::View();
divider_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR);
divider_view_->layer()->SetColor(kSplitviewDividerColor);
......@@ -122,7 +123,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
// views::View:
void Layout() override {
divider_view_->SetBoundsRect(GetLocalBounds());
divider_handler_view_->Refresh();
divider_handler_view_->Refresh(controller_->is_resizing());
}
bool OnMousePressed(const ui::MouseEvent& event) override {
......@@ -215,7 +216,7 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
divider_view_->SetTransform(transform);
divider_handler_view_->Refresh();
divider_handler_view_->Refresh(controller_->is_resizing());
}
views::View* divider_view_ = nullptr;
......@@ -228,14 +229,13 @@ class DividerView : public views::View, public views::ViewTargeterDelegate {
} // namespace
SplitViewDivider::SplitViewDivider(SplitViewController* controller,
aura::Window* root_window)
SplitViewDivider::SplitViewDivider(SplitViewController* controller)
: controller_(controller) {
Shell::Get()->activation_client()->AddObserver(this);
CreateDividerWidget(root_window);
CreateDividerWidget(controller);
aura::Window* always_on_top_container =
Shell::GetContainer(root_window, kShellWindowId_AlwaysOnTopContainer);
aura::Window* always_on_top_container = Shell::GetContainer(
controller->root_window(), kShellWindowId_AlwaysOnTopContainer);
split_view_window_targeter_ = std::make_unique<aura::ScopedWindowTargeter>(
always_on_top_container, std::make_unique<AlwaysOnTopWindowTargeter>(
divider_widget_->GetNativeWindow()));
......@@ -424,17 +424,17 @@ void SplitViewDivider::OnTransientChildRemoved(aura::Window* window,
transient_windows_observer_.Remove(transient);
}
void SplitViewDivider::CreateDividerWidget(aura::Window* root_window) {
void SplitViewDivider::CreateDividerWidget(SplitViewController* controller) {
DCHECK(!divider_widget_);
// Native widget owns this widget.
divider_widget_ = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
params.activatable = views::Widget::InitParams::ACTIVATABLE_NO;
params.parent =
Shell::GetContainer(root_window, kShellWindowId_AlwaysOnTopContainer);
params.parent = Shell::GetContainer(controller->root_window(),
kShellWindowId_AlwaysOnTopContainer);
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_->Init(std::move(params));
divider_widget_->SetVisibilityAnimationTransition(
......
......@@ -38,7 +38,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver,
public ::wm::ActivationChangeObserver,
public ::wm::TransientWindowObserver {
public:
SplitViewDivider(SplitViewController* controller, aura::Window* root_window);
SplitViewDivider(SplitViewController* controller);
~SplitViewDivider() override;
// static version of GetDividerBoundsInScreen(bool is_dragging) function.
......@@ -90,7 +90,7 @@ class ASH_EXPORT SplitViewDivider : public aura::WindowObserver,
views::Widget* divider_widget() { return divider_widget_; }
private:
void CreateDividerWidget(aura::Window* root_window);
void CreateDividerWidget(SplitViewController* controller);
SplitViewController* controller_;
......
......@@ -120,11 +120,11 @@ void SplitViewDividerHandlerView::DoSpawningAnimation(
spawning_animation_->Activate();
}
void SplitViewDividerHandlerView::Refresh() {
void SplitViewDividerHandlerView::Refresh(bool is_resizing) {
spawning_animation_.reset();
SetVisible(true);
selection_animation_->UpdateWhiteHandlerBounds();
if (SplitViewController::Get()->is_resizing())
if (is_resizing)
selection_animation_->Show();
else
selection_animation_->Hide();
......
......@@ -10,7 +10,6 @@
#include "ash/ash_export.h"
#include "ash/public/cpp/ash_constants.h"
#include "ash/wm/overview/rounded_rect_view.h"
#include "ash/wm/splitview/split_view_controller.h"
#include "base/macros.h"
#include "ui/gfx/canvas.h"
#include "ui/views/view.h"
......@@ -35,7 +34,7 @@ class ASH_EXPORT SplitViewDividerHandlerView : public RoundedRectView {
// If the spawning animation is running, stop it and show the white handler.
// Update bounds. Do the enlarge/shrink animation when starting/ending
// dragging.
void Refresh();
void Refresh(bool is_resizing);
private:
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