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(
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.activatable = views::Widget::InitParams::Activatable::ACTIVATABLE_NO;
params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent;
params.name = "OverviewDropTarget";
params.accept_events = false;
params.parent = desks_util::GetActiveDeskContainerForRoot(root_window);
params.init_properties_container.SetProperty(kHideInDeskMiniViewKey, true);
......@@ -201,15 +202,7 @@ std::unique_ptr<views::Widget> CreateDropTargetWidget(
widget->set_focus_on_creation(false);
widget->Init(std::move(params));
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.
widget->SetContentsView(new DropTargetView(
dragged_window->GetProperty(ash::kTabDraggingSourceWindowKey)));
......@@ -1515,20 +1508,26 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item,
const gfx::Size item_size(0, height);
gfx::RectF target_bounds = item->GetTargetBoundsInScreen();
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
// |GetTargetBoundsInScreen()| won't return the value we want. Instead, get
// the scale from the window it was meant to be a placeholder for.
if (IsDropTargetWindow(item->GetWindow())) {
aura::Window* dragged_window = nullptr;
OverviewItem* item =
OverviewItem* grid_dragged_item =
overview_session_->window_drag_controller()
? overview_session_->window_drag_controller()->item()
: nullptr;
if (item)
dragged_window = item->GetWindow();
else if (dragged_window_)
if (grid_dragged_item) {
dragged_window = grid_dragged_item->GetWindow();
grid_fill_mode = grid_dragged_item->GetWindowDimensionsType();
} else if (dragged_window_) {
dragged_window = dragged_window_;
grid_fill_mode = ScopedOverviewTransformWindow::GetWindowDimensionsType(
dragged_window);
}
if (dragged_window && dragged_window->parent()) {
target_bounds = ::ash::GetTargetBoundsInScreen(dragged_window);
......@@ -1542,7 +1541,7 @@ int OverviewGrid::CalculateWidthAndMaybeSetUnclippedBounds(OverviewItem* item,
int width = std::max(
1, gfx::ToFlooredInt(target_bounds.width() * scale) + 2 * kWindowMargin);
switch (item->GetWindowDimensionsType()) {
switch (grid_fill_mode) {
case ScopedOverviewTransformWindow::GridWindowFillMode::kLetterBoxed:
width =
ScopedOverviewTransformWindow::kExtremeWindowRatioThreshold * height;
......
......@@ -150,7 +150,8 @@ void SetWidgetBoundsAndMaybeAnimateTransform(
new_bounds_in_screen,
display::Screen::GetScreen()->GetDisplayNearestWindow(window));
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());
// Make sure that |observer|, which could be a self-deleting object, will
......
......@@ -54,23 +54,6 @@ bool immediate_close_for_tests = false;
// Delay closing window to allow it to shrink and fade out.
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
class ScopedOverviewTransformWindow::LayerCachingAndFilteringObserver
......@@ -184,6 +167,19 @@ float ScopedOverviewTransformWindow::GetItemScale(const gfx::SizeF& source,
(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) {
// Shadow controller may be null on shutdown.
if (Shell::Get()->shadow_controller())
......
......@@ -67,6 +67,9 @@ class ASH_EXPORT ScopedOverviewTransformWindow
int top_view_inset,
int title_height);
static ScopedOverviewTransformWindow::GridWindowFillMode
GetWindowDimensionsType(aura::Window* window);
ScopedOverviewTransformWindow(OverviewItem* overview_item,
aura::Window* window);
~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