toplevel_window.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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/toplevel_window.h" 6 7#include "ash/display/display_controller.h" 8#include "ash/shell.h" 9#include "ash/wm/window_positioner.h" 10#include "ash/wm/window_state.h" 11#include "base/strings/utf_string_conversions.h" 12#include "ui/aura/window.h" 13#include "ui/aura/window_event_dispatcher.h" 14#include "ui/gfx/canvas.h" 15#include "ui/views/widget/widget.h" 16 17namespace ash { 18namespace shell { 19namespace { 20 21struct SavedState { 22 gfx::Rect bounds; 23 ui::WindowShowState show_state; 24}; 25 26// The last window state in ash_shell. We don't bother deleting 27// this on shutdown. 28SavedState* saved_state = NULL; 29 30} // namespace 31 32ToplevelWindow::CreateParams::CreateParams() 33 : can_resize(false), 34 can_maximize(false) { 35} 36 37// static 38views::Widget* ToplevelWindow::CreateToplevelWindow( 39 const CreateParams& params) { 40 views::Widget* widget = views::Widget::CreateWindowWithContext( 41 new ToplevelWindow(params), Shell::GetPrimaryRootWindow()); 42 widget->GetNativeView()->SetName("Examples:ToplevelWindow"); 43 wm::WindowState* window_state = wm::GetWindowState(widget->GetNativeView()); 44 window_state->set_window_position_managed(true); 45 widget->Show(); 46 return widget; 47} 48 49// static 50void ToplevelWindow::ClearSavedStateForTest() { 51 delete saved_state; 52 saved_state = NULL; 53} 54 55ToplevelWindow::ToplevelWindow(const CreateParams& params) : params_(params) { 56} 57 58ToplevelWindow::~ToplevelWindow() { 59} 60 61void ToplevelWindow::OnPaint(gfx::Canvas* canvas) { 62 canvas->FillRect(GetLocalBounds(), SK_ColorDKGRAY); 63} 64 65base::string16 ToplevelWindow::GetWindowTitle() const { 66 return base::ASCIIToUTF16("Examples: Toplevel Window"); 67} 68 69void ToplevelWindow::SaveWindowPlacement(const gfx::Rect& bounds, 70 ui::WindowShowState show_state) { 71 if (!saved_state) 72 saved_state = new SavedState; 73 saved_state->bounds = bounds; 74 saved_state->show_state = show_state; 75} 76 77bool ToplevelWindow::GetSavedWindowPlacement( 78 const views::Widget* widget, 79 gfx::Rect* bounds, 80 ui::WindowShowState* show_state) const { 81 bool is_saved_bounds = !!saved_state; 82 if (saved_state) { 83 *bounds = saved_state->bounds; 84 *show_state = saved_state->show_state; 85 } else { 86 // Initial default bounds. 87 bounds->SetRect(10, 150, 300, 300); 88 } 89 ash::WindowPositioner::GetBoundsAndShowStateForNewWindow( 90 ash::Shell::GetScreen(), 91 NULL, 92 is_saved_bounds, 93 *show_state, 94 bounds, 95 show_state); 96 return true; 97} 98 99views::View* ToplevelWindow::GetContentsView() { 100 return this; 101} 102 103bool ToplevelWindow::CanResize() const { 104 return params_.can_resize; 105} 106 107bool ToplevelWindow::CanMaximize() const { 108 return params_.can_maximize; 109} 110 111} // namespace shell 112} // namespace ash 113