Home | History | Annotate | Download | only in system
      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
     81