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_util.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/window.h"
12#include "ui/aura/window_event_dispatcher.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 = ScreenUtil::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() const {
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 base::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
84bool PanelWindow::CanMinimize() const {
85  return false;
86}
87
88views::NonClientFrameView* PanelWindow::CreateNonClientFrameView(
89    views::Widget* widget) {
90  return new PanelFrameView(widget, PanelFrameView::FRAME_NONE);
91}
92
93}  // namespace ash
94