Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef UI_AURA_WINDOW_H_ | 5 #ifndef UI_AURA_WINDOW_H_ |
| 6 #define UI_AURA_WINDOW_H_ | 6 #define UI_AURA_WINDOW_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
| 13 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/observer_list.h" | 15 #include "base/observer_list.h" |
| 16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
| 17 #include "ui/aura/aura_export.h" | 17 #include "ui/aura/aura_export.h" |
| 18 #include "ui/aura/client/window_types.h" | 18 #include "ui/aura/client/window_types.h" |
| 19 #include "ui/aura/window_layer_type.h" | |
| 19 #include "ui/aura/window_observer.h" | 20 #include "ui/aura/window_observer.h" |
| 20 #include "ui/compositor/layer_animator.h" | 21 #include "ui/compositor/layer_animator.h" |
| 21 #include "ui/compositor/layer_delegate.h" | 22 #include "ui/compositor/layer_delegate.h" |
| 22 #include "ui/compositor/layer_owner.h" | 23 #include "ui/compositor/layer_owner.h" |
| 23 #include "ui/compositor/layer_type.h" | 24 #include "ui/compositor/layer_type.h" |
| 24 #include "ui/events/event_constants.h" | 25 #include "ui/events/event_constants.h" |
| 25 #include "ui/events/event_target.h" | 26 #include "ui/events/event_target.h" |
| 26 #include "ui/events/gestures/gesture_types.h" | 27 #include "ui/events/gestures/gesture_types.h" |
| 27 #include "ui/gfx/insets.h" | 28 #include "ui/gfx/insets.h" |
| 28 #include "ui/gfx/native_widget_types.h" | 29 #include "ui/gfx/native_widget_types.h" |
| 29 #include "ui/gfx/rect.h" | 30 #include "ui/gfx/rect.h" |
| 30 | 31 |
| 31 namespace gfx { | 32 namespace gfx { |
| 32 class Display; | 33 class Display; |
| 33 class Transform; | 34 class Transform; |
| 35 class Vector2d; | |
| 34 } | 36 } |
| 35 | 37 |
| 36 namespace ui { | 38 namespace ui { |
| 37 class EventHandler; | 39 class EventHandler; |
| 38 class Layer; | 40 class Layer; |
| 39 class Texture; | 41 class Texture; |
| 40 } | 42 } |
| 41 | 43 |
| 42 namespace aura { | 44 namespace aura { |
| 43 | 45 |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 66 public ui::GestureConsumer { | 68 public ui::GestureConsumer { |
| 67 public: | 69 public: |
| 68 typedef std::vector<Window*> Windows; | 70 typedef std::vector<Window*> Windows; |
| 69 | 71 |
| 70 explicit Window(WindowDelegate* delegate); | 72 explicit Window(WindowDelegate* delegate); |
| 71 virtual ~Window(); | 73 virtual ~Window(); |
| 72 | 74 |
| 73 // Initializes the window. This creates the window's layer. | 75 // Initializes the window. This creates the window's layer. |
| 74 void Init(ui::LayerType layer_type); | 76 void Init(ui::LayerType layer_type); |
| 75 | 77 |
| 78 // TODO(sky): replace other Init() with this once m32 is more baked. | |
| 79 void InitWithWindowLayerType(WindowLayerType layer_type); | |
| 80 | |
| 76 // Creates a new layer for the window. Erases the layer-owned bounds, so the | 81 // Creates a new layer for the window. Erases the layer-owned bounds, so the |
| 77 // caller may wish to set new bounds and other state on the window/layer. | 82 // caller may wish to set new bounds and other state on the window/layer. |
| 78 // Returns the old layer, which can be used for animations. Caller owns the | 83 // Returns the old layer, which can be used for animations. Caller owns the |
| 79 // memory for the returned layer and must delete it when animation completes. | 84 // memory for the returned layer and must delete it when animation completes. |
| 80 // Returns NULL and does not recreate layer if window does not own its layer. | 85 // Returns NULL and does not recreate layer if window does not own its layer. |
| 81 ui::Layer* RecreateLayer() WARN_UNUSED_RESULT; | 86 ui::Layer* RecreateLayer() WARN_UNUSED_RESULT; |
| 82 | 87 |
| 83 void set_owned_by_parent(bool owned_by_parent) { | 88 void set_owned_by_parent(bool owned_by_parent) { |
| 84 owned_by_parent_ = owned_by_parent; | 89 owned_by_parent_ = owned_by_parent; |
| 85 } | 90 } |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 99 | 104 |
| 100 const base::string16 title() const { return title_; } | 105 const base::string16 title() const { return title_; } |
| 101 void set_title(const base::string16& title) { title_ = title; } | 106 void set_title(const base::string16& title) { title_ = title; } |
| 102 | 107 |
| 103 bool transparent() const { return transparent_; } | 108 bool transparent() const { return transparent_; } |
| 104 void SetTransparent(bool transparent); | 109 void SetTransparent(bool transparent); |
| 105 | 110 |
| 106 WindowDelegate* delegate() { return delegate_; } | 111 WindowDelegate* delegate() { return delegate_; } |
| 107 const WindowDelegate* delegate() const { return delegate_; } | 112 const WindowDelegate* delegate() const { return delegate_; } |
| 108 | 113 |
| 109 const gfx::Rect& bounds() const; | 114 const gfx::Rect& bounds() const { return bounds_; } |
| 110 | 115 |
| 111 Window* parent() { return parent_; } | 116 Window* parent() { return parent_; } |
| 112 const Window* parent() const { return parent_; } | 117 const Window* parent() const { return parent_; } |
| 113 | 118 |
| 114 // Returns the root Window that contains this Window. The root Window is | 119 // Returns the root Window that contains this Window. The root Window is |
| 115 // defined as the Window that has a dispatcher. These functions return NULL if | 120 // defined as the Window that has a dispatcher. These functions return NULL if |
| 116 // the Window is contained in a hierarchy that does not have a dispatcher at | 121 // the Window is contained in a hierarchy that does not have a dispatcher at |
| 117 // its root. | 122 // its root. |
| 118 virtual Window* GetRootWindow(); | 123 virtual Window* GetRootWindow(); |
| 119 virtual const Window* GetRootWindow() const; | 124 virtual const Window* GetRootWindow() const; |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 399 // are honored; otherwise, only bounds checks are performed. | 404 // are honored; otherwise, only bounds checks are performed. |
| 400 Window* GetWindowForPoint(const gfx::Point& local_point, | 405 Window* GetWindowForPoint(const gfx::Point& local_point, |
| 401 bool return_tightest, | 406 bool return_tightest, |
| 402 bool for_event_handling); | 407 bool for_event_handling); |
| 403 | 408 |
| 404 // Implementation of RemoveChild(). If |child| is being removed as the result | 409 // Implementation of RemoveChild(). If |child| is being removed as the result |
| 405 // of an add, |new_parent| is the new parent |child| is going to be parented | 410 // of an add, |new_parent| is the new parent |child| is going to be parented |
| 406 // to. | 411 // to. |
| 407 void RemoveChildImpl(Window* child, Window* new_parent); | 412 void RemoveChildImpl(Window* child, Window* new_parent); |
| 408 | 413 |
| 414 // If this Window has a layer the layer's parent is set to NULL, otherwise | |
| 415 // UnparentLayers() is invoked on all the children. |offset| is the offset | |
| 416 // relative to the nearest ancestor with a layer. | |
| 417 void UnparentLayers(bool has_layerless_ancestor, | |
| 418 const gfx::Vector2d& offset); | |
| 419 | |
| 420 // If this Window has a layer it is added to |parent| and the origin set to | |
| 421 // |offset|. Otherwise this recurses through the children invoking | |
| 422 // ReparentLayers(). The net effect is both setting the parent of layers to | |
| 423 // |parent| as well as updating bounds of windows with a layerless ancestor. | |
| 424 void ReparentLayers(ui::Layer* parent, const gfx::Vector2d& offset); | |
| 425 | |
| 426 // Offsets the first encountered Windows with layers by |offset|. This | |
| 427 // recurses through all layerless Windows, stopping at windows with layers. | |
| 428 void OffsetLayerBounds(const gfx::Vector2d& offset); | |
| 429 | |
| 409 // Called when this window's parent has changed. | 430 // Called when this window's parent has changed. |
| 410 void OnParentChanged(); | 431 void OnParentChanged(); |
| 411 | 432 |
| 412 // Populates |ancestors| with all transient ancestors of |window| that are | 433 // Populates |ancestors| with all transient ancestors of |window| that are |
| 413 // children of |this|. Returns true if any ancestors were found, false if not. | 434 // children of |this|. Returns true if any ancestors were found, false if not. |
| 414 bool GetAllTransientAncestors(Window* window, Windows* ancestors) const; | 435 bool GetAllTransientAncestors(Window* window, Windows* ancestors) const; |
| 415 | 436 |
| 416 // Replaces two windows |window1| and |window2| with their possible transient | 437 // Replaces two windows |window1| and |window2| with their possible transient |
| 417 // ancestors that are still siblings (have a common transient parent). | 438 // ancestors that are still siblings (have a common transient parent). |
| 418 // |window1| and |window2| are not modified if such ancestors cannot be found. | 439 // |window1| and |window2| are not modified if such ancestors cannot be found. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 461 // during the call (by an observer), otherwise true. | 482 // during the call (by an observer), otherwise true. |
| 462 bool NotifyWindowVisibilityChangedAtReceiver(aura::Window* target, | 483 bool NotifyWindowVisibilityChangedAtReceiver(aura::Window* target, |
| 463 bool visible); | 484 bool visible); |
| 464 // Notifies this window and its child hierarchy. Returns false if | 485 // Notifies this window and its child hierarchy. Returns false if |
| 465 // |this| was deleted during the call (by an observer), otherwise | 486 // |this| was deleted during the call (by an observer), otherwise |
| 466 // true. | 487 // true. |
| 467 bool NotifyWindowVisibilityChangedDown(aura::Window* target, bool visible); | 488 bool NotifyWindowVisibilityChangedDown(aura::Window* target, bool visible); |
| 468 // Notifies this window and its parent hierarchy. | 489 // Notifies this window and its parent hierarchy. |
| 469 void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible); | 490 void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible); |
| 470 | 491 |
| 471 // Invoked from the closure returned by PrepareForLayerBoundsChange() after | 492 // Invoked when the bounds of the window changes. This may be invoked directly |
| 472 // the bounds of the layer has changed. |old_bounds| is the previous bounds of | 493 // by us, or from the closure returned by PrepareForLayerBoundsChange() after |
| 473 // the layer, and |contained_mouse| is true if the mouse was previously within | 494 // the bounds of the layer has changed. |old_bounds| is the previous bounds, |
| 474 // the window's bounds. | 495 // and |contained_mouse| is true if the mouse was previously within the |
| 475 void OnLayerBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); | 496 // window's bounds. |
| 497 void OnWindowBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); | |
| 476 | 498 |
| 477 // Overridden from ui::LayerDelegate: | 499 // Overridden from ui::LayerDelegate: |
| 478 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; | 500 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; |
| 479 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; | 501 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; |
| 480 | 502 |
| 481 // Overridden from ui::EventTarget: | 503 // Overridden from ui::EventTarget: |
| 482 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; | 504 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; |
| 483 virtual EventTarget* GetParentTarget() OVERRIDE; | 505 virtual EventTarget* GetParentTarget() OVERRIDE; |
| 484 | 506 |
| 485 // Updates the layer name with a name based on the window's name and id. | 507 // Updates the layer name with a name based on the window's name and id. |
| 486 void UpdateLayerName(const std::string& name); | 508 void UpdateLayerName(const std::string& name); |
| 487 | 509 |
| 488 // Returns true if the mouse is currently within our bounds. | 510 // Returns true if the mouse is currently within our bounds. |
| 489 bool ContainsMouse(); | 511 bool ContainsMouse(); |
| 490 | 512 |
| 513 // Returns the first ancestor (starting at |this|) with a layer. |offset| is | |
| 514 // set to the offset from |this| to the first ancestor with a layer. | |
| 515 Window* GetAncestorWithLayer(gfx::Vector2d* offset) { | |
| 516 return const_cast<Window*>( | |
| 517 const_cast<const Window*>(this)->GetAncestorWithLayer(offset)); | |
| 518 } | |
| 519 const Window* GetAncestorWithLayer(gfx::Vector2d* offset) const; | |
| 520 | |
| 521 bool is_layerless() const { return window_layer_type_ == WINDOW_LAYER_NONE; } | |
|
Ben Goodger (Google)
2013/11/22 05:49:24
Isn't NULL-checking layer() sufficient?
sky
2013/11/22 20:20:12
I was a bit worried about a comment in the destruc
| |
| 522 | |
| 523 WindowLayerType window_layer_type_; | |
| 524 | |
| 525 // Bounds of this window relative to the parent. This is cached as the bounds | |
| 526 // of the Layer and Window are not necessarily the same. In particular bounds | |
| 527 // of the Layer are relative to the first ancestor with a Layer, where as this | |
| 528 // is relative to the parent Window. | |
| 529 gfx::Rect bounds_; | |
| 530 | |
| 491 WindowEventDispatcher* dispatcher_; | 531 WindowEventDispatcher* dispatcher_; |
| 492 | 532 |
| 493 client::WindowType type_; | 533 client::WindowType type_; |
| 494 | 534 |
| 495 // True if the Window is owned by its parent - i.e. it will be deleted by its | 535 // True if the Window is owned by its parent - i.e. it will be deleted by its |
| 496 // parent during its parents destruction. True is the default. | 536 // parent during its parents destruction. True is the default. |
| 497 bool owned_by_parent_; | 537 bool owned_by_parent_; |
| 498 | 538 |
| 499 WindowDelegate* delegate_; | 539 WindowDelegate* delegate_; |
| 500 | 540 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 547 }; | 587 }; |
| 548 | 588 |
| 549 std::map<const void*, Value> prop_map_; | 589 std::map<const void*, Value> prop_map_; |
| 550 | 590 |
| 551 DISALLOW_COPY_AND_ASSIGN(Window); | 591 DISALLOW_COPY_AND_ASSIGN(Window); |
| 552 }; | 592 }; |
| 553 | 593 |
| 554 } // namespace aura | 594 } // namespace aura |
| 555 | 595 |
| 556 #endif // UI_AURA_WINDOW_H_ | 596 #endif // UI_AURA_WINDOW_H_ |
| OLD | NEW |