| 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/event_targeter.h" | 27 #include "ui/events/event_targeter.h" |
| 27 #include "ui/events/gestures/gesture_types.h" | 28 #include "ui/events/gestures/gesture_types.h" |
| 28 #include "ui/gfx/insets.h" | 29 #include "ui/gfx/insets.h" |
| 29 #include "ui/gfx/native_widget_types.h" | 30 #include "ui/gfx/native_widget_types.h" |
| 30 #include "ui/gfx/rect.h" | 31 #include "ui/gfx/rect.h" |
| 31 | 32 |
| 32 namespace gfx { | 33 namespace gfx { |
| 33 class Display; | 34 class Display; |
| 34 class Transform; | 35 class Transform; |
| 36 class Vector2d; |
| 35 } | 37 } |
| 36 | 38 |
| 37 namespace ui { | 39 namespace ui { |
| 38 class EventHandler; | 40 class EventHandler; |
| 39 class Layer; | 41 class Layer; |
| 40 class Texture; | 42 class Texture; |
| 41 } | 43 } |
| 42 | 44 |
| 43 namespace aura { | 45 namespace aura { |
| 44 | 46 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 67 public ui::GestureConsumer { | 69 public ui::GestureConsumer { |
| 68 public: | 70 public: |
| 69 typedef std::vector<Window*> Windows; | 71 typedef std::vector<Window*> Windows; |
| 70 | 72 |
| 71 explicit Window(WindowDelegate* delegate); | 73 explicit Window(WindowDelegate* delegate); |
| 72 virtual ~Window(); | 74 virtual ~Window(); |
| 73 | 75 |
| 74 // Initializes the window. This creates the window's layer. | 76 // Initializes the window. This creates the window's layer. |
| 75 void Init(ui::LayerType layer_type); | 77 void Init(ui::LayerType layer_type); |
| 76 | 78 |
| 79 // TODO(sky): replace other Init() with this once m32 is more baked. |
| 80 void InitWithWindowLayerType(WindowLayerType layer_type); |
| 81 |
| 77 // Creates a new layer for the window. Erases the layer-owned bounds, so the | 82 // Creates a new layer for the window. Erases the layer-owned bounds, so the |
| 78 // caller may wish to set new bounds and other state on the window/layer. | 83 // caller may wish to set new bounds and other state on the window/layer. |
| 79 // Returns the old layer, which can be used for animations. Caller owns the | 84 // Returns the old layer, which can be used for animations. Caller owns the |
| 80 // memory for the returned layer and must delete it when animation completes. | 85 // memory for the returned layer and must delete it when animation completes. |
| 81 // Returns NULL and does not recreate layer if window does not own its layer. | 86 // Returns NULL and does not recreate layer if window does not own its layer. |
| 82 ui::Layer* RecreateLayer() WARN_UNUSED_RESULT; | 87 ui::Layer* RecreateLayer() WARN_UNUSED_RESULT; |
| 83 | 88 |
| 84 void set_owned_by_parent(bool owned_by_parent) { | 89 void set_owned_by_parent(bool owned_by_parent) { |
| 85 owned_by_parent_ = owned_by_parent; | 90 owned_by_parent_ = owned_by_parent; |
| 86 } | 91 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 100 | 105 |
| 101 const base::string16 title() const { return title_; } | 106 const base::string16 title() const { return title_; } |
| 102 void set_title(const base::string16& title) { title_ = title; } | 107 void set_title(const base::string16& title) { title_ = title; } |
| 103 | 108 |
| 104 bool transparent() const { return transparent_; } | 109 bool transparent() const { return transparent_; } |
| 105 void SetTransparent(bool transparent); | 110 void SetTransparent(bool transparent); |
| 106 | 111 |
| 107 WindowDelegate* delegate() { return delegate_; } | 112 WindowDelegate* delegate() { return delegate_; } |
| 108 const WindowDelegate* delegate() const { return delegate_; } | 113 const WindowDelegate* delegate() const { return delegate_; } |
| 109 | 114 |
| 110 const gfx::Rect& bounds() const; | 115 const gfx::Rect& bounds() const { return bounds_; } |
| 111 | 116 |
| 112 Window* parent() { return parent_; } | 117 Window* parent() { return parent_; } |
| 113 const Window* parent() const { return parent_; } | 118 const Window* parent() const { return parent_; } |
| 114 | 119 |
| 115 // Returns the root Window that contains this Window. The root Window is | 120 // Returns the root Window that contains this Window. The root Window is |
| 116 // defined as the Window that has a dispatcher. These functions return NULL if | 121 // defined as the Window that has a dispatcher. These functions return NULL if |
| 117 // the Window is contained in a hierarchy that does not have a dispatcher at | 122 // the Window is contained in a hierarchy that does not have a dispatcher at |
| 118 // its root. | 123 // its root. |
| 119 virtual Window* GetRootWindow(); | 124 virtual Window* GetRootWindow(); |
| 120 virtual const Window* GetRootWindow() const; | 125 virtual const Window* GetRootWindow() const; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 // are honored; otherwise, only bounds checks are performed. | 409 // are honored; otherwise, only bounds checks are performed. |
| 405 Window* GetWindowForPoint(const gfx::Point& local_point, | 410 Window* GetWindowForPoint(const gfx::Point& local_point, |
| 406 bool return_tightest, | 411 bool return_tightest, |
| 407 bool for_event_handling); | 412 bool for_event_handling); |
| 408 | 413 |
| 409 // Implementation of RemoveChild(). If |child| is being removed as the result | 414 // Implementation of RemoveChild(). If |child| is being removed as the result |
| 410 // of an add, |new_parent| is the new parent |child| is going to be parented | 415 // of an add, |new_parent| is the new parent |child| is going to be parented |
| 411 // to. | 416 // to. |
| 412 void RemoveChildImpl(Window* child, Window* new_parent); | 417 void RemoveChildImpl(Window* child, Window* new_parent); |
| 413 | 418 |
| 419 // If this Window has a layer the layer's parent is set to NULL, otherwise |
| 420 // UnparentLayers() is invoked on all the children. |offset| is the offset |
| 421 // relative to the nearest ancestor with a layer. |
| 422 void UnparentLayers(bool has_layerless_ancestor, |
| 423 const gfx::Vector2d& offset); |
| 424 |
| 425 // If this Window has a layer it is added to |parent| and the origin set to |
| 426 // |offset|. Otherwise this recurses through the children invoking |
| 427 // ReparentLayers(). The net effect is both setting the parent of layers to |
| 428 // |parent| as well as updating bounds of windows with a layerless ancestor. |
| 429 void ReparentLayers(ui::Layer* parent, const gfx::Vector2d& offset); |
| 430 |
| 431 // Offsets the first encountered Windows with layers by |offset|. This |
| 432 // recurses through all layerless Windows, stopping at windows with layers. |
| 433 void OffsetLayerBounds(const gfx::Vector2d& offset); |
| 434 |
| 414 // Called when this window's parent has changed. | 435 // Called when this window's parent has changed. |
| 415 void OnParentChanged(); | 436 void OnParentChanged(); |
| 416 | 437 |
| 417 // Populates |ancestors| with all transient ancestors of |window| that are | 438 // Populates |ancestors| with all transient ancestors of |window| that are |
| 418 // children of |this|. Returns true if any ancestors were found, false if not. | 439 // children of |this|. Returns true if any ancestors were found, false if not. |
| 419 bool GetAllTransientAncestors(Window* window, Windows* ancestors) const; | 440 bool GetAllTransientAncestors(Window* window, Windows* ancestors) const; |
| 420 | 441 |
| 421 // Replaces two windows |window1| and |window2| with their possible transient | 442 // Replaces two windows |window1| and |window2| with their possible transient |
| 422 // ancestors that are still siblings (have a common transient parent). | 443 // ancestors that are still siblings (have a common transient parent). |
| 423 // |window1| and |window2| are not modified if such ancestors cannot be found. | 444 // |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... |
| 466 // during the call (by an observer), otherwise true. | 487 // during the call (by an observer), otherwise true. |
| 467 bool NotifyWindowVisibilityChangedAtReceiver(aura::Window* target, | 488 bool NotifyWindowVisibilityChangedAtReceiver(aura::Window* target, |
| 468 bool visible); | 489 bool visible); |
| 469 // Notifies this window and its child hierarchy. Returns false if | 490 // Notifies this window and its child hierarchy. Returns false if |
| 470 // |this| was deleted during the call (by an observer), otherwise | 491 // |this| was deleted during the call (by an observer), otherwise |
| 471 // true. | 492 // true. |
| 472 bool NotifyWindowVisibilityChangedDown(aura::Window* target, bool visible); | 493 bool NotifyWindowVisibilityChangedDown(aura::Window* target, bool visible); |
| 473 // Notifies this window and its parent hierarchy. | 494 // Notifies this window and its parent hierarchy. |
| 474 void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible); | 495 void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible); |
| 475 | 496 |
| 476 // Invoked from the closure returned by PrepareForLayerBoundsChange() after | 497 // Invoked when the bounds of the window changes. This may be invoked directly |
| 477 // the bounds of the layer has changed. |old_bounds| is the previous bounds of | 498 // by us, or from the closure returned by PrepareForLayerBoundsChange() after |
| 478 // the layer, and |contained_mouse| is true if the mouse was previously within | 499 // the bounds of the layer has changed. |old_bounds| is the previous bounds, |
| 479 // the window's bounds. | 500 // and |contained_mouse| is true if the mouse was previously within the |
| 480 void OnLayerBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); | 501 // window's bounds. |
| 502 void OnWindowBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse); |
| 481 | 503 |
| 482 // Overridden from ui::LayerDelegate: | 504 // Overridden from ui::LayerDelegate: |
| 483 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; | 505 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; |
| 484 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; | 506 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; |
| 485 | 507 |
| 486 // Overridden from ui::EventTarget: | 508 // Overridden from ui::EventTarget: |
| 487 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; | 509 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; |
| 488 virtual EventTarget* GetParentTarget() OVERRIDE; | 510 virtual EventTarget* GetParentTarget() OVERRIDE; |
| 489 virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; | 511 virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; |
| 490 virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; | 512 virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; |
| 491 virtual void ConvertEventToTarget(ui::EventTarget* target, | 513 virtual void ConvertEventToTarget(ui::EventTarget* target, |
| 492 ui::LocatedEvent* event) OVERRIDE; | 514 ui::LocatedEvent* event) OVERRIDE; |
| 493 | 515 |
| 494 // Updates the layer name with a name based on the window's name and id. | 516 // Updates the layer name with a name based on the window's name and id. |
| 495 void UpdateLayerName(const std::string& name); | 517 void UpdateLayerName(const std::string& name); |
| 496 | 518 |
| 497 // Returns true if the mouse is currently within our bounds. | 519 // Returns true if the mouse is currently within our bounds. |
| 498 bool ContainsMouse(); | 520 bool ContainsMouse(); |
| 499 | 521 |
| 522 // Returns the first ancestor (starting at |this|) with a layer. |offset| is |
| 523 // set to the offset from |this| to the first ancestor with a layer. |
| 524 Window* GetAncestorWithLayer(gfx::Vector2d* offset) { |
| 525 return const_cast<Window*>( |
| 526 const_cast<const Window*>(this)->GetAncestorWithLayer(offset)); |
| 527 } |
| 528 const Window* GetAncestorWithLayer(gfx::Vector2d* offset) const; |
| 529 |
| 530 // Bounds of this window relative to the parent. This is cached as the bounds |
| 531 // of the Layer and Window are not necessarily the same. In particular bounds |
| 532 // of the Layer are relative to the first ancestor with a Layer, where as this |
| 533 // is relative to the parent Window. |
| 534 gfx::Rect bounds_; |
| 535 |
| 500 WindowEventDispatcher* dispatcher_; | 536 WindowEventDispatcher* dispatcher_; |
| 501 | 537 |
| 502 client::WindowType type_; | 538 client::WindowType type_; |
| 503 | 539 |
| 504 // True if the Window is owned by its parent - i.e. it will be deleted by its | 540 // True if the Window is owned by its parent - i.e. it will be deleted by its |
| 505 // parent during its parents destruction. True is the default. | 541 // parent during its parents destruction. True is the default. |
| 506 bool owned_by_parent_; | 542 bool owned_by_parent_; |
| 507 | 543 |
| 508 WindowDelegate* delegate_; | 544 WindowDelegate* delegate_; |
| 509 | 545 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 }; | 593 }; |
| 558 | 594 |
| 559 std::map<const void*, Value> prop_map_; | 595 std::map<const void*, Value> prop_map_; |
| 560 | 596 |
| 561 DISALLOW_COPY_AND_ASSIGN(Window); | 597 DISALLOW_COPY_AND_ASSIGN(Window); |
| 562 }; | 598 }; |
| 563 | 599 |
| 564 } // namespace aura | 600 } // namespace aura |
| 565 | 601 |
| 566 #endif // UI_AURA_WINDOW_H_ | 602 #endif // UI_AURA_WINDOW_H_ |
| OLD | NEW |