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

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

Issue 8555025: aura: Draw drop shadows under browsers and menus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor changes 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
« no previous file with comments | « ui/aura/window.h ('k') | ui/aura/window_observer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 STLDeleteElements(&transient_children); 71 STLDeleteElements(&transient_children);
72 DCHECK(transient_children_.empty()); 72 DCHECK(transient_children_.empty());
73 73
74 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this)); 74 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this));
75 } 75 }
76 76
77 void Window::Init(ui::Layer::LayerType layer_type) { 77 void Window::Init(ui::Layer::LayerType layer_type) {
78 layer_.reset(new ui::Layer(layer_type)); 78 layer_.reset(new ui::Layer(layer_type));
79 layer_->SetVisible(false); 79 layer_->SetVisible(false);
80 layer_->set_delegate(this); 80 layer_->set_delegate(this);
81
81 #if !defined(NDEBUG) 82 #if !defined(NDEBUG)
82 std::string layer_name(name_); 83 std::string layer_name(name_);
83 if (layer_name.empty()) 84 if (layer_name.empty())
84 layer_name.append("Unnamed Window"); 85 layer_name.append("Unnamed Window");
85 86
86 if (id_ != -1) { 87 if (id_ != -1) {
87 char id_buf[10]; 88 char id_buf[10];
88 base::snprintf(id_buf, sizeof(id_buf), " %d", id_); 89 base::snprintf(id_buf, sizeof(id_buf), " %d", id_);
89 layer_name.append(id_buf); 90 layer_name.append(id_buf);
90 } 91 }
91 layer_->set_name(layer_name); 92 layer_->set_name(layer_name);
92 #endif 93 #endif
94
95 Desktop::GetInstance()->WindowInitialized(this);
93 } 96 }
94 97
95 void Window::SetType(WindowType type) { 98 void Window::SetType(WindowType type) {
96 // Cannot change type after the window is initialized. 99 // Cannot change type after the window is initialized.
97 DCHECK(!layer()); 100 DCHECK(!layer());
98 type_ = type; 101 type_ = type;
99 } 102 }
100 103
101 void Window::Show() { 104 void Window::Show() {
102 SetVisible(true); 105 SetVisible(true);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 // 'child'. 214 // 'child'.
212 Window* last_transient = child; 215 Window* last_transient = child;
213 for (Windows::iterator i = child->transient_children_.begin(); 216 for (Windows::iterator i = child->transient_children_.begin();
214 i != child->transient_children_.end(); ++i) { 217 i != child->transient_children_.end(); ++i) {
215 Window* transient_child = *i; 218 Window* transient_child = *i;
216 if (transient_child->parent_ == this) { 219 if (transient_child->parent_ == this) {
217 MoveChildAbove(transient_child, last_transient); 220 MoveChildAbove(transient_child, last_transient);
218 last_transient = transient_child; 221 last_transient = transient_child;
219 } 222 }
220 } 223 }
224
225 child->OnStackingChanged();
221 } 226 }
222 227
223 bool Window::CanActivate() const { 228 bool Window::CanActivate() const {
224 return IsVisible() && (!delegate_ || delegate_->ShouldActivate(NULL)); 229 return IsVisible() && (!delegate_ || delegate_->ShouldActivate(NULL));
225 } 230 }
226 231
227 void Window::AddChild(Window* child) { 232 void Window::AddChild(Window* child) {
228 DCHECK(std::find(children_.begin(), children_.end(), child) == 233 DCHECK(std::find(children_.begin(), children_.end(), child) ==
229 children_.end()); 234 children_.end());
230 if (child->parent()) 235 if (child->parent())
231 child->parent()->RemoveChild(child); 236 child->parent()->RemoveChild(child);
232 child->parent_ = this; 237 child->parent_ = this;
238
233 layer_->Add(child->layer_.get()); 239 layer_->Add(child->layer_.get());
240
234 children_.push_back(child); 241 children_.push_back(child);
235 if (layout_manager_.get()) 242 if (layout_manager_.get())
236 layout_manager_->OnWindowAddedToLayout(child); 243 layout_manager_->OnWindowAddedToLayout(child);
237 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowAdded(child)); 244 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowAdded(child));
245 child->OnParentChanged();
238 } 246 }
239 247
240 void Window::AddTransientChild(Window* child) { 248 void Window::AddTransientChild(Window* child) {
241 if (child->transient_parent_) 249 if (child->transient_parent_)
242 child->transient_parent_->RemoveTransientChild(child); 250 child->transient_parent_->RemoveTransientChild(child);
243 DCHECK(std::find(transient_children_.begin(), transient_children_.end(), 251 DCHECK(std::find(transient_children_.begin(), transient_children_.end(),
244 child) == transient_children_.end()); 252 child) == transient_children_.end());
245 transient_children_.push_back(child); 253 transient_children_.push_back(child);
246 child->transient_parent_ = this; 254 child->transient_parent_ = this;
247 } 255 }
(...skipping 12 matching lines...) Expand all
260 DCHECK(i != children_.end()); 268 DCHECK(i != children_.end());
261 if (layout_manager_.get()) 269 if (layout_manager_.get())
262 layout_manager_->OnWillRemoveWindowFromLayout(child); 270 layout_manager_->OnWillRemoveWindowFromLayout(child);
263 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWillRemoveWindow(child)); 271 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWillRemoveWindow(child));
264 aura::Window* desktop = child->GetDesktop(); 272 aura::Window* desktop = child->GetDesktop();
265 child->parent_ = NULL; 273 child->parent_ = NULL;
266 if (desktop) 274 if (desktop)
267 desktop->WindowDetachedFromDesktop(child); 275 desktop->WindowDetachedFromDesktop(child);
268 layer_->Remove(child->layer_.get()); 276 layer_->Remove(child->layer_.get());
269 children_.erase(i); 277 children_.erase(i);
278 child->OnParentChanged();
270 } 279 }
271 280
272 Window* Window::GetChildById(int id) { 281 Window* Window::GetChildById(int id) {
273 return const_cast<Window*>(const_cast<const Window*>(this)->GetChildById(id)); 282 return const_cast<Window*>(const_cast<const Window*>(this)->GetChildById(id));
274 } 283 }
275 284
276 const Window* Window::GetChildById(int id) const { 285 const Window* Window::GetChildById(int id) const {
277 Windows::const_iterator i; 286 Windows::const_iterator i;
278 for (i = children_.begin(); i != children_.end(); ++i) { 287 for (i = children_.begin(); i != children_.end(); ++i) {
279 if ((*i)->id() == id) 288 if ((*i)->id() == id)
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 452
444 // If we're not changing the effective bounds, then we can bail early and skip 453 // If we're not changing the effective bounds, then we can bail early and skip
445 // notifying our listeners. 454 // notifying our listeners.
446 if (old_bounds == actual_new_bounds) 455 if (old_bounds == actual_new_bounds)
447 return; 456 return;
448 457
449 if (layout_manager_.get()) 458 if (layout_manager_.get())
450 layout_manager_->OnWindowResized(); 459 layout_manager_->OnWindowResized();
451 if (delegate_) 460 if (delegate_)
452 delegate_->OnBoundsChanged(old_bounds, actual_new_bounds); 461 delegate_->OnBoundsChanged(old_bounds, actual_new_bounds);
462 FOR_EACH_OBSERVER(WindowObserver,
463 observers_,
464 OnWindowBoundsChanged(this, actual_new_bounds));
453 } 465 }
454 466
455 void Window::SetVisible(bool visible) { 467 void Window::SetVisible(bool visible) {
456 if (visible == layer_->visible()) 468 if (visible == layer_->visible())
457 return; // No change. 469 return; // No change.
458 470
459 bool was_visible = IsVisible(); 471 bool was_visible = IsVisible();
460 layer_->SetVisible(visible); 472 layer_->SetVisible(visible);
461 bool is_visible = IsVisible(); 473 bool is_visible = IsVisible();
462 if (was_visible != is_visible) { 474 if (was_visible != is_visible) {
463 SchedulePaint(); 475 SchedulePaint();
464 if (delegate_) 476 if (delegate_)
465 delegate_->OnWindowVisibilityChanged(is_visible); 477 delegate_->OnWindowVisibilityChanged(is_visible);
466 } 478 }
479
467 if (parent_ && parent_->layout_manager_.get()) 480 if (parent_ && parent_->layout_manager_.get())
468 parent_->layout_manager_->OnChildWindowVisibilityChanged(this, visible); 481 parent_->layout_manager_->OnChildWindowVisibilityChanged(this, visible);
469 FOR_EACH_OBSERVER(WindowObserver, observers_, 482 FOR_EACH_OBSERVER(WindowObserver, observers_,
470 OnWindowVisibilityChanged(this, visible)); 483 OnWindowVisibilityChanged(this, visible));
471 } 484 }
472 485
473 void Window::SchedulePaint() { 486 void Window::SchedulePaint() {
474 SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height())); 487 SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height()));
475 } 488 }
476 489
(...skipping 28 matching lines...) Expand all
505 if (match) 518 if (match)
506 return match; 519 return match;
507 520
508 if (for_event_handling && child->StopsEventPropagation()) 521 if (for_event_handling && child->StopsEventPropagation())
509 break; 522 break;
510 } 523 }
511 524
512 return delegate_ ? this : NULL; 525 return delegate_ ? this : NULL;
513 } 526 }
514 527
528 void Window::OnParentChanged() {
529 FOR_EACH_OBSERVER(
530 WindowObserver, observers_, OnWindowParentChanged(this, parent_));
531 }
532
533 void Window::OnStackingChanged() {
534 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowStackingChanged(this));
535 }
536
515 void Window::OnPaintLayer(gfx::Canvas* canvas) { 537 void Window::OnPaintLayer(gfx::Canvas* canvas) {
516 if (delegate_) 538 if (delegate_)
517 delegate_->OnPaint(canvas); 539 delegate_->OnPaint(canvas);
518 } 540 }
519 541
520 } // namespace aura 542 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/window.h ('k') | ui/aura/window_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698