Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / athena / system / background_controller.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "athena/system/background_controller.h"
6
7 #include "athena/system/public/system_ui.h"
8 #include "ui/aura/window.h"
9 #include "ui/compositor/layer.h"
10 #include "ui/gfx/canvas.h"
11 #include "ui/gfx/image/image_skia.h"
12 #include "ui/views/view.h"
13 #include "ui/views/widget/widget.h"
14
15 namespace athena {
16
17 class BackgroundView : public views::View {
18  public:
19   BackgroundView() : system_info_view_(NULL) {
20     system_info_view_ =
21         SystemUI::Get()->CreateSystemInfoView(SystemUI::COLOR_SCHEME_LIGHT);
22     AddChildView(system_info_view_);
23   }
24   virtual ~BackgroundView() {}
25
26   void SetImage(const gfx::ImageSkia& image) {
27     image_ = image;
28     SchedulePaint();
29   }
30
31   // views::View:
32   virtual void Layout() OVERRIDE {
33     system_info_view_->SetBounds(
34         0, 0, width(), system_info_view_->GetPreferredSize().height());
35   }
36
37   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
38     canvas->DrawImageInt(image_,
39                          0,
40                          0,
41                          image_.width(),
42                          image_.height(),
43                          0,
44                          0,
45                          width(),
46                          height(),
47                          true);
48   }
49
50  private:
51   gfx::ImageSkia image_;
52   views::View* system_info_view_;
53
54   DISALLOW_COPY_AND_ASSIGN(BackgroundView);
55 };
56
57 BackgroundController::BackgroundController(aura::Window* background_container) {
58   views::Widget* background_widget = new views::Widget;
59   views::Widget::InitParams params(
60       views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
61   params.parent = background_container;
62   background_widget->Init(params);
63   background_widget->GetNativeWindow()->layer()->SetMasksToBounds(true);
64   background_view_ = new BackgroundView;
65   background_widget->SetContentsView(background_view_);
66   background_widget->GetNativeView()->SetName("BackgroundWidget");
67   background_widget->Show();
68 }
69
70 BackgroundController::~BackgroundController() {
71   // background_widget is owned by the container and will be deleted
72   // when the container is deleted.
73 }
74
75 void BackgroundController::SetImage(const gfx::ImageSkia& image) {
76   // TODO(oshima): implement cross fede animation.
77   background_view_->SetImage(image);
78 }
79
80 }  // namespace athena