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_VIEWS_WIDGET_NATIVE_WIDGET_DELEGATE_H_ 6 #define UI_VIEWS_WIDGET_NATIVE_WIDGET_DELEGATE_H_ 7 8 #include <vector> 9 10 #include "ui/events/event_constants.h" 11 #include "ui/views/views_export.h" 12 13 namespace gfx { 14 class Canvas; 15 class Path; 16 class Point; 17 class Size; 18 } 19 20 namespace ui { 21 class GestureEvent; 22 class KeyEvent; 23 class Layer; 24 class MouseEvent; 25 class TouchEvent; 26 class ScrollEvent; 27 } 28 29 namespace views { 30 class InputMethod; 31 class Widget; 32 33 namespace internal { 34 35 //////////////////////////////////////////////////////////////////////////////// 36 // NativeWidgetDelegate 37 // 38 // An interface implemented by the object that handles events sent by a 39 // NativeWidget implementation. 40 // 41 class VIEWS_EXPORT NativeWidgetDelegate { 42 public: ~NativeWidgetDelegate()43 virtual ~NativeWidgetDelegate() {} 44 45 // Returns true if the window is modal. 46 virtual bool IsModal() const = 0; 47 48 // Returns true if the window is a dialog box. 49 virtual bool IsDialogBox() const = 0; 50 51 // Returns true if the window can be activated. 52 virtual bool CanActivate() const = 0; 53 54 virtual bool IsInactiveRenderingDisabled() const = 0; 55 virtual void EnableInactiveRendering() = 0; 56 57 // Called when the activation state of a window has changed. 58 virtual void OnNativeWidgetActivationChanged(bool active) = 0; 59 60 // Called when native focus moves from one native view to another. 61 virtual void OnNativeFocus(gfx::NativeView focused_view) = 0; 62 virtual void OnNativeBlur(gfx::NativeView focused_view) = 0; 63 64 // Called when the window is about to be shown/hidden. 65 virtual void OnNativeWidgetVisibilityChanging(bool visible) = 0; 66 67 // Called when the window is shown/hidden. 68 virtual void OnNativeWidgetVisibilityChanged(bool visible) = 0; 69 70 // Called when the native widget is created. 71 // The |desktop_widget| bool is true for widgets created in the desktop and 72 // false for widgets created in the shell. 73 virtual void OnNativeWidgetCreated(bool desktop_widget) = 0; 74 75 // Called just before the native widget is destroyed. This is the delegate's 76 // last chance to do anything with the native widget handle. 77 virtual void OnNativeWidgetDestroying() = 0; 78 79 // Called just after the native widget is destroyed. 80 virtual void OnNativeWidgetDestroyed() = 0; 81 82 // Returns the smallest size the window can be resized to by the user. 83 virtual gfx::Size GetMinimumSize() const = 0; 84 85 // Returns the largest size the window can be resized to by the user. 86 virtual gfx::Size GetMaximumSize() const = 0; 87 88 // Called when the NativeWidget changed position. 89 virtual void OnNativeWidgetMove() = 0; 90 91 // Called when the NativeWidget changed size to |new_size|. 92 virtual void OnNativeWidgetSizeChanged(const gfx::Size& new_size) = 0; 93 94 // Called when the user begins/ends to change the bounds of the window. 95 virtual void OnNativeWidgetBeginUserBoundsChange() = 0; 96 virtual void OnNativeWidgetEndUserBoundsChange() = 0; 97 98 // Returns true if the delegate has a FocusManager. 99 virtual bool HasFocusManager() const = 0; 100 101 // Paints the widget using acceleration. If the widget is not using 102 // accelerated painting this returns false and does nothing. 103 virtual bool OnNativeWidgetPaintAccelerated( 104 const gfx::Rect& dirty_region) = 0; 105 106 // Paints the rootview in the canvas. This will also refresh the compositor 107 // tree if necessary when accelerated painting is enabled. 108 virtual void OnNativeWidgetPaint(gfx::Canvas* canvas) = 0; 109 110 // Returns the non-client component (see ui/base/hit_test.h) containing 111 // |point|, in client coordinates. 112 virtual int GetNonClientComponent(const gfx::Point& point) = 0; 113 114 // Mouse and key event handlers. 115 virtual void OnKeyEvent(ui::KeyEvent* event) = 0; 116 virtual void OnMouseEvent(ui::MouseEvent* event) = 0; 117 virtual void OnMouseCaptureLost() = 0; 118 119 virtual void OnScrollEvent(ui::ScrollEvent* event) = 0; 120 virtual void OnGestureEvent(ui::GestureEvent* event) = 0; 121 122 // Runs the specified native command. Returns true if the command is handled. 123 virtual bool ExecuteCommand(int command_id) = 0; 124 125 // Returns the input method of the widget this delegate is associated with. 126 // Note that this does not use the top level widget, so may return NULL 127 // if the widget doesn't have input method. 128 virtual InputMethod* GetInputMethodDirect() = 0; 129 130 // Returns the child Layers of the Widgets layer that were created by Views. 131 virtual const std::vector<ui::Layer*>& GetRootLayers() = 0; 132 133 // Returns true if window has a hit-test mask. 134 virtual bool HasHitTestMask() const = 0; 135 136 // Provides the hit-test mask if HasHitTestMask above returns true. 137 virtual void GetHitTestMask(gfx::Path* mask) const = 0; 138 139 // 140 virtual Widget* AsWidget() = 0; 141 virtual const Widget* AsWidget() const = 0; 142 143 // Sets-up the focus manager with the view that should have focus when the 144 // window is shown the first time. It takes the intended |show_state| of the 145 // window in order to decide whether the window should be focused now or 146 // later. Returns true if the initial focus has been set or the window should 147 // not set the initial focus, or false if the caller should set the initial 148 // focus (if any). 149 virtual bool SetInitialFocus(ui::WindowShowState show_state) = 0; 150 }; 151 152 } // namespace internal 153 } // namespace views 154 155 #endif // UI_VIEWS_WIDGET_NATIVE_WIDGET_DELEGATE_H_ 156