Home | History | Annotate | Download | only in shell
      1 // Copyright (c) 2012 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 "ash/shell/panel_window.h"
      6 
      7 #include "ash/screen_ash.h"
      8 #include "ash/shell.h"
      9 #include "ash/wm/panels/panel_frame_view.h"
     10 #include "base/strings/utf_string_conversions.h"
     11 #include "ui/aura/root_window.h"
     12 #include "ui/aura/window.h"
     13 #include "ui/gfx/canvas.h"
     14 #include "ui/views/widget/widget.h"
     15 
     16 namespace {
     17 const int kMinWidth = 100;
     18 const int kMinHeight = 100;
     19 const int kDefaultWidth = 200;
     20 const int kDefaultHeight = 300;
     21 }
     22 
     23 namespace ash {
     24 
     25 // static
     26 views::Widget* PanelWindow::CreatePanelWindow(const gfx::Rect& rect) {
     27   PanelWindow* panel_window = new PanelWindow("Example Panel Window");
     28   panel_window->params().bounds = rect;
     29   panel_window->params().context = Shell::GetPrimaryRootWindow();
     30   return panel_window->CreateWidget();
     31 }
     32 
     33 PanelWindow::PanelWindow(const std::string& name)
     34     : name_(name),
     35       params_(views::Widget::InitParams::TYPE_PANEL) {
     36   params_.delegate = this;
     37 }
     38 
     39 PanelWindow::~PanelWindow() {
     40 }
     41 
     42 views::Widget* PanelWindow::CreateWidget() {
     43   views::Widget* widget = new views::Widget;
     44 
     45   if (params().bounds.width() == 0)
     46     params().bounds.set_width(kDefaultWidth);
     47   if (params().bounds.height() == 0)
     48     params().bounds.set_height(kDefaultHeight);
     49   params().bounds = ScreenAsh::ConvertRectToScreen(
     50       Shell::GetActiveRootWindow(),
     51       params().bounds);
     52 
     53   widget->Init(params());
     54   widget->GetNativeView()->SetName(name_);
     55   widget->Show();
     56 
     57   return widget;
     58 }
     59 
     60 gfx::Size PanelWindow::GetPreferredSize() {
     61   return gfx::Size(kMinWidth, kMinHeight);
     62 }
     63 
     64 void PanelWindow::OnPaint(gfx::Canvas* canvas) {
     65   canvas->FillRect(GetLocalBounds(), SK_ColorGREEN);
     66 }
     67 
     68 base::string16 PanelWindow::GetWindowTitle() const {
     69   return ASCIIToUTF16(name_);
     70 }
     71 
     72 views::View* PanelWindow::GetContentsView() {
     73   return this;
     74 }
     75 
     76 bool PanelWindow::CanResize() const {
     77   return true;
     78 }
     79 
     80 bool PanelWindow::CanMaximize() const {
     81   return false;
     82 }
     83 
     84 views::NonClientFrameView* PanelWindow::CreateNonClientFrameView(
     85     views::Widget* widget) {
     86   return new PanelFrameView(widget, PanelFrameView::FRAME_NONE);
     87 }
     88 
     89 }  // namespace ash
     90