299 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			299 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_IVIEW_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_IVIEW_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Interface.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FrameworkElement;
							 | 
						||
| 
								 | 
							
								class Matrix4;
							 | 
						||
| 
								 | 
							
								template<class T> class Delegate;
							 | 
						||
| 
								 | 
							
								NS_INTERFACE IRenderer;
							 | 
						||
| 
								 | 
							
								enum MouseButton: int32_t;
							 | 
						||
| 
								 | 
							
								enum Key: int32_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct TessellationMaxPixelError
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    TessellationMaxPixelError(float error_): error(error_) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// MediumQuality is usually fine for PPAA (non-multisampled) while HighQuality is the 
							 | 
						||
| 
								 | 
							
								    /// recommended pixel error if you are rendering to a 8x multisampled surface
							 | 
						||
| 
								 | 
							
								    static TessellationMaxPixelError LowQuality() { return 0.7f; }
							 | 
						||
| 
								 | 
							
								    static TessellationMaxPixelError MediumQuality() { return 0.4f; }
							 | 
						||
| 
								 | 
							
								    static TessellationMaxPixelError HighQuality() { return 0.2f; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    float error;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								enum RenderFlags: int32_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// Toggles wireframe mode when rendering triangles
							 | 
						||
| 
								 | 
							
								    RenderFlags_Wireframe = 1,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Each batch submitted to the GPU is given a unique solid color
							 | 
						||
| 
								 | 
							
								    RenderFlags_ColorBatches = 2,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Displays pixel overdraw using blending layers. Different colors are used for each type
							 | 
						||
| 
								 | 
							
								    /// of triangles. 'Green' for normal ones, 'Red' for opacities and 'Blue' for clipping masks
							 | 
						||
| 
								 | 
							
								    RenderFlags_Overdraw = 4,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Inverts the render vertically
							 | 
						||
| 
								 | 
							
								    RenderFlags_FlipY = 8,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Per-Primitive Antialiasing extrudes the contours of the geometry and smooths them.
							 | 
						||
| 
								 | 
							
								    /// It is a 'cheap' antialiasing algorithm useful when GPU MSAA is not enabled
							 | 
						||
| 
								 | 
							
								    RenderFlags_PPAA = 16,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Enables subpixel rendering compatible with LCD displays
							 | 
						||
| 
								 | 
							
								    RenderFlags_LCD = 32,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Displays glyph atlas as a small overlay for debugging purposes
							 | 
						||
| 
								 | 
							
								    RenderFlags_ShowGlyphs = 64,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Displays ramp atlas as a small overlay for debugging purposes
							 | 
						||
| 
								 | 
							
								    RenderFlags_ShowRamps = 128,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Enables testing against the content of the depth buffer
							 | 
						||
| 
								 | 
							
								    RenderFlags_DepthTesting = 256
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct ViewStats
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    float frameTime;
							 | 
						||
| 
								 | 
							
								    float updateTime;
							 | 
						||
| 
								 | 
							
								    float renderTime;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t triangles;
							 | 
						||
| 
								 | 
							
								    uint32_t draws;
							 | 
						||
| 
								 | 
							
								    uint32_t batches;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t tessellations;
							 | 
						||
| 
								 | 
							
								    uint32_t flushes;
							 | 
						||
| 
								 | 
							
								    uint32_t geometrySize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t masks;
							 | 
						||
| 
								 | 
							
								    uint32_t opacities;
							 | 
						||
| 
								 | 
							
								    uint32_t renderTargetSwitches;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t uploadedRamps;
							 | 
						||
| 
								 | 
							
								    uint32_t rasterizedGlyphs;
							 | 
						||
| 
								 | 
							
								    uint32_t discardedGlyphTiles;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Views manage UI trees
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								NS_INTERFACE IView: public Interface
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// Returns the renderer associated to this view
							 | 
						||
| 
								 | 
							
								    virtual IRenderer* GetRenderer() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the root element
							 | 
						||
| 
								 | 
							
								    virtual FrameworkElement* GetContent() const = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets DPI scale value. Default is 1.0 which corresponds to 96 pixels per inch.
							 | 
						||
| 
								 | 
							
								    virtual void SetScale(float scale) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets the size of the surface where UI elements will layout and render
							 | 
						||
| 
								 | 
							
								    virtual void SetSize(uint32_t width, uint32_t height) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets the tessellation curve tolerance in screen space. MediumQuality is the default value
							 | 
						||
| 
								 | 
							
								    virtual void SetTessellationMaxPixelError(TessellationMaxPixelError maxError) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets current tessellation curve tolerance
							 | 
						||
| 
								 | 
							
								    virtual TessellationMaxPixelError GetTessellationMaxPixelError() const = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets render flags
							 | 
						||
| 
								 | 
							
								    virtual void SetFlags(uint32_t flags) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets current render flags
							 | 
						||
| 
								 | 
							
								    virtual uint32_t GetFlags() const = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// As Tapped and Holding events are mutually exclusive, this threshold indicates when an
							 | 
						||
| 
								 | 
							
								    /// interaction should start a Holding event. By default it is 500 milliseconds
							 | 
						||
| 
								 | 
							
								    virtual void SetHoldingTimeThreshold(uint32_t milliseconds) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Minimum distance, in pixels, between first interaction and last interaction to consider
							 | 
						||
| 
								 | 
							
								    /// valid Tapped or Holding events. By default it is 10 pixels
							 | 
						||
| 
								 | 
							
								    virtual void SetHoldingDistanceThreshold(uint32_t pixels) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Minimun distance since first contact, in pixels, to start a manipulation. Once this
							 | 
						||
| 
								 | 
							
								    /// threshold is reached, the event ManipulationStarted is sent. By default it is 10 pixels
							 | 
						||
| 
								 | 
							
								    virtual void SetManipulationDistanceThreshold(uint32_t pixels) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// The maximum delay required for two consecutives Tapped events to be interpreted as
							 | 
						||
| 
								 | 
							
								    /// a DoubleTapped event. By default it is 500 milliseconds
							 | 
						||
| 
								 | 
							
								    virtual void SetDoubleTapTimeThreshold(uint32_t milliseconds) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Minimum distance, in pixels, between first interaction and last interaction to consider
							 | 
						||
| 
								 | 
							
								    /// a DoubleTapped event. By default it is 10 pixels
							 | 
						||
| 
								 | 
							
								    virtual void SetDoubleTapDistanceThreshold(uint32_t pixels) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets the projection matrix that transforms the coordinates of each primitive to a
							 | 
						||
| 
								 | 
							
								    /// non-normalized homogeneous space where (0, 0) is at the lower-left corner and
							 | 
						||
| 
								 | 
							
								    /// (width, height) is at the upper-right corner after projection.
							 | 
						||
| 
								 | 
							
								    /// The following table compares the clip space used by OpenGL and D3D in comparison.
							 | 
						||
| 
								 | 
							
								    /// ========= =========== ============ =========
							 | 
						||
| 
								 | 
							
								    /// System    X Range     Y Range      Z Range
							 | 
						||
| 
								 | 
							
								    /// ========= =========== ============ =========
							 | 
						||
| 
								 | 
							
								    /// OpenGL    [-1...+1]   [-1...+1]    [-1...+1]
							 | 
						||
| 
								 | 
							
								    /// Direct3D  [-1...+1]   [-1...+1]    [0...1]
							 | 
						||
| 
								 | 
							
								    /// NoesisGUI [0...width] [0...height] [0...1]
							 | 
						||
| 
								 | 
							
								    /// ========= =========== ============ =========
							 | 
						||
| 
								 | 
							
								    virtual void SetProjectionMatrix(const Matrix4& projection) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// The projection matrix set to the view is used for determining the visual impact of nodes
							 | 
						||
| 
								 | 
							
								    /// in the offscreen phase. The stereo matrices used for rendering in VR are slightly different.
							 | 
						||
| 
								 | 
							
								    /// To account for this difference, it is recommended to apply a scale using this function.
							 | 
						||
| 
								 | 
							
								    /// For non-VR this must be always 1. For VR, we recommend a value between 2 and 3.
							 | 
						||
| 
								 | 
							
								    virtual void SetStereoOffscreenScaleFactor(float factor) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Activates the view and recovers keyboard focus
							 | 
						||
| 
								 | 
							
								    virtual void Activate() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Deactivates the view and removes keyboard focus
							 | 
						||
| 
								 | 
							
								    virtual void Deactivate() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if touch input events are emulated by the mouse
							 | 
						||
| 
								 | 
							
								    virtual void SetEmulateTouch(bool emulate) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a mouse button was pressed. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseButtonDown(int x, int y, MouseButton button) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a mouse button was released. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseButtonUp(int x, int y, MouseButton button) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a mouse button was double clicked. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// When a double click happens the following sequence of events are expected:
							 | 
						||
| 
								 | 
							
								    ///  - MouseButtonDown (first click)
							 | 
						||
| 
								 | 
							
								    ///  - MouseButtonUp
							 | 
						||
| 
								 | 
							
								    ///  - MouseDoubleClick (second click)
							 | 
						||
| 
								 | 
							
								    ///  - MouseButtonUp
							 | 
						||
| 
								 | 
							
								    /// See https://docs.microsoft.com/en-us/windows/win32/learnwin32/mouse-clicks#double-clicks
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseDoubleClick(int x, int y, MouseButton button) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that mouse was moved. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseMove(int x, int y) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that mouse vertical wheel was rotated. Origin is in the upper-left corner
							 | 
						||
| 
								 | 
							
								    /// The parameter wheelRotation indicates the distance the wheel is rotated, expressed in
							 | 
						||
| 
								 | 
							
								    /// multiples or divisions of 120 (is the default value for 3 lines of scrolling). A positive
							 | 
						||
| 
								 | 
							
								    /// value indicates that the wheel was rotated forward, away from the user; a negative value
							 | 
						||
| 
								 | 
							
								    /// indicates that the wheel was rotated backward, toward the user.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseWheel(int x, int y, int wheelRotation) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that mouse horizontal wheel was rotated. Origin is in the upper-left corner
							 | 
						||
| 
								 | 
							
								    /// The parameter wheelRotation indicates the distance the wheel is rotated, expressed in
							 | 
						||
| 
								 | 
							
								    /// multiples or divisions of 120 (is the default value for 3 lines of scrolling). A positive
							 | 
						||
| 
								 | 
							
								    /// value indicates that the wheel was rotated to the right; a negative value indicates that
							 | 
						||
| 
								 | 
							
								    /// the wheel was rotated to the left.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool MouseHWheel(int x, int y, int wheelRotation) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a vertical scroll is being actioned. This is normally mapped to a gamepad
							 | 
						||
| 
								 | 
							
								    /// stick. Value ranges from -1.0 (fully pushed down) to +1.0 (fully pushed up). The value
							 | 
						||
| 
								 | 
							
								    /// is internally adjusted to be frame-rate independent. No dead zone filtering is applied.
							 | 
						||
| 
								 | 
							
								    /// Raises the event on the focused element. Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool Scroll(float value) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a vertical scroll is being actioned. This is normally mapped to a gamepad
							 | 
						||
| 
								 | 
							
								    /// stick. Value ranges from -1.0 (fully pushed down) to +1.0 (fully pushed up). The value
							 | 
						||
| 
								 | 
							
								    /// is internally adjusted to be frame-rate independent. No dead zone filtering is applied.
							 | 
						||
| 
								 | 
							
								    /// Raises the event on the element under the specified x,y. Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool Scroll(int x, int y, float value) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a horizontal scroll is being actioned. This is normally mapped to a gamepad
							 | 
						||
| 
								 | 
							
								    /// stick. Value ranges from -1.0 (fully pushed left) to +1.0 (fully pushed right). The value
							 | 
						||
| 
								 | 
							
								    /// is internally adjusted to be frame-rate independent. No dead zone filtering is applied.
							 | 
						||
| 
								 | 
							
								    /// Raises the event on the focused element. Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool HScroll(float value) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a horizontal scroll is being actioned. This is normally mapped to a gamepad
							 | 
						||
| 
								 | 
							
								    /// stick. Value ranges from -1.0 (fully pushed left) to +1.0 (fully pushed right). The value
							 | 
						||
| 
								 | 
							
								    /// is internally adjusted to be frame-rate independent. No dead zone filtering is applied.
							 | 
						||
| 
								 | 
							
								    /// Raises the event on the element under the specified x,y. Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool HScroll(int x, int y, float value) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a finger touched the screen. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool TouchDown(int x, int y, uint64_t id) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a finger moved on the screen. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool TouchMove(int x, int y, uint64_t id) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a finger raised off of the screen. Origin is in the upper-left corner.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool TouchUp(int x, int y, uint64_t id) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a key was initially pressed or repeatedly pressed
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool KeyDown(Key key) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a key was released.
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool KeyUp(Key key) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Notifies that a key was translated to the corresponding unicode character.
							 | 
						||
| 
								 | 
							
								    /// If a key is repeatedly pressed, its corresponding 'Char' event is sent again.
							 | 
						||
| 
								 | 
							
								    /// 'Char' messages are expected to be sent between the corresponding 'Down' and 'Up' events:
							 | 
						||
| 
								 | 
							
								    ///  - KeyDown
							 | 
						||
| 
								 | 
							
								    ///  - Char
							 | 
						||
| 
								 | 
							
								    ///  - KeyUp
							 | 
						||
| 
								 | 
							
								    /// Returns true if event was handled
							 | 
						||
| 
								 | 
							
								    virtual bool Char(uint32_t ch) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Performs a layout pass and records UI changes into a snapshot to be consumed by the renderer.
							 | 
						||
| 
								 | 
							
								    /// Successive UI state changes won't be visible by the renderer until a new snapshot is taken.
							 | 
						||
| 
								 | 
							
								    /// Returns false to indicate no state changes were detected and rendering is not necessary.
							 | 
						||
| 
								 | 
							
								    /// A balance must be kept between invocations of Update() returning true and UpdateRenderTree()
							 | 
						||
| 
								 | 
							
								    /// Note that the initial update to a view establishes its origin time, which serves as the
							 | 
						||
| 
								 | 
							
								    /// reference point for calculating delta times. If you wish to position a newly created view
							 | 
						||
| 
								 | 
							
								    /// at a specific time, two updates are necessary: the first with a timestamp of 0.0
							 | 
						||
| 
								 | 
							
								    /// (Update(0.0)), and the second with the desired seek time (Update(seekTime))
							 | 
						||
| 
								 | 
							
								    virtual bool Update(double timeInSeconds) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Rendering event occurs after animation and layout have been applied to the composition
							 | 
						||
| 
								 | 
							
								    /// tree, just before objects in the composition tree are rendered
							 | 
						||
| 
								 | 
							
								    typedef Delegate<void (IView* view)> RenderingEventHandler;
							 | 
						||
| 
								 | 
							
								    virtual RenderingEventHandler& Rendering() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Creates a timer that will be fired at the given milliseconds interval. Returns an ID to
							 | 
						||
| 
								 | 
							
								    /// handle restarts and cancellations. The callback returns the next interval or just 0 to stop 
							 | 
						||
| 
								 | 
							
								    typedef Delegate<uint32_t ()> TimerCallback;
							 | 
						||
| 
								 | 
							
								    virtual uint32_t CreateTimer(uint32_t interval, const TimerCallback& callback) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Restarts specified timer with a new interval in milliseconds
							 | 
						||
| 
								 | 
							
								    virtual void RestartTimer(uint32_t timerId, uint32_t interval) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Cancels specified timer
							 | 
						||
| 
								 | 
							
								    virtual void CancelTimer(uint32_t timerId) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets performance counters for the last rendered frame
							 | 
						||
| 
								 | 
							
								    virtual ViewStats GetStats() const = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_IMPLEMENT_INLINE_REFLECTION_(IView, Interface)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |