Crazy Eddie's GUI System 0.8.7
Loading...
Searching...
No Matches
GUIContext.h
1/***********************************************************************
2 created: Mon Jan 12 2009
3 author: Paul D Turner
4*************************************************************************/
5/***************************************************************************
6 * Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining
9 * a copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be
17 * included in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 ***************************************************************************/
27#ifndef _CEGUIGUIContext_h_
28#define _CEGUIGUIContext_h_
29
30#include "CEGUI/RenderingSurface.h"
31#include "CEGUI/InjectedInputReceiver.h"
32#include "CEGUI/MouseCursor.h"
33#include "CEGUI/SystemKeys.h"
34
35#if defined (_MSC_VER)
36# pragma warning(push)
37# pragma warning(disable : 4251)
38#endif
39
40namespace CEGUI
41{
42struct MouseClickTracker;
43
45class CEGUIEXPORT GUIContextEventArgs : public EventArgs
46{
47public:
49 context(context)
50 {}
51
54};
55
58{
59public:
61 GUIContextEventArgs(context),
62 renderTarget(target)
63 {}
64
65 RenderTarget* renderTarget;
66};
67
68class CEGUIEXPORT GUIContext : public RenderingSurface,
70{
71public:
72 static const float DefaultMouseButtonClickTimeout;
73 static const float DefaultMouseButtonMultiClickTimeout;
74 static const Sizef DefaultMouseButtonMultiClickTolerance;
75
109
110 GUIContext(RenderTarget& target);
111 ~GUIContext();
112
113 Window* getRootWindow() const;
114 void setRootWindow(Window* new_root);
115
124 void setModalWindow(Window* window);
125
128
129 Window* getWindowContainingMouse() const;
130
131 const Sizef& getSurfaceSize() const;
132
133 const SystemKeys& getSystemKeys() const;
134
137 bool isDirty() const;
138
151 const MouseCursor& getMouseCursor() const;
152
153 void setMouseMoveScalingFactor(float factor);
154 float getMouseMoveScalingFactor() const;
155
156 void setMouseButtonClickTimeout(float seconds);
157 float getMouseButtonClickTimeout() const;
158
159 void setMouseButtonMultiClickTimeout(float seconds);
160 float getMouseButtonMultiClickTimeout() const;
161
162 void setMouseButtonMultiClickTolerance(const Sizef& sz);
163 const Sizef& getMouseButtonMultiClickTolerance() const;
164
178 void setMouseClickEventGenerationEnabled(const bool enable);
179
194
197
198 Window* getInputCaptureWindow() const;
199 void setInputCaptureWindow(Window* window);
200
216
230
233
234 void setRenderTarget(RenderTarget& target);
235
244 void setDefaultFont(const String& name);
245
253 void setDefaultFont(Font* font);
254
263
264 // Implementation of InjectedInputReceiver interface
265 bool injectMouseMove(float delta_x, float delta_y);
269 bool injectKeyDown(Key::Scan scan_code);
270 bool injectKeyUp(Key::Scan scan_code);
273 bool injectMousePosition(float x_pos, float y_pos);
281
282 // public overrides
283 void draw();
284
285protected:
286 void updateRootWindowAreaRects() const;
287 void drawWindowContentToTarget();
288 void renderWindowHierarchyToSurfaces();
289
290 void createDefaultTooltipWindowInstance() const;
291 void destroyDefaultTooltipWindowInstance();
292
295
296 bool mouseMoveInjection_impl(MouseEventArgs& ma);
297 Window* getTargetWindow(const Vector2f& pt, const bool allow_disabled) const;
298 Window* getKeyboardTargetWindow() const;
299 Window* getCommonAncestor(Window* w1, Window* w2) const;
302 void (Window::*func)(MouseEventArgs&),
304
305 bool areaChangedHandler(const EventArgs& args);
306 bool windowDestroyedHandler(const EventArgs& args);
307
310 void resetWindowContainingMouse();
311
312 // event trigger functions.
313 virtual void onRootWindowChanged(WindowEventArgs& args);
314 virtual void onMouseMoveScalingFactorChanged(GUIContextEventArgs& args);
315 virtual void onMouseButtonClickTimeoutChanged(GUIContextEventArgs& args);
316 virtual void onMouseButtonMultiClickTimeoutChanged(GUIContextEventArgs& args);
317 virtual void onMouseButtonMultiClickToleranceChanged(GUIContextEventArgs& args);
318 virtual void onRenderTargetChanged(GUIContextRenderTargetEventArgs& args);
319 virtual void onDefaultFontChanged(EventArgs& args);
320
321 // protected overrides
323
324 Window* d_rootWindow;
325 bool d_isDirty;
326 MouseCursor d_mouseCursor;
337
338 mutable Tooltip* d_defaultTooltipObject;
339 mutable bool d_weCreatedTooltipObject;
340 String d_defaultTooltipType;
341
342 Font* d_defaultFont;
343
346
347 mutable Window* d_windowContainingMouse;
348 mutable bool d_windowContainingMouseIsUpToDate;
349 Window* d_modalWindow;
350 Window* d_captureWindow;
351
352 SystemKeys d_systemKeys;
353 MouseClickTracker* d_mouseClickTrackers;
354
355 Event::ScopedConnection d_areaChangedEventConnection;
356 Event::ScopedConnection d_windowDestroyedEventConnection;
357};
358
359}
360
361#if defined(_MSC_VER)
362# pragma warning(pop)
363#endif
364
365#endif
366
Base class used as the argument to all subscribers Event object.
Definition EventArgs.h:51
Event::Connection wrapper that automatically disconnects the connection when the object is deleted (o...
Definition Event.h:92
Class that encapsulates a typeface.
Definition Font.h:62
EventArgs class passed to subscribers for (most) GUIContext events.
Definition GUIContext.h:46
GUIContext * context
pointer to the GUIContext that triggered the event.
Definition GUIContext.h:53
EventArgs class passed for GUIContext RenderTarget related events.
Definition GUIContext.h:58
Definition GUIContext.h:70
bool injectMouseButtonClick(const MouseButton button)
Function to directly inject a mouse button click event.
Sizef d_mouseButtonMultiClickTolerance
Movement tolerance used when detecting multi-click events.
Definition GUIContext.h:336
float d_mouseButtonMultiClickTimeout
Timeout used when detecting multi-click events.
Definition GUIContext.h:334
bool injectKeyDown(Key::Scan scan_code)
Function that injects a key down event into the receiver.
void setDefaultTooltipObject(Tooltip *tooltip)
Set the default Tooltip object for this GUIContext. This value may be 0 to indicate that no default T...
bool injectMouseButtonTripleClick(const MouseButton button)
Function to directly inject a mouse button triple-click event.
bool injectChar(String::value_type code_point)
Function that injects a typed character event into the receiver.
bool injectMousePosition(float x_pos, float y_pos)
Function that injects a new position for the mouse cursor.
bool injectKeyUp(Key::Scan scan_code)
Function that injects a key up event into the receiver.
static const String EventDefaultFontChanged
Definition GUIContext.h:108
float d_mouseMovementScalingFactor
Scaling factor applied to injected mouse move deltas.
Definition GUIContext.h:328
static const String EventRootWindowChanged
Definition GUIContext.h:82
static const String EventMouseButtonMultiClickTimeoutChanged
Definition GUIContext.h:94
void setMouseClickEventGenerationEnabled(const bool enable)
Set whether automatic mouse button click and multi-click (i.e. double-click and treble-click) event g...
bool injectPasteRequest()
Tells the system to perform a clipboard paste operation.
static const String EventRenderTargetChanged
Definition GUIContext.h:104
Window * getModalWindow() const
Return a pointer to the Window that is currently set as modal.
void notifyMouseTransition(Window *top, Window *bottom, void(Window::*func)(MouseEventArgs &), MouseEventArgs &args) const
call some function for a chain of windows: (top, bottom]
void setDefaultFont(Font *font)
Set the default font to be used by the GUIContext.
Font * getDefaultFont() const
Return a pointer to the default Font for the GUIContext.
bool injectMouseWheelChange(float delta)
Function that injects a mouse-wheel / scroll-wheel event into the receiver.
void setDefaultFont(const String &name)
Set the default font to be used by the GUIContext.
bool injectCopyRequest()
Tells the receiver to perform a clipboard copy operation.
static const String EventMouseButtonClickTimeoutChanged
Definition GUIContext.h:90
void setDefaultTooltipType(const String &tooltip_type)
Set the default Tooltip to be used by specifying a Window type.
Sizef d_surfaceSize
a cache of the target surface size, allows returning by ref.
Definition GUIContext.h:345
bool isMouseClickEventGenerationEnabled() const
Return whether automatic mouse button click and multi-click (i.e. double-click and treble-click) even...
float d_mouseButtonClickTimeout
Timeout used to when detecting a single-click.
Definition GUIContext.h:332
MouseCursor & getMouseCursor()
Retrieves MouseCursor used in this GUIContext.
void updateWindowContainingMouse()
Tell the context to reconsider which window it thinks the mouse is in.
bool injectMouseButtonDown(MouseButton button)
Function that injects a mouse button down event into the receiver.
void draw()
Draw the GeometryBuffers for all rendering queues to the RenderTarget that this RenderingSurface is t...
bool injectTimePulse(float timeElapsed)
Function to inject time pulses into the receiver.
void setModalWindow(Window *window)
Internal function to directly set the current modal window.
void notifyDefaultFontChanged(Window *hierarchy_root) const
notify windows in a hierarchy using default font, when font changes.
void markAsDirty()
call to indicate that some redrawing is required.
bool injectCutRequest()
Tells the system to perform a clipboard cut operation.
bool injectMouseMove(float delta_x, float delta_y)
Function that injects a mouse movement event into the receiver.
bool updateWindowContainingMouse_impl() const
returns whether the window containing the mouse had changed.
bool d_generateMouseClickEvents
should mouse click/multi-click events be automatically generated.
Definition GUIContext.h:330
static const String EventMouseMoveScalingFactorChanged
Definition GUIContext.h:86
bool injectMouseLeaves(void)
Function that notifies that the mouse has left the host area that the receiver receives input for.
bool injectMouseButtonUp(MouseButton button)
Function that injects a mouse button up event into the receiver.
bool injectMouseButtonDoubleClick(const MouseButton button)
Function to directly inject a mouse button double-click event.
Tooltip * getDefaultTooltipObject() const
Returns a pointer to the context's default tooltip object. May return 0.
static const String EventMouseButtonMultiClickToleranceChanged
Definition GUIContext.h:99
Input injection interface to be inplemented by classes that take raw inputs.
Definition InjectedInputReceiver.h:37
Class that provides mouse cursor support.
Definition MouseCursor.h:54
EventArgs based class that is used for objects passed to input event handlers concerning mouse input.
Definition InputEvent.h:281
Defines interface to some surface that can be rendered to. Concrete instances of objects that impleme...
Definition RenderTarget.h:60
Class that represents a surface that can have geometry based imagery drawn to it.
Definition RenderingSurface.h:111
String class used within the GUI system.
Definition String.h:64
utf32 value_type
Basic 'code point' type used for String (utf32)
Definition String.h:69
Definition SystemKeys.h:35
Base class for Tooltip widgets.
Definition widgets/Tooltip.h:80
base class for properties able to do native set/get
Definition TypedProperty.h:50
EventArgs based class that is used for objects passed to handlers triggered for events concerning som...
Definition InputEvent.h:252
An abstract base class providing common functionality and specifying the required interface for deriv...
Definition Window.h:151
Main namespace for Crazy Eddie's GUI Library.
Definition arch_overview.dox:1
MouseButton
Enumeration of mouse buttons.
Definition InputEvent.h:210