Crazy Eddie's GUI System  0.8.7
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 
40 namespace CEGUI
41 {
42 struct MouseClickTracker;
43 
45 class CEGUIEXPORT GUIContextEventArgs : public EventArgs
46 {
47 public:
49  context(context)
50  {}
51 
54 };
55 
58 {
59 public:
61  GUIContextEventArgs(context),
62  renderTarget(target)
63  {}
64 
65  RenderTarget* renderTarget;
66 };
67 
68 class CEGUIEXPORT GUIContext : public RenderingSurface,
70 {
71 public:
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 
136  void markAsDirty();
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 
229  void setDefaultTooltipType(const String& tooltip_type);
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);
266  bool injectMouseLeaves(void);
269  bool injectKeyDown(Key::Scan scan_code);
270  bool injectKeyUp(Key::Scan scan_code);
271  bool injectChar(String::value_type code_point);
272  bool injectMouseWheelChange(float delta);
273  bool injectMousePosition(float x_pos, float y_pos);
274  bool injectTimePulse(float timeElapsed);
281 
282  // public overrides
283  void draw();
284 
285 protected:
286  void updateRootWindowAreaRects() const;
287  void drawWindowContentToTarget();
288  void renderWindowHierarchyToSurfaces();
289 
290  void createDefaultTooltipWindowInstance() const;
291  void destroyDefaultTooltipWindowInstance();
292 
294  void notifyDefaultFontChanged(Window* hierarchy_root) const;
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;
301  void notifyMouseTransition(Window* top, Window* bottom,
302  void (Window::*func)(MouseEventArgs&),
303  MouseEventArgs& args) const;
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
322  void drawContent();
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 
CEGUI::Font
Class that encapsulates a typeface.
Definition: Font.h:62
CEGUI::GUIContextRenderTargetEventArgs
EventArgs class passed for GUIContext RenderTarget related events.
Definition: GUIContext.h:58
CEGUI::GUIContext::setDefaultFont
void setDefaultFont(const String &name)
Set the default font to be used by the GUIContext.
CEGUI::GUIContextEventArgs::context
GUIContext * context
pointer to the GUIContext that triggered the event.
Definition: GUIContext.h:53
CEGUI::InjectedInputReceiver
Input injection interface to be inplemented by classes that take raw inputs.
Definition: InjectedInputReceiver.h:37
CEGUI::Event::ScopedConnection
Event::Connection wrapper that automatically disconnects the connection when the object is deleted (o...
Definition: Event.h:92
CEGUI::GUIContext::setDefaultTooltipType
void setDefaultTooltipType(const String &tooltip_type)
Set the default Tooltip to be used by specifying a Window type.
CEGUI::GUIContext::injectPasteRequest
bool injectPasteRequest()
Tells the system to perform a clipboard paste operation.
CEGUI::Tooltip
Base class for Tooltip widgets.
Definition: widgets/Tooltip.h:80
CEGUI::GUIContext::d_mouseButtonMultiClickTolerance
Sizef d_mouseButtonMultiClickTolerance
Movement tolerance used when detecting multi-click events.
Definition: GUIContext.h:336
CEGUI::GUIContext::EventMouseButtonClickTimeoutChanged
static const String EventMouseButtonClickTimeoutChanged
Definition: GUIContext.h:90
CEGUI::GUIContext::setDefaultFont
void setDefaultFont(Font *font)
Set the default font to be used by the GUIContext.
CEGUI::GUIContext::EventDefaultFontChanged
static const String EventDefaultFontChanged
Definition: GUIContext.h:108
CEGUI::GUIContext::EventRootWindowChanged
static const String EventRootWindowChanged
Definition: GUIContext.h:82
CEGUI::RenderingSurface
Class that represents a surface that can have geometry based imagery drawn to it.
Definition: RenderingSurface.h:111
CEGUI::GUIContext::injectMouseButtonClick
bool injectMouseButtonClick(const MouseButton button)
Function to directly inject a mouse button click event.
CEGUI::GUIContext::isMouseClickEventGenerationEnabled
bool isMouseClickEventGenerationEnabled() const
Return whether automatic mouse button click and multi-click (i.e. double-click and treble-click) even...
CEGUI::GUIContext::notifyMouseTransition
void notifyMouseTransition(Window *top, Window *bottom, void(Window::*func)(MouseEventArgs &), MouseEventArgs &args) const
call some function for a chain of windows: (top, bottom]
CEGUI::GUIContext::updateWindowContainingMouse
void updateWindowContainingMouse()
Tell the context to reconsider which window it thinks the mouse is in.
CEGUI::GUIContext::injectMouseButtonUp
bool injectMouseButtonUp(MouseButton button)
Function that injects a mouse button up event into the receiver.
CEGUI::GUIContext::getMouseCursor
MouseCursor & getMouseCursor()
Retrieves MouseCursor used in this GUIContext.
CEGUI::GUIContext::injectMouseButtonDown
bool injectMouseButtonDown(MouseButton button)
Function that injects a mouse button down event into the receiver.
CEGUI::GUIContext::notifyDefaultFontChanged
void notifyDefaultFontChanged(Window *hierarchy_root) const
notify windows in a hierarchy using default font, when font changes.
CEGUI::GUIContext::updateWindowContainingMouse_impl
bool updateWindowContainingMouse_impl() const
returns whether the window containing the mouse had changed.
CEGUI::GUIContext::injectChar
bool injectChar(String::value_type code_point)
Function that injects a typed character event into the receiver.
CEGUI
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1
CEGUI::MouseEventArgs
EventArgs based class that is used for objects passed to input event handlers concerning mouse input.
Definition: InputEvent.h:281
CEGUI::GUIContext::getModalWindow
Window * getModalWindow() const
Return a pointer to the Window that is currently set as modal.
CEGUI::GUIContext::EventMouseButtonMultiClickTimeoutChanged
static const String EventMouseButtonMultiClickTimeoutChanged
Definition: GUIContext.h:94
CEGUI::Vector2< float >
CEGUI::WindowEventArgs
EventArgs based class that is used for objects passed to handlers triggered for events concerning som...
Definition: InputEvent.h:252
CEGUI::GUIContext::injectCutRequest
bool injectCutRequest()
Tells the system to perform a clipboard cut operation.
CEGUI::GUIContext::injectTimePulse
bool injectTimePulse(float timeElapsed)
Function to inject time pulses into the receiver.
CEGUI::GUIContext::drawContent
void drawContent()
CEGUI::GUIContext::setModalWindow
void setModalWindow(Window *window)
Internal function to directly set the current modal window.
CEGUI::GUIContext::d_generateMouseClickEvents
bool d_generateMouseClickEvents
should mouse click/multi-click events be automatically generated.
Definition: GUIContext.h:330
CEGUI::GUIContext::markAsDirty
void markAsDirty()
call to indicate that some redrawing is required.
CEGUI::GUIContext::injectMouseButtonDoubleClick
bool injectMouseButtonDoubleClick(const MouseButton button)
Function to directly inject a mouse button double-click event.
CEGUI::GUIContext::getDefaultFont
Font * getDefaultFont() const
Return a pointer to the default Font for the GUIContext.
CEGUI::GUIContext::d_mouseButtonClickTimeout
float d_mouseButtonClickTimeout
Timeout used to when detecting a single-click.
Definition: GUIContext.h:332
CEGUI::GUIContext::setMouseClickEventGenerationEnabled
void setMouseClickEventGenerationEnabled(const bool enable)
Set whether automatic mouse button click and multi-click (i.e. double-click and treble-click) event g...
CEGUI::GUIContext::injectMouseLeaves
bool injectMouseLeaves(void)
Function that notifies that the mouse has left the host area that the receiver receives input for.
CEGUI::GUIContext::d_surfaceSize
Sizef d_surfaceSize
a cache of the target surface size, allows returning by ref.
Definition: GUIContext.h:345
CEGUI::GUIContext::injectMouseButtonTripleClick
bool injectMouseButtonTripleClick(const MouseButton button)
Function to directly inject a mouse button triple-click event.
CEGUI::SystemKeys
Definition: SystemKeys.h:35
CEGUI::String::value_type
utf32 value_type
Basic 'code point' type used for String (utf32)
Definition: String.h:69
CEGUI::GUIContext::injectKeyUp
bool injectKeyUp(Key::Scan scan_code)
Function that injects a key up event into the receiver.
CEGUI::MouseCursor
Class that provides mouse cursor support.
Definition: MouseCursor.h:54
CEGUI::GUIContext::draw
void draw()
Draw the GeometryBuffers for all rendering queues to the RenderTarget that this RenderingSurface is t...
CEGUI::GUIContext::injectMouseWheelChange
bool injectMouseWheelChange(float delta)
Function that injects a mouse-wheel / scroll-wheel event into the receiver.
CEGUI::GUIContext::setDefaultTooltipObject
void setDefaultTooltipObject(Tooltip *tooltip)
Set the default Tooltip object for this GUIContext. This value may be 0 to indicate that no default T...
CEGUI::GUIContext::injectKeyDown
bool injectKeyDown(Key::Scan scan_code)
Function that injects a key down event into the receiver.
CEGUI::GUIContext::EventRenderTargetChanged
static const String EventRenderTargetChanged
Definition: GUIContext.h:104
CEGUI::GUIContext::d_mouseMovementScalingFactor
float d_mouseMovementScalingFactor
Scaling factor applied to injected mouse move deltas.
Definition: GUIContext.h:328
CEGUI::GUIContext::injectCopyRequest
bool injectCopyRequest()
Tells the receiver to perform a clipboard copy operation.
CEGUI::Window
An abstract base class providing common functionality and specifying the required interface for deriv...
Definition: Window.h:151
CEGUI::GUIContext::EventMouseButtonMultiClickToleranceChanged
static const String EventMouseButtonMultiClickToleranceChanged
Definition: GUIContext.h:99
CEGUI::GUIContext::getDefaultTooltipObject
Tooltip * getDefaultTooltipObject() const
Returns a pointer to the context's default tooltip object. May return 0.
CEGUI::GUIContext::injectMousePosition
bool injectMousePosition(float x_pos, float y_pos)
Function that injects a new position for the mouse cursor.
CEGUI::RenderTarget
Defines interface to some surface that can be rendered to. Concrete instances of objects that impleme...
Definition: RenderTarget.h:60
CEGUI::Size< float >
CEGUI::GUIContext
Definition: GUIContext.h:70
CEGUI::String
String class used within the GUI system.
Definition: String.h:64
CEGUI::GUIContext::injectMouseMove
bool injectMouseMove(float delta_x, float delta_y)
Function that injects a mouse movement event into the receiver.
CEGUI::MouseButton
MouseButton
Enumeration of mouse buttons.
Definition: InputEvent.h:210
CEGUI::GUIContext::EventMouseMoveScalingFactorChanged
static const String EventMouseMoveScalingFactorChanged
Definition: GUIContext.h:86
CEGUI::GUIContextEventArgs
EventArgs class passed to subscribers for (most) GUIContext events.
Definition: GUIContext.h:46
CEGUI::GUIContext::d_mouseButtonMultiClickTimeout
float d_mouseButtonMultiClickTimeout
Timeout used when detecting multi-click events.
Definition: GUIContext.h:334
CEGUI::EventArgs
Base class used as the argument to all subscribers Event object.
Definition: EventArgs.h:51