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