Index: ash/desktop_background/desktop_background_widget_controller.cc |
diff --git a/ash/desktop_background/desktop_background_widget_controller.cc b/ash/desktop_background/desktop_background_widget_controller.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..db6e766a71afdbb892d957015fc21349db92ad36 |
--- /dev/null |
+++ b/ash/desktop_background/desktop_background_widget_controller.cc |
@@ -0,0 +1,58 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ash/desktop_background/desktop_background_widget_controller.h" |
+ |
+#include "ui/aura/root_window.h" |
+#include "ui/views/widget/widget.h" |
+ |
+DECLARE_WINDOW_PROPERTY_TYPE(ash::internal::DesktopBackgroundWidgetController*); |
+ |
+namespace ash { |
+namespace internal { |
+ |
+DEFINE_OWNED_WINDOW_PROPERTY_KEY(DesktopBackgroundWidgetController, |
+ kWindowDesktopComponent, NULL); |
+ |
+DesktopBackgroundWidgetController::DesktopBackgroundWidgetController( |
+ views::Widget* widget) : widget_(widget) { |
+} |
+ |
+DesktopBackgroundWidgetController::DesktopBackgroundWidgetController( |
+ ui::Layer* layer) : widget_(NULL) { |
+ layer_.reset(layer); |
+} |
+ |
bshe
2012/07/30 21:38:20
nit: remove the extra line here.
|
+ |
+DesktopBackgroundWidgetController::~DesktopBackgroundWidgetController() { |
+ if (widget_) { |
+ widget_->CloseNow(); |
+ widget_ = NULL; |
+ } else if (layer_.get()) |
+ layer_.reset(NULL); |
+} |
+ |
+void DesktopBackgroundWidgetController::SetBounds(gfx::Rect bounds) { |
+ if (widget_) |
+ widget_->SetBounds(bounds); |
+ else if (layer_.get()) |
+ layer_->SetBounds(bounds); |
+} |
+ |
+ |
+void DesktopBackgroundWidgetController::Reparent(aura::RootWindow* root_window, |
+ int src_container, |
+ int dest_container) { |
+ if (widget_) { |
+ views::Widget::ReparentNativeView(widget_->GetNativeView(), |
+ root_window->GetChildById(dest_container)); |
+ } else if (layer_.get()) { |
+ ui::Layer* layer = layer_.get(); |
+ root_window->GetChildById(src_container)->layer()->Remove(layer); |
+ root_window->GetChildById(dest_container)->layer()->Add(layer); |
+ } |
+} |
+ |
+} // namespace internal |
+} // namespace ash |