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

Unified Diff: ash/wm/workspace/phantom_window_controller.cc

Issue 10837211: Draw web content area correctly on a phantom window for window dragging (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove WindowPainter Created 8 years, 4 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/workspace/phantom_window_controller.h ('k') | ash/wm/workspace/workspace_window_resizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/workspace/phantom_window_controller.cc
diff --git a/ash/wm/workspace/phantom_window_controller.cc b/ash/wm/workspace/phantom_window_controller.cc
index 5d756ccbd00313e4ac6e0d2c00848472b3432523..984ce0ec79c29f9adf4ab8985ea467c55c9c0470 100644
--- a/ash/wm/workspace/phantom_window_controller.cc
+++ b/ash/wm/workspace/phantom_window_controller.cc
@@ -74,47 +74,14 @@ class EdgePainter : public views::Painter {
DISALLOW_COPY_AND_ASSIGN(EdgePainter);
};
-// Paints the background of the phantom window for window dragging.
-class WindowPainter : public views::Painter,
- public aura::WindowObserver {
- public:
- explicit WindowPainter(aura::Window* window)
- : window_(window) {
- window_->AddObserver(this);
- }
-
- virtual ~WindowPainter() {
- if (window_)
- window_->RemoveObserver(this);
- }
-
- // views::Painter overrides:
- virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE {
- // TODO(yusukes): Paint child windows of the |window_| correctly. Current
- // code does not paint e.g. web content area in the window. crbug.com/141766
- if (window_ && window_->delegate())
- window_->delegate()->OnPaint(canvas);
- }
-
- private:
- // aura::WindowObserver overrides:
- virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE {
- DCHECK_EQ(window_, window);
- window_ = NULL;
- }
-
- aura::Window* window_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowPainter);
-};
-
} // namespace
PhantomWindowController::PhantomWindowController(aura::Window* window)
: window_(window),
phantom_below_window_(NULL),
phantom_widget_(NULL),
- style_(STYLE_SHADOW) {
+ style_(STYLE_SHADOW),
+ layer_(NULL) {
}
PhantomWindowController::~PhantomWindowController() {
@@ -126,7 +93,15 @@ void PhantomWindowController::SetDestinationDisplay(
dst_display_ = dst_display;
}
+void PhantomWindowController::set_layer(ui::Layer* layer) {
+ // Cannot set a layer after the widget is initialized.
+ DCHECK(!phantom_widget_);
+ layer_ = layer;
+}
+
void PhantomWindowController::Show(const gfx::Rect& bounds) {
+ if (layer_)
+ layer_->SetVisible(true);
if (bounds == bounds_)
return;
bounds_ = bounds;
@@ -144,6 +119,8 @@ void PhantomWindowController::Show(const gfx::Rect& bounds) {
void PhantomWindowController::SetBounds(const gfx::Rect& bounds) {
DCHECK(IsShowing());
+ if (layer_)
+ layer_->SetVisible(true);
animation_.reset();
bounds_ = bounds;
SetBoundsInternal(bounds);
@@ -153,6 +130,8 @@ void PhantomWindowController::Hide() {
if (phantom_widget_)
phantom_widget_->Close();
phantom_widget_ = NULL;
+ if (layer_)
+ layer_->SetVisible(false);
}
bool PhantomWindowController::IsShowing() const {
@@ -198,24 +177,25 @@ void PhantomWindowController::CreatePhantomWidget(const gfx::Rect& bounds) {
phantom_widget_->Init(params);
phantom_widget_->SetVisibilityChangedAnimationsEnabled(false);
phantom_widget_->GetNativeWindow()->SetName("PhantomWindow");
- views::View* content_view = new views::View;
- switch (style_) {
- case STYLE_SHADOW:
- content_view->set_background(
- views::Background::CreateBackgroundPainter(true, new EdgePainter));
- break;
- case STYLE_WINDOW:
- content_view->set_background(views::Background::CreateBackgroundPainter(
- true, new WindowPainter(window_)));
- break;
+ if (style_ == STYLE_SHADOW) {
+ views::View* content_view = new views::View;
+ content_view->set_background(
+ views::Background::CreateBackgroundPainter(true, new EdgePainter));
+ phantom_widget_->SetContentsView(content_view);
}
- phantom_widget_->SetContentsView(content_view);
SetBoundsInternal(bounds);
if (phantom_below_window_)
phantom_widget_->StackBelow(phantom_below_window_);
else
phantom_widget_->StackAbove(window_);
phantom_widget_->Show();
+
+ if (layer_) {
+ aura::Window* window = phantom_widget_->GetNativeWindow();
+ window->layer()->Add(layer_);
+ window->layer()->StackAtTop(layer_);
+ }
+
// Fade the window in.
ui::Layer* layer = phantom_widget_->GetNativeWindow()->layer();
layer->SetOpacity(0);
« no previous file with comments | « ash/wm/workspace/phantom_window_controller.h ('k') | ash/wm/workspace/workspace_window_resizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698