116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_ARCSEGMENT_H__
 | 
						|
#define __GUI_ARCSEGMENT_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsGui/CoreApi.h>
 | 
						|
#include <NsGui/PathSegment.h>
 | 
						|
#include <NsGui/Enums.h>
 | 
						|
#include <NsCore/ReflectionDeclareEnum.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
struct Point;
 | 
						|
struct Size;
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Defines the direction an elliptical arc is drawn.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
enum SweepDirection
 | 
						|
{
 | 
						|
    /// Specifies that arcs are drawn in a counter clockwise (negative-angle) direction
 | 
						|
    SweepDirection_Counterclockwise,
 | 
						|
    /// Specifies that arcs are drawn in a clockwise (positive-angle) direction
 | 
						|
    SweepDirection_Clockwise
 | 
						|
};
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Represents an elliptical arc between two points.
 | 
						|
///
 | 
						|
/// https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.arcsegment
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API ArcSegment: public PathSegment
 | 
						|
{
 | 
						|
public:
 | 
						|
    ArcSegment();
 | 
						|
    ArcSegment(const Point& point, const Size& size, float rotationAngle, bool isLargeArc,
 | 
						|
        SweepDirection sweepDirection, bool isStroked);
 | 
						|
    ~ArcSegment();
 | 
						|
 | 
						|
    /// Gets or sets the end point of the elliptical arc.
 | 
						|
    //@{
 | 
						|
    const Point& GetPoint() const;
 | 
						|
    void SetPoint(const Point& point);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the x- and y-radius of the arc.
 | 
						|
    //@{
 | 
						|
    const Size& GetSize() const;
 | 
						|
    void SetSize(const Size& size);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets the amount (in degrees) by which the ellipse is rotated about the x-axis
 | 
						|
    //@{
 | 
						|
    float GetRotationAngle() const;
 | 
						|
    void SetRotationAngle(float angle);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that indicates whether the arc should be greater than 180 degrees.
 | 
						|
    //@{
 | 
						|
    bool GetIsLargeArc() const;
 | 
						|
    void SetIsLargeArc(bool isLargeArc);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a value that specifies whether the arc is drawn in the Clockwise or
 | 
						|
    /// Counterclockwise direction.
 | 
						|
    //@{
 | 
						|
    SweepDirection GetSweepDirection() const;
 | 
						|
    void SetSweepDirection(SweepDirection sweepDirection);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Adds this ArcSegment to the path
 | 
						|
    void BuildPath(BaseVector<uint32_t>& commands) override;
 | 
						|
 | 
						|
    // Hides Freezable methods for convenience
 | 
						|
    //@{
 | 
						|
    Ptr<ArcSegment> Clone() const;
 | 
						|
    Ptr<ArcSegment> CloneCurrentValue() const;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From BaseObject
 | 
						|
    //@{
 | 
						|
    String ToString() const override;
 | 
						|
    //@}
 | 
						|
 | 
						|
public:
 | 
						|
    static const DependencyProperty* PointProperty;
 | 
						|
    static const DependencyProperty* SizeProperty;
 | 
						|
    static const DependencyProperty* RotationAngleProperty;
 | 
						|
    static const DependencyProperty* IsLargeArcProperty;
 | 
						|
    static const DependencyProperty* SweepDirectionProperty;
 | 
						|
 | 
						|
protected:
 | 
						|
    /// From Freezable
 | 
						|
    //@{
 | 
						|
    Ptr<Freezable> CreateInstanceCore() const override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(ArcSegment, PathSegment)
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
NS_DECLARE_REFLECTION_ENUM_EXPORT(NS_GUI_CORE_API, Noesis::SweepDirection);
 | 
						|
 | 
						|
 | 
						|
#endif
 |