panel_window.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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 16namespace { 17const int kMinWidth = 100; 18const int kMinHeight = 100; 19const int kDefaultWidth = 200; 20const int kDefaultHeight = 300; 21} 22 23namespace ash { 24 25// static 26views::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 33PanelWindow::PanelWindow(const std::string& name) 34 : name_(name), 35 params_(views::Widget::InitParams::TYPE_PANEL) { 36 params_.delegate = this; 37} 38 39PanelWindow::~PanelWindow() { 40} 41 42views::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::GetTargetRootWindow(), 51 params().bounds); 52 53 widget->Init(params()); 54 widget->GetNativeView()->SetName(name_); 55 widget->Show(); 56 57 return widget; 58} 59 60gfx::Size PanelWindow::GetPreferredSize() { 61 return gfx::Size(kMinWidth, kMinHeight); 62} 63 64void PanelWindow::OnPaint(gfx::Canvas* canvas) { 65 canvas->FillRect(GetLocalBounds(), SK_ColorGREEN); 66} 67 68base::string16 PanelWindow::GetWindowTitle() const { 69 return ASCIIToUTF16(name_); 70} 71 72views::View* PanelWindow::GetContentsView() { 73 return this; 74} 75 76bool PanelWindow::CanResize() const { 77 return true; 78} 79 80bool PanelWindow::CanMaximize() const { 81 return false; 82} 83 84views::NonClientFrameView* PanelWindow::CreateNonClientFrameView( 85 views::Widget* widget) { 86 return new PanelFrameView(widget, PanelFrameView::FRAME_NONE); 87} 88 89} // namespace ash 90