Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(857)

Side by Side Diff: ui/aura/window.cc

Issue 8400063: Move maximize/fullscreen/restore to shell (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ready for review Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/aura/window.h" 5 #include "ui/aura/window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "ui/aura/desktop.h" 11 #include "ui/aura/desktop.h"
12 #include "ui/aura/desktop_delegate.h" 12 #include "ui/aura/desktop_delegate.h"
13 #include "ui/aura/event.h" 13 #include "ui/aura/event.h"
14 #include "ui/aura/event_filter.h" 14 #include "ui/aura/event_filter.h"
15 #include "ui/aura/layout_manager.h" 15 #include "ui/aura/layout_manager.h"
16 #include "ui/aura/window_delegate.h" 16 #include "ui/aura/window_delegate.h"
17 #include "ui/aura/window_observer.h" 17 #include "ui/aura/window_observer.h"
18 #include "ui/aura/window_types.h" 18 #include "ui/aura/window_types.h"
19 #include "ui/base/animation/multi_animation.h" 19 #include "ui/base/animation/multi_animation.h"
20 #include "ui/base/view_prop.h" 20 #include "ui/base/view_prop.h"
21 #include "ui/gfx/canvas_skia.h" 21 #include "ui/gfx/canvas_skia.h"
22 #include "ui/gfx/compositor/compositor.h" 22 #include "ui/gfx/compositor/compositor.h"
23 #include "ui/gfx/screen.h" 23 #include "ui/gfx/screen.h"
24 24
25 namespace aura { 25 namespace aura {
26 26
27 Window::Window(WindowDelegate* delegate) 27 Window::Window(WindowDelegate* delegate)
28 : type_(kWindowType_None), 28 : type_(kWindowType_None),
29 delegate_(delegate), 29 delegate_(delegate),
30 show_state_(ui::SHOW_STATE_NORMAL),
31 parent_(NULL), 30 parent_(NULL),
32 transient_parent_(NULL), 31 transient_parent_(NULL),
33 id_(-1), 32 id_(-1),
34 user_data_(NULL), 33 user_data_(NULL),
35 stops_event_propagation_(false) { 34 stops_event_propagation_(false) {
36 } 35 }
37 36
38 Window::~Window() { 37 Window::~Window() {
39 // Let the delegate know we're in the processing of destroying. 38 // Let the delegate know we're in the processing of destroying.
40 if (delegate_) 39 if (delegate_)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 if (Desktop::GetInstance()->active_window() == this || 97 if (Desktop::GetInstance()->active_window() == this ||
99 !Desktop::GetInstance()->active_window()) { 98 !Desktop::GetInstance()->active_window()) {
100 Desktop::GetInstance()->ActivateTopmostWindow(); 99 Desktop::GetInstance()->ActivateTopmostWindow();
101 } 100 }
102 } 101 }
103 102
104 bool Window::IsVisible() const { 103 bool Window::IsVisible() const {
105 return layer_->IsDrawn(); 104 return layer_->IsDrawn();
106 } 105 }
107 106
108 void Window::Maximize() {
109 // The desktop size may have changed, so make sure the window is maximized to
110 // the correct size even if it's already maximized.
111 gfx::Rect rect = gfx::Screen::GetMonitorWorkAreaNearestWindow(this);
112 if (UpdateShowStateAndRestoreBounds(ui::SHOW_STATE_MAXIMIZED) ||
113 rect != bounds())
114 SetBoundsInternal(rect);
115 }
116
117 void Window::Fullscreen() {
118 // The desktop size may have changed, so make sure the window is fullscreen to
119 // the correct size even if it's already fullscreen.
120 gfx::Rect rect = gfx::Screen::GetMonitorAreaNearestWindow(this);
121 if (UpdateShowStateAndRestoreBounds(ui::SHOW_STATE_FULLSCREEN) ||
122 rect != bounds())
123 SetBoundsInternal(rect);
124 }
125
126 void Window::Restore() {
127 if (show_state_ != ui::SHOW_STATE_NORMAL) {
128 show_state_ = ui::SHOW_STATE_NORMAL;
129 SetBoundsInternal(restore_bounds_);
130 restore_bounds_.SetRect(0, 0, 0, 0);
131 }
132 }
133
134 gfx::Rect Window::GetScreenBounds() const { 107 gfx::Rect Window::GetScreenBounds() const {
135 const gfx::Rect local_bounds = bounds(); 108 const gfx::Rect local_bounds = bounds();
136 gfx::Point origin = local_bounds.origin(); 109 gfx::Point origin = local_bounds.origin();
137 Window::ConvertPointToWindow(parent_, 110 Window::ConvertPointToWindow(parent_,
138 aura::Desktop::GetInstance(), 111 aura::Desktop::GetInstance(),
139 &origin); 112 &origin);
140 return gfx::Rect(origin, local_bounds.size()); 113 return gfx::Rect(origin, local_bounds.size());
141 } 114 }
142 115
143 void Window::Activate() { 116 void Window::Activate() {
(...skipping 19 matching lines...) Expand all
163 136
164 void Window::SetTransform(const ui::Transform& transform) { 137 void Window::SetTransform(const ui::Transform& transform) {
165 layer()->SetTransform(transform); 138 layer()->SetTransform(transform);
166 } 139 }
167 140
168 void Window::SetLayoutManager(LayoutManager* layout_manager) { 141 void Window::SetLayoutManager(LayoutManager* layout_manager) {
169 layout_manager_.reset(layout_manager); 142 layout_manager_.reset(layout_manager);
170 } 143 }
171 144
172 void Window::SetBounds(const gfx::Rect& new_bounds) { 145 void Window::SetBounds(const gfx::Rect& new_bounds) {
173 gfx::Rect adjusted_bounds = new_bounds;
174 if (parent_ && parent_->layout_manager()) 146 if (parent_ && parent_->layout_manager())
175 parent_->layout_manager()->CalculateBoundsForChild(this, &adjusted_bounds); 147 parent_->layout_manager()->SetChildBounds(this, new_bounds);
176 148 else
177 if (show_state_ == ui::SHOW_STATE_MAXIMIZED || 149 SetBoundsInternal(new_bounds);
178 show_state_ == ui::SHOW_STATE_FULLSCREEN) {
179 restore_bounds_ = adjusted_bounds;
180 return;
181 }
182 SetBoundsInternal(adjusted_bounds);
183 } 150 }
184 151
185 gfx::Rect Window::GetTargetBounds() const { 152 gfx::Rect Window::GetTargetBounds() const {
186 return layer_->GetTargetBounds(); 153 return layer_->GetTargetBounds();
187 } 154 }
188 155
189 const gfx::Rect& Window::bounds() const { 156 const gfx::Rect& Window::bounds() const {
190 return layer_->bounds(); 157 return layer_->bounds();
191 } 158 }
192 159
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 } 371 }
405 372
406 Window* Window::GetToplevelWindow() { 373 Window* Window::GetToplevelWindow() {
407 Window* window = this; 374 Window* window = this;
408 while (window && window->parent() && 375 while (window && window->parent() &&
409 !window->parent()->AsToplevelWindowContainer()) 376 !window->parent()->AsToplevelWindowContainer())
410 window = window->parent(); 377 window = window->parent();
411 return window && window->parent() ? window : NULL; 378 return window && window->parent() ? window : NULL;
412 } 379 }
413 380
414 bool Window::IsOrContainsFullscreenWindow() const {
415 if (delegate_)
416 return IsVisible() && show_state_ == ui::SHOW_STATE_FULLSCREEN;
417
418 for (Windows::const_iterator it = children_.begin();
419 it != children_.end(); ++it) {
420 if ((*it)->IsOrContainsFullscreenWindow())
421 return true;
422 }
423 return false;
424 }
425
426 void Window::SetProperty(const char* name, void* value) { 381 void Window::SetProperty(const char* name, void* value) {
382 void* old = GetProperty(name);
427 ui::ViewProp* prop = prop_map_[name]; 383 ui::ViewProp* prop = prop_map_[name];
428 delete prop; 384 delete prop;
429 if (value) 385 if (value)
430 prop_map_[name] = new ui::ViewProp(this, name, value); 386 prop_map_[name] = new ui::ViewProp(this, name, value);
431 else 387 else
432 prop_map_.erase(name); 388 prop_map_.erase(name);
389 FOR_EACH_OBSERVER(WindowObserver, observers_,
390 OnPropertyChanged(this, name, old));
391 }
392
393 void Window::SetIntProperty(const char* name, int value) {
394 SetProperty(name, reinterpret_cast<void*>(value));
433 } 395 }
434 396
435 void* Window::GetProperty(const char* name) const { 397 void* Window::GetProperty(const char* name) const {
436 return ui::ViewProp::GetValue(const_cast<gfx::NativeView>(this), name); 398 return ui::ViewProp::GetValue(const_cast<gfx::NativeView>(this), name);
437 } 399 }
438 400
401 int Window::GetIntProperty(const char* name) const {
402 return static_cast<int>(reinterpret_cast<intptr_t>(
403 GetProperty(name)));
404 }
405
439 Desktop* Window::GetDesktop() { 406 Desktop* Window::GetDesktop() {
440 return parent_ ? parent_->GetDesktop() : NULL; 407 return parent_ ? parent_->GetDesktop() : NULL;
441 } 408 }
442 409
443 void Window::SetBoundsInternal(const gfx::Rect& new_bounds) { 410 void Window::SetBoundsInternal(const gfx::Rect& new_bounds) {
444 const gfx::Rect old_bounds = bounds(); 411 const gfx::Rect old_bounds = bounds();
445 if (old_bounds == new_bounds) 412 if (old_bounds == new_bounds)
446 return; 413 return;
447 414
448 bool was_move = old_bounds.size() == new_bounds.size(); 415 bool was_move = old_bounds.size() == new_bounds.size();
(...skipping 30 matching lines...) Expand all
479 } 446 }
480 447
481 void Window::SchedulePaint() { 448 void Window::SchedulePaint() {
482 SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height())); 449 SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height()));
483 } 450 }
484 451
485 bool Window::StopsEventPropagation() const { 452 bool Window::StopsEventPropagation() const {
486 return stops_event_propagation_ && !children_.empty(); 453 return stops_event_propagation_ && !children_.empty();
487 } 454 }
488 455
489 bool Window::UpdateShowStateAndRestoreBounds(
490 ui::WindowShowState new_show_state) {
491 if (show_state_ == new_show_state)
492 return false;
493 show_state_ = new_show_state;
494 if (restore_bounds_.IsEmpty())
495 restore_bounds_ = bounds();
496 return true;
497 }
498
499 Window* Window::GetWindowForPoint(const gfx::Point& local_point, 456 Window* Window::GetWindowForPoint(const gfx::Point& local_point,
500 bool return_tightest, 457 bool return_tightest,
501 bool for_event_handling) { 458 bool for_event_handling) {
502 if (!IsVisible()) 459 if (!IsVisible())
503 return NULL; 460 return NULL;
504 461
505 if ((for_event_handling && !HitTest(local_point)) || 462 if ((for_event_handling && !HitTest(local_point)) ||
506 (!for_event_handling && !ContainsPoint(local_point))) 463 (!for_event_handling && !ContainsPoint(local_point)))
507 return NULL; 464 return NULL;
508 465
(...skipping 23 matching lines...) Expand all
532 489
533 void Window::OnPaintLayer(gfx::Canvas* canvas) { 490 void Window::OnPaintLayer(gfx::Canvas* canvas) {
534 delegate_->OnPaint(canvas); 491 delegate_->OnPaint(canvas);
535 } 492 }
536 493
537 void Window::OnLayerAnimationEnded( 494 void Window::OnLayerAnimationEnded(
538 const ui::LayerAnimationSequence* animation) { 495 const ui::LayerAnimationSequence* animation) {
539 } 496 }
540 497
541 } // namespace aura 498 } // namespace aura
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698