Commit b887c52e authored by Sammie Quon's avatar Sammie Quon Committed by Commit Bot

overview: Drop target background not showing correctly.

Prior to this patch, the drop target would:
  - show an extra background for windows with backdrop or maximized
    windows with top insets
  - shift when dragging a maximized window with top insets

Test: manual
Bug: 1035526
Change-Id: Iac2ae0ec35268417d8cf369c76d9890b49583587
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1976312Reviewed-by: default avatarAvery Musbach <amusbach@chromium.org>
Commit-Queue: Sammie Quon <sammiequon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726474}
parent eafdd51e
...@@ -194,6 +194,7 @@ std::unique_ptr<views::Widget> CreateDropTargetWidget( ...@@ -194,6 +194,7 @@ std::unique_ptr<views::Widget> CreateDropTargetWidget(
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.activatable = views::Widget::InitParams::Activatable::ACTIVATABLE_NO; params.activatable = views::Widget::InitParams::Activatable::ACTIVATABLE_NO;
params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent; params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent;
params.name = "OverviewDropTarget";
params.accept_events = false; params.accept_events = false;
params.parent = desks_util::GetActiveDeskContainerForRoot(root_window); params.parent = desks_util::GetActiveDeskContainerForRoot(root_window);
params.init_properties_container.SetProperty(kHideInDeskMiniViewKey, true); params.init_properties_container.SetProperty(kHideInDeskMiniViewKey, true);
...@@ -201,15 +202,7 @@ std::unique_ptr<views::Widget> CreateDropTargetWidget( ...@@ -201,15 +202,7 @@ std::unique_ptr<views::Widget> CreateDropTargetWidget(
widget->set_focus_on_creation(false); widget->set_focus_on_creation(false);
widget->Init(std::move(params)); widget->Init(std::move(params));
widget->SetVisibilityAnimationTransition(views::Widget::ANIMATE_NONE); widget->SetVisibilityAnimationTransition(views::Widget::ANIMATE_NONE);
// |OverviewGrid::PositionWindows| will set the bounds of the drop target,
// overwriting the size that we set here. However, the drop target bounds
// computation will use the aspect ratio from the size that we set here.
gfx::Size size_for_aspect_ratio = dragged_window->bounds().size();
DCHECK_GT(size_for_aspect_ratio.height(),
dragged_window->GetProperty(aura::client::kTopViewInset));
size_for_aspect_ratio.Enlarge(
0, -dragged_window->GetProperty(aura::client::kTopViewInset));
widget->SetSize(size_for_aspect_ratio);
// Show plus icon if drag a tab from a multi-tab window. // Show plus icon if drag a tab from a multi-tab window.
widget->SetContentsView(new DropTargetView( widget->SetContentsView(new DropTargetView(
dragged_window->GetProperty(ash::kTabDraggingSourceWindowKey))); dragged_window->GetProperty(ash::kTabDraggingSourceWindowKey)));
...@@ -1515,20 +1508,26 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item, ...@@ -1515,20 +1508,26 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item,
const gfx::Size item_size(0, height); const gfx::Size item_size(0, height);
gfx::RectF target_bounds = item->GetTargetBoundsInScreen(); gfx::RectF target_bounds = item->GetTargetBoundsInScreen();
float scale = item->GetItemScale(item_size); float scale = item->GetItemScale(item_size);
ScopedOverviewTransformWindow::GridWindowFillMode grid_fill_mode =
item->GetWindowDimensionsType();
// The drop target, unlike the other windows has its bounds set directly, so // The drop target, unlike the other windows has its bounds set directly, so
// |GetTargetBoundsInScreen()| won't return the value we want. Instead, get // |GetTargetBoundsInScreen()| won't return the value we want. Instead, get
// the scale from the window it was meant to be a placeholder for. // the scale from the window it was meant to be a placeholder for.
if (IsDropTargetWindow(item->GetWindow())) { if (IsDropTargetWindow(item->GetWindow())) {
aura::Window* dragged_window = nullptr; aura::Window* dragged_window = nullptr;
OverviewItem* item = OverviewItem* grid_dragged_item =
overview_session_->window_drag_controller() overview_session_->window_drag_controller()
? overview_session_->window_drag_controller()->item() ? overview_session_->window_drag_controller()->item()
: nullptr; : nullptr;
if (item) if (grid_dragged_item) {
dragged_window = item->GetWindow(); dragged_window = grid_dragged_item->GetWindow();
else if (dragged_window_) grid_fill_mode = grid_dragged_item->GetWindowDimensionsType();
} else if (dragged_window_) {
dragged_window = dragged_window_; dragged_window = dragged_window_;
grid_fill_mode = ScopedOverviewTransformWindow::GetWindowDimensionsType(
dragged_window);
}
if (dragged_window && dragged_window->parent()) { if (dragged_window && dragged_window->parent()) {
target_bounds = ::ash::GetTargetBoundsInScreen(dragged_window); target_bounds = ::ash::GetTargetBoundsInScreen(dragged_window);
...@@ -1542,7 +1541,7 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item, ...@@ -1542,7 +1541,7 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item,
int width = std::max( int width = std::max(
1, gfx::ToFlooredInt(target_bounds.width() * scale) + 2 * kWindowMargin); 1, gfx::ToFlooredInt(target_bounds.width() * scale) + 2 * kWindowMargin);
switch (item->GetWindowDimensionsType()) { switch (grid_fill_mode) {
case ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed: case ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed:
width = width =
ScopedOverviewTransformWindow::kExtremeWindowRatioThreshold * height; ScopedOverviewTransformWindow::kExtremeWindowRatioThreshold * height;
......
...@@ -150,7 +150,8 @@ void SetWidgetBoundsAndMaybeAnimateTransform( ...@@ -150,7 +150,8 @@ void SetWidgetBoundsAndMaybeAnimateTransform(
new_bounds_in_screen, new_bounds_in_screen,
display::Screen::GetScreen()->GetDisplayNearestWindow(window)); display::Screen::GetScreen()->GetDisplayNearestWindow(window));
if (animation_type == OVERVIEW_ANIMATION_NONE || if (animation_type == OVERVIEW_ANIMATION_NONE ||
animation_type == OVERVIEW_ANIMATION_ENTER_FROM_HOME_LAUNCHER) { animation_type == OVERVIEW_ANIMATION_ENTER_FROM_HOME_LAUNCHER ||
previous_bounds.IsEmpty()) {
window->SetTransform(gfx::Transform()); window->SetTransform(gfx::Transform());
// Make sure that |observer|, which could be a self-deleting object, will // Make sure that |observer|, which could be a self-deleting object, will
......
...@@ -54,23 +54,6 @@ bool immediate_close_for_tests = false; ...@@ -54,23 +54,6 @@ bool immediate_close_for_tests = false;
// Delay closing window to allow it to shrink and fade out. // Delay closing window to allow it to shrink and fade out.
constexpr int kCloseWindowDelayInMilliseconds = 150; constexpr int kCloseWindowDelayInMilliseconds = 150;
ScopedOverviewTransformWindow::GridWindowFillMode GetWindowDimensionsType(
aura::Window* window) {
if (window->bounds().width() >
window->bounds().height() *
ScopedOverviewTransformWindow::kExtremeWindowRatioThreshold) {
return ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed;
}
if (window->bounds().height() >
window->bounds().width() *
ScopedOverviewTransformWindow::kExtremeWindowRatioThreshold) {
return ScopedOverviewTransformWindow::GridWindowFillMode::kPillarBoxed;
}
return ScopedOverviewTransformWindow::GridWindowFillMode::kNormal;
}
} // namespace } // namespace
class ScopedOverviewTransformWindow::LayerCachingAndFilteringObserver class ScopedOverviewTransformWindow::LayerCachingAndFilteringObserver
...@@ -184,6 +167,19 @@ float ScopedOverviewTransformWindow::GetItemScale(const gfx::SizeF& source, ...@@ -184,6 +167,19 @@ float ScopedOverviewTransformWindow::GetItemScale(const gfx::SizeF& source,
(source.height() - top_view_inset)); (source.height() - top_view_inset));
} }
// static
ScopedOverviewTransformWindow::GridWindowFillMode
ScopedOverviewTransformWindow::GetWindowDimensionsType(aura::Window* window) {
const gfx::Size size = window->bounds().size();
if (size.width() > size.height() * kExtremeWindowRatioThreshold)
return ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed;
if (size.height() > size.width() * kExtremeWindowRatioThreshold)
return ScopedOverviewTransformWindow::GridWindowFillMode::kPillarBoxed;
return ScopedOverviewTransformWindow::GridWindowFillMode::kNormal;
}
void ScopedOverviewTransformWindow::RestoreWindow(bool reset_transform) { void ScopedOverviewTransformWindow::RestoreWindow(bool reset_transform) {
// Shadow controller may be null on shutdown. // Shadow controller may be null on shutdown.
if (Shell::Get()->shadow_controller()) if (Shell::Get()->shadow_controller())
......
...@@ -67,6 +67,9 @@ class ASH_EXPORT ScopedOverviewTransformWindow ...@@ -67,6 +67,9 @@ class ASH_EXPORT ScopedOverviewTransformWindow
int top_view_inset, int top_view_inset,
int title_height); int title_height);
static ScopedOverviewTransformWindow::GridWindowFillMode
GetWindowDimensionsType(aura::Window* window);
ScopedOverviewTransformWindow(OverviewItem* overview_item, ScopedOverviewTransformWindow(OverviewItem* overview_item,
aura::Window* window); aura::Window* window);
~ScopedOverviewTransformWindow() override; ~ScopedOverviewTransformWindow() override;
......
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