1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/system/background_controller.h"
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/system/public/system_ui.h"
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/window.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/compositor/layer.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/canvas.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/view.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/widget/widget.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace athena {
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class BackgroundView : public views::View {
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  BackgroundView() : system_info_view_(NULL) {
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    system_info_view_ =
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        SystemUI::Get()->CreateSystemInfoView(SystemUI::COLOR_SCHEME_LIGHT);
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    AddChildView(system_info_view_);
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~BackgroundView() {}
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetImage(const gfx::ImageSkia& image) {
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    image_ = image;
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    SchedulePaint();
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // views::View:
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void Layout() OVERRIDE {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    system_info_view_->SetBounds(
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        0, 0, width(), system_info_view_->GetPreferredSize().height());
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    canvas->DrawImageInt(image_,
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         0,
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         0,
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         image_.width(),
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         image_.height(),
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         0,
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         0,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         width(),
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         height(),
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         true);
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::ImageSkia image_;
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  views::View* system_info_view_;
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BackgroundView);
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBackgroundController::BackgroundController(aura::Window* background_container) {
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::Widget* background_widget = new views::Widget;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::Widget::InitParams params(
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  params.parent = background_container;
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_widget->Init(params);
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_widget->GetNativeWindow()->layer()->SetMasksToBounds(true);
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_view_ = new BackgroundView;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_widget->SetContentsView(background_view_);
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  background_widget->GetNativeView()->SetName("BackgroundWidget");
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_widget->Show();
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BackgroundController::~BackgroundController() {
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // background_widget is owned by the container and will be deleted
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // when the container is deleted.
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void BackgroundController::SetImage(const gfx::ImageSkia& image) {
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // TODO(oshima): implement cross fede animation.
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  background_view_->SetImage(image);
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace athena
81