393 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			393 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_VISUAL_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_VISUAL_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/CoreApi.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/DependencyObject.h>
							 | 
						||
| 
								 | 
							
								#include <NsDrawing/Point.h>
							 | 
						||
| 
								 | 
							
								#include <NsDrawing/Size.h>
							 | 
						||
| 
								 | 
							
								#include <NsDrawing/Rect.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Visual;
							 | 
						||
| 
								 | 
							
								class DrawingCommands;
							 | 
						||
| 
								 | 
							
								class Effect;
							 | 
						||
| 
								 | 
							
								class Geometry;
							 | 
						||
| 
								 | 
							
								class Brush;
							 | 
						||
| 
								 | 
							
								class Transform;
							 | 
						||
| 
								 | 
							
								class Transform3D;
							 | 
						||
| 
								 | 
							
								class RenderTreeUpdater;
							 | 
						||
| 
								 | 
							
								class Matrix4;
							 | 
						||
| 
								 | 
							
								class Transform3;
							 | 
						||
| 
								 | 
							
								class View;
							 | 
						||
| 
								 | 
							
								NS_INTERFACE IView;
							 | 
						||
| 
								 | 
							
								enum HitTestFilterBehavior: int32_t;
							 | 
						||
| 
								 | 
							
								enum HitTestResultBehavior: int32_t;
							 | 
						||
| 
								 | 
							
								enum BitmapScalingMode: int32_t;
							 | 
						||
| 
								 | 
							
								enum BlendingMode: int32_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Indicates the visual that was hit in a HitTest operation
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								struct HitTestResult
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    Visual* visualHit;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HitTestResult(): visualHit(0) { }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct HitTest3DResult
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    Visual* visualHit;
							 | 
						||
| 
								 | 
							
								    Point3D worldPos;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    HitTest3DResult() : visualHit(0), worldPos(FLT_INF, FLT_INF, FLT_INF) { }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef Delegate<HitTestFilterBehavior (Visual* target)> HitTestFilterCallback;
							 | 
						||
| 
								 | 
							
								typedef Delegate<HitTestResultBehavior (const HitTestResult& result)> HitTestResultCallback;
							 | 
						||
| 
								 | 
							
								typedef Delegate<HitTestResultBehavior(const HitTest3DResult& result)> HitTest3DResultCallback;
							 | 
						||
| 
								 | 
							
								typedef Noesis::Delegate<void (Visual* visual)> SubtreeDrawingCommandsChangedDelegate;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Provides rendering support, which includes hit testing, coordinate transformation, and bounding
							 | 
						||
| 
								 | 
							
								/// box calculations.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// http://msdn.microsoft.com/en-us/library/system.windows.media.visual.aspx
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_GUI_CORE_API Visual: public DependencyObject
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    Visual();
							 | 
						||
| 
								 | 
							
								    Visual(const Visual&) = delete;
							 | 
						||
| 
								 | 
							
								    Visual& operator=(const Visual&) = delete;
							 | 
						||
| 
								 | 
							
								    virtual ~Visual() = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Determines whether the visual object is an ancestor of the descendant visual object
							 | 
						||
| 
								 | 
							
								    /// This object is not considered to be an ancestor of *visual* if they are the same
							 | 
						||
| 
								 | 
							
								    bool IsAncestorOf(const Visual* visual) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Determines whether the visual object is a descendant of the ancestor visual object
							 | 
						||
| 
								 | 
							
								    /// This object is not considered to be a descendant of *visual* if they are the same
							 | 
						||
| 
								 | 
							
								    bool IsDescendantOf(const Visual* visual) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Finds the common ancestor of two visuals objects
							 | 
						||
| 
								 | 
							
								    /// If *visual* is the same object as this, the common ancestor will be the parent
							 | 
						||
| 
								 | 
							
								    Visual* FindCommonVisualAncestor(const Visual* visual) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Converts a Point in screen coordinates into a Point that represents the current coordinate
							 | 
						||
| 
								 | 
							
								    /// system of the Visual
							 | 
						||
| 
								 | 
							
								    Point PointFromScreen(const Point& point) const;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    /// Converts a Point that represents the current coordinate system of the Visual into a Point
							 | 
						||
| 
								 | 
							
								    /// in screen coordinates
							 | 
						||
| 
								 | 
							
								    Point PointToScreen(const Point& point) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns a transform that can be used to transform coordinates from the Visual to the
							 | 
						||
| 
								 | 
							
								    /// specified ancestor of the visual object
							 | 
						||
| 
								 | 
							
								    Matrix4 TransformToAncestor(const Visual* ancestor) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns a transform that can be used to transform coordinates from the Visual to the
							 | 
						||
| 
								 | 
							
								    /// specified visual object descendant
							 | 
						||
| 
								 | 
							
								    Matrix4 TransformToDescendant(const Visual* descendant) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns a transform that can be used to transform coordinates from the Visual to the
							 | 
						||
| 
								 | 
							
								    /// specified visual object
							 | 
						||
| 
								 | 
							
								    Matrix4 TransformToVisual(const Visual* visual) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Occurs when subtree render commands have changed
							 | 
						||
| 
								 | 
							
								    SubtreeDrawingCommandsChangedDelegate& SubtreeDrawingCommandsChanged();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if this visual is invalidated and should send updates to the render tree
							 | 
						||
| 
								 | 
							
								    bool IsInvalidated() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if this visual has been connected to a View
							 | 
						||
| 
								 | 
							
								    bool IsConnectedToView() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the view where this visual is connected to
							 | 
						||
| 
								 | 
							
								    IView* GetView() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if a render node has been created in the RenderTree for this visual
							 | 
						||
| 
								 | 
							
								    bool IsInRenderTree() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets RenderTree's identifier
							 | 
						||
| 
								 | 
							
								    uint32_t GetRenderTreeId() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Pushes all the layout updates into the UI render thread queue to update render nodes
							 | 
						||
| 
								 | 
							
								    void UpdateRender(RenderTreeUpdater& updater);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    // Protected functions used by child classes or VisualTreeHelper
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /// Gets the parent of the visual object
							 | 
						||
| 
								 | 
							
								    Visual* GetVisualParent() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Sets up the parent-child relationship between two visuals
							 | 
						||
| 
								 | 
							
								    void AddVisualChild(Visual* child);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Removes the parent-child relationship between two visuals
							 | 
						||
| 
								 | 
							
								    void RemoveVisualChild(Visual* child);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the bounding box rectangle
							 | 
						||
| 
								 | 
							
								    Rect GetContentBounds() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns a bounding box that encloses this visual and all its children
							 | 
						||
| 
								 | 
							
								    Rect GetDescendantBounds() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the minimum z of a bounding box that encloses this visual and all its children
							 | 
						||
| 
								 | 
							
								    float GetDescendantBoundsMinZ() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the maximum z of a bounding box that encloses this visual and all its children
							 | 
						||
| 
								 | 
							
								    float GetDescendantBoundsMaxZ() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the root of the View tree where this visual is connected to
							 | 
						||
| 
								 | 
							
								    /// \return Null if this visual is not connected to a View
							 | 
						||
| 
								 | 
							
								    Visual* GetRoot() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the surface size of the View where this visual is connected to
							 | 
						||
| 
								 | 
							
								    Size GetSurfaceSize() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the BitmapScalingMode for the Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    BitmapScalingMode GetVisualBitmapScalingMode() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualBitmapScalingMode(BitmapScalingMode mode);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets a value indicating how the visual's contents are mixed with the background
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    BlendingMode GetVisualBlendingMode() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualBlendingMode(BlendingMode mode);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the clip region of the Visual as a Geometry value
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Geometry* GetVisualClip() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualClip(Geometry* clip);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the bitmap effect to apply to this visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Effect* GetVisualEffect() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualEffect(Effect* value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the offset value of the visual object
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const Point& GetVisualOffset() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualOffset(const Point& offset);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the size value of the visual object
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const Size& GetVisualSize() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualSize(const Size& size);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the opacity of the Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetVisualOpacity() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualOpacity(float opacity);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Brush value that represents the opacity mask of the Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Brush* GetVisualOpacityMask() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualOpacityMask(Brush* mask);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Transform value for the Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Transform* GetVisualTransform() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualTransform(Transform* transform);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Transform3D value for the Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Transform3D* GetVisualTransform3D() const;
							 | 
						||
| 
								 | 
							
								    void SetVisualTransform3D(Transform3D* transform);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Disables PPAA generation on this visual node
							 | 
						||
| 
								 | 
							
								    void DisablePPAA(bool disable);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidates PPAA generated geometries for this visual node
							 | 
						||
| 
								 | 
							
								    void InvalidatePPAA();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidate visual render commands
							 | 
						||
| 
								 | 
							
								    void InvalidateDrawingCommands() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates to the visual that content bounds changed
							 | 
						||
| 
								 | 
							
								    void InvalidateContentBounds() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidates visual if the visual or its children intersect the invalidation rectangle
							 | 
						||
| 
								 | 
							
								    void InvalidateRect(const Rect& rect) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Invalidates children Z-order
							 | 
						||
| 
								 | 
							
								    void InvalidateChildrenZOrder() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    // Protected virtual functions to be reimplemented by child classes
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /// Gets the number of child elements for the Visual
							 | 
						||
| 
								 | 
							
								    /// \remarks Each visual implementation will decide how to store visual children
							 | 
						||
| 
								 | 
							
								    virtual uint32_t GetVisualChildrenCount() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the specified Visual in the parent VisualCollection
							 | 
						||
| 
								 | 
							
								    /// \remarks Each visual implementation will decide how to store visual children
							 | 
						||
| 
								 | 
							
								    virtual Visual* GetVisualChild(uint32_t index) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the VisualCollection of the visual object is modified
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualChildrenChanged(Visual* added, Visual* removed);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the parent of the visual object is changed
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualParentChanged(Visual* oldParent);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when this visual is connected/disconnected to/from a parent that belongs to a View
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    virtual void OnConnectToView(IView* view);
							 | 
						||
| 
								 | 
							
								    virtual void OnDisconnectFromView();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when children of this visual are connected/disconnected to/from render tree
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    virtual void OnConnectToViewChildren();
							 | 
						||
| 
								 | 
							
								    virtual void OnDisconnectFromViewChildren();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the VisualOffset of the visual object is modified
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualOffsetChanged();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the VisualSize of the visual object is modified
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualSizeChanged();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the VisualTransform of the visual object is modified
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualTransformChanged();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Called when the VisualTransform3D of the visual object is modified
							 | 
						||
| 
								 | 
							
								    virtual void OnVisualTransform3DChanged();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the bounding box rectangle
							 | 
						||
| 
								 | 
							
								    virtual Rect GetContentBoundsCore() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Function to be implemented by Inheriting classes. This function is invoked whenever
							 | 
						||
| 
								 | 
							
								    /// the content bound is hit in a HitTest operation
							 | 
						||
| 
								 | 
							
								    virtual HitTestResult HitTestCore(const Point& point);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Updates render commands in the corresponding render node
							 | 
						||
| 
								 | 
							
								    virtual DrawingCommands* GetDrawingCommands() const;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From DependencyObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
							 | 
						||
| 
								 | 
							
								    bool OnSubPropertyChanged(const DependencyProperty* prop) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend class VisualTest;
							 | 
						||
| 
								 | 
							
								    friend struct VisualTreeHelper;
							 | 
						||
| 
								 | 
							
								    friend class VisualCollection;
							 | 
						||
| 
								 | 
							
								    friend class UIElementCollection;
							 | 
						||
| 
								 | 
							
								    friend class ViewLayout;
							 | 
						||
| 
								 | 
							
								    friend class View;
							 | 
						||
| 
								 | 
							
								    friend class VisualTreeInspector;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void ConnectToView(IView* view);
							 | 
						||
| 
								 | 
							
								    void DisconnectFromView();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void Invalidate();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Invalidates descendant bounds on a branch
							 | 
						||
| 
								 | 
							
								    void InvalidateBranchBounds(bool raiseDrawingCommandsChanged) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Fires SubtreeDrawingCommandsChanged event
							 | 
						||
| 
								 | 
							
								    void RaiseSubtreeDrawingCommandsChanged() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Transform3 InternalTransformToRoot() const;
							 | 
						||
| 
								 | 
							
								    Transform3 InternalTransformToAncestor(const Visual* ancestor) const;
							 | 
						||
| 
								 | 
							
								    Transform3 InternalTransformToParent() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Vector3 InternalPointToRoot(const Vector3& point) const;
							 | 
						||
| 
								 | 
							
								    Vector3 InternalPointToAncestor(const Vector3& point, const Visual* ancestor) const;
							 | 
						||
| 
								 | 
							
								    Vector3 InternalPointToParent(const Vector3& point) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Point InternalPointToScreen(const Vector3& point) const;
							 | 
						||
| 
								 | 
							
								    Vector3 GetDirection(const Point& point) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // point and dir must be in the coordinate system of this Visual
							 | 
						||
| 
								 | 
							
								    HitTestResultBehavior InternalHitTest(const Vector3& point, const Vector3& dir,
							 | 
						||
| 
								 | 
							
								        const HitTestFilterCallback& hitTestFilter,
							 | 
						||
| 
								 | 
							
								        const HitTest3DResultCallback& hitTestResult, bool computeWorldPos);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // point, dir and our are in world-coordinates
							 | 
						||
| 
								 | 
							
								    bool IntersectPlane(const Vector3& point, const Vector3& dir, Vector3& out);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Rect InternalGetContentBounds() const;
							 | 
						||
| 
								 | 
							
								    void EnsureDescendantBounds() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void CreateRenderNode(RenderTreeUpdater& updater);
							 | 
						||
| 
								 | 
							
								    void DestroyRenderNode(RenderTreeUpdater& updater);
							 | 
						||
| 
								 | 
							
								    void AddNode(RenderTreeUpdater& updater);
							 | 
						||
| 
								 | 
							
								    void RemoveNode(RenderTreeUpdater& updater, uint32_t parentIndex);
							 | 
						||
| 
								 | 
							
								    void RemoveAllNodes(RenderTreeUpdater& updater);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ///Visual flag management
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void UpdateBranchVisualFlag(uint32_t flag, bool value) const;
							 | 
						||
| 
								 | 
							
								    void SetVisualFlag(uint32_t flag) const;
							 | 
						||
| 
								 | 
							
								    void ClearVisualFlag(uint32_t flag) const;
							 | 
						||
| 
								 | 
							
								    bool CheckVisualFlag(uint32_t flag) const;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Manages invalidation of visual in renderer for next update
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void AddInvalidatedVisual() const;
							 | 
						||
| 
								 | 
							
								    void RemoveInvalidatedVisual() const;
							 | 
						||
| 
								 | 
							
								    void CancelUpdateRequest();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    View* mView;
							 | 
						||
| 
								 | 
							
								    Visual* mVisualParent;
							 | 
						||
| 
								 | 
							
								    void* mUpdateRequest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uint32_t mIndex;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Point mVisualOffset;
							 | 
						||
| 
								 | 
							
								    Size mVisualSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    mutable Rect mContentBoundsCache;
							 | 
						||
| 
								 | 
							
								    mutable Rect mDescendantBoundsCache;
							 | 
						||
| 
								 | 
							
								    mutable float mDescendantBoundsMinZ;
							 | 
						||
| 
								 | 
							
								    mutable float mDescendantBoundsMaxZ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    mutable uint32_t mVisualFlags;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SubtreeDrawingCommandsChangedDelegate mSubtreeDrawingCommandsChanged;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(Visual, DependencyObject)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |