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

Unified Diff: ash/wm/overview/scoped_transform_overview_window.cc

Issue 23654037: Add panels as a single group of windows per display for overview window cycling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix restored panel relayout when some panels minimized. Created 7 years, 3 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/wm/overview/scoped_transform_overview_window.h ('k') | ash/wm/overview/window_overview.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/overview/scoped_transform_overview_window.cc
diff --git a/ash/wm/overview/window_selector_window.cc b/ash/wm/overview/scoped_transform_overview_window.cc
similarity index 82%
copy from ash/wm/overview/window_selector_window.cc
copy to ash/wm/overview/scoped_transform_overview_window.cc
index 226c782462273c8d71e05f3ce55544006683cd3f..40c57e3516096b0721c367778a85f18f75576ae4 100644
--- a/ash/wm/overview/window_selector_window.cc
+++ b/ash/wm/overview/scoped_transform_overview_window.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ash/wm/overview/window_selector_window.h"
+#include "ash/wm/overview/scoped_transform_overview_window.h"
#include "ash/shell.h"
#include "ui/aura/client/aura_constants.h"
@@ -23,8 +23,6 @@ namespace ash {
namespace {
-const int kOverviewWindowTransitionMilliseconds = 100;
-
// Creates a copy of |window| with |recreated_layer| in the |target_root|.
views::Widget* CreateCopyOfWindow(aura::RootWindow* target_root,
aura::Window* src_window,
@@ -137,7 +135,7 @@ class WindowSelectorAnimationSettings
SetPreemptionStrategy(
ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
SetTransitionDuration(base::TimeDelta::FromMilliseconds(
- kOverviewWindowTransitionMilliseconds));
+ ScopedTransformOverviewWindow::kTransitionMilliseconds));
}
virtual ~WindowSelectorAnimationSettings() {
@@ -146,16 +144,20 @@ class WindowSelectorAnimationSettings
} // namespace
-WindowSelectorWindow::WindowSelectorWindow(aura::Window* window)
+const int ScopedTransformOverviewWindow::kTransitionMilliseconds = 100;
+
+ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(
+ aura::Window* window)
: window_(window),
window_copy_(NULL),
layer_(NULL),
minimized_(window->GetProperty(aura::client::kShowStateKey) ==
ui::SHOW_STATE_MINIMIZED),
+ overview_started_(false),
original_transform_(window->layer()->GetTargetTransform()) {
}
-WindowSelectorWindow::~WindowSelectorWindow() {
+ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {
if (window_) {
WindowSelectorAnimationSettings animation_settings(window_);
gfx::Transform transform;
@@ -166,7 +168,7 @@ WindowSelectorWindow::~WindowSelectorWindow() {
// to SHOW_STATE_MINIMIZED will not animate the window from its original
// bounds to the minimized position.
window_->layer()->SetOpacity(0);
- window_->layer()->SetVisible(false);
+ window_->Hide();
window_->SetProperty(aura::client::kShowStateKey,
ui::SHOW_STATE_MINIMIZED);
}
@@ -191,40 +193,56 @@ WindowSelectorWindow::~WindowSelectorWindow() {
}
}
-bool WindowSelectorWindow::Contains(const aura::Window* window) const {
+bool ScopedTransformOverviewWindow::Contains(const aura::Window* window) const {
if (window_copy_ && window_copy_->GetNativeWindow()->Contains(window))
return true;
return window_->Contains(window);
}
-void WindowSelectorWindow::RestoreWindowOnExit() {
+void ScopedTransformOverviewWindow::RestoreWindow() {
+ if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) ==
+ ui::SHOW_STATE_MINIMIZED) {
+ window_->Show();
+ }
+}
+
+void ScopedTransformOverviewWindow::RestoreWindowOnExit() {
minimized_ = false;
original_transform_ = gfx::Transform();
}
-void WindowSelectorWindow::OnWindowDestroyed() {
+void ScopedTransformOverviewWindow::OnWindowDestroyed() {
window_ = NULL;
}
-void WindowSelectorWindow::TransformToFitBounds(
- aura::RootWindow* root_window,
- const gfx::Rect& target_bounds) {
- if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) ==
- ui::SHOW_STATE_MINIMIZED) {
- window_->Show();
- }
- fit_bounds_ = target_bounds;
- const gfx::Rect bounds = window_->GetBoundsInScreen();
+gfx::Transform ScopedTransformOverviewWindow::
+ GetTransformForRectPreservingAspectRatio(const gfx::Rect& rect,
+ const gfx::Rect& bounds) {
+ DCHECK(!rect.IsEmpty());
+ DCHECK(!bounds.IsEmpty());
float scale = std::min(1.0f,
- std::min(static_cast<float>(target_bounds.width()) / bounds.width(),
- static_cast<float>(target_bounds.height()) / bounds.height()));
+ std::min(static_cast<float>(bounds.width()) / rect.width(),
+ static_cast<float>(bounds.height()) / rect.height()));
gfx::Transform transform;
gfx::Vector2d offset(
- 0.5 * (target_bounds.width() - scale * bounds.width()),
- 0.5 * (target_bounds.height() - scale * bounds.height()));
- transform.Translate(target_bounds.x() - bounds.x() + offset.x(),
- target_bounds.y() - bounds.y() + offset.y());
+ 0.5 * (bounds.width() - scale * rect.width()),
+ 0.5 * (bounds.height() - scale * rect.height()));
+ transform.Translate(bounds.x() - rect.x() + offset.x(),
+ bounds.y() - rect.y() + offset.y());
transform.Scale(scale, scale);
+ return transform;
+}
+
+void ScopedTransformOverviewWindow::SetTransform(
+ aura::RootWindow* root_window,
+ const gfx::Transform& transform) {
+ // If this is the first transform, perform one-time window modifications
+ // necessary for overview mode.
+ if (!overview_started_) {
+ OnOverviewStarted();
+ overview_started_ = true;
+ }
+
if (root_window != window_->GetRootWindow()) {
if (!window_copy_) {
DCHECK(!layer_);
@@ -239,4 +257,8 @@ void WindowSelectorWindow::TransformToFitBounds(
window_->SetTransform(transform);
}
+void ScopedTransformOverviewWindow::OnOverviewStarted() {
+ RestoreWindow();
+}
+
} // namespace ash
« no previous file with comments | « ash/wm/overview/scoped_transform_overview_window.h ('k') | ash/wm/overview/window_overview.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698