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 #ifndef UI_AURA_WINDOW_DELEGATE_H_ 6 #define UI_AURA_WINDOW_DELEGATE_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/memory/ref_counted.h" 10 #include "ui/aura/aura_export.h" 11 #include "ui/events/event_constants.h" 12 #include "ui/events/event_handler.h" 13 #include "ui/gfx/native_widget_types.h" 14 15 namespace gfx { 16 class Canvas; 17 class Path; 18 class Point; 19 class Rect; 20 class Size; 21 } 22 23 namespace ui { 24 class GestureEvent; 25 class KeyEvent; 26 class Layer; 27 class MouseEvent; 28 class Texture; 29 class TouchEvent; 30 } 31 32 namespace aura { 33 34 // Delegate interface for aura::Window. 35 class AURA_EXPORT WindowDelegate : public ui::EventHandler { 36 public: 37 // Returns the window's minimum size, or size 0,0 if there is no limit. 38 virtual gfx::Size GetMinimumSize() const = 0; 39 40 // Returns the window's maximum size, or size 0,0 if there is no limit. 41 virtual gfx::Size GetMaximumSize() const = 0; 42 43 // Called when the Window's position and/or size changes. 44 virtual void OnBoundsChanged(const gfx::Rect& old_bounds, 45 const gfx::Rect& new_bounds) = 0; 46 47 // Returns the native cursor for the specified point, in window coordinates, 48 // or NULL for the default cursor. 49 virtual gfx::NativeCursor GetCursor(const gfx::Point& point) = 0; 50 51 // Returns the non-client component (see hit_test.h) containing |point|, in 52 // window coordinates. 53 virtual int GetNonClientComponent(const gfx::Point& point) const = 0; 54 55 // Returns true if event handling should descend into |child|. |location| is 56 // in terms of the Window. 57 virtual bool ShouldDescendIntoChildForEventHandling( 58 Window* child, 59 const gfx::Point& location) = 0; 60 61 // Returns true of the window can be focused. 62 virtual bool CanFocus() = 0; 63 64 // Invoked when mouse capture is lost on the window. 65 virtual void OnCaptureLost() = 0; 66 67 // Asks the delegate to paint window contents into the supplied canvas. 68 virtual void OnPaint(gfx::Canvas* canvas) = 0; 69 70 // Called when the window's device scale factor has changed. 71 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) = 0; 72 73 // Called from Window's destructor before OnWindowDestroyed and before the 74 // children have been destroyed and the window has been removed from its 75 // parent. 76 virtual void OnWindowDestroying() = 0; 77 78 // Called when the Window has been destroyed (i.e. from its destructor). This 79 // is called after OnWindowDestroying and after the children have been 80 // deleted and the window has been removed from its parent. 81 // The delegate can use this as an opportunity to delete itself if necessary. 82 virtual void OnWindowDestroyed() = 0; 83 84 // Called when the TargetVisibility() of a Window changes. |visible| 85 // corresponds to the target visibility of the window. See 86 // Window::TargetVisibility() for details. 87 virtual void OnWindowTargetVisibilityChanged(bool visible) = 0; 88 89 // Called from Window::HitTest to check if the window has a custom hit test 90 // mask. It works similar to the views counterparts. That is, if the function 91 // returns true, GetHitTestMask below will be called to get the mask. 92 // Otherwise, Window will hit-test against its bounds. 93 virtual bool HasHitTestMask() const = 0; 94 95 // Called from Window::HitTest to retrieve hit test mask when HasHitTestMask 96 // above returns true. 97 virtual void GetHitTestMask(gfx::Path* mask) const = 0; 98 99 // Called from RecreateLayer() after the new layer was created. old_layer is 100 // the layer that will be returned to the caller of RecreateLayer, new_layer 101 // will be the layer now used on the Window. The implementation only has to do 102 // anything if the layer has external content (SetExternalTexture / 103 // SetTextureMailbox / SetDelegatedFrame was called). 104 virtual void DidRecreateLayer(ui::Layer* old_layer, ui::Layer* new_layer) = 0; 105 106 protected: 107 virtual ~WindowDelegate() {} 108 }; 109 110 } // namespace aura 111 112 #endif // UI_AURA_WINDOW_DELEGATE_H_ 113