254 lines
3.5 KiB
C++
254 lines
3.5 KiB
C++
#pragma once
|
|
#include "e2dnode.h"
|
|
|
|
namespace e2d
|
|
{
|
|
|
|
|
|
// 形状
|
|
class Shape :
|
|
public Node
|
|
{
|
|
public:
|
|
// 形状样式
|
|
enum class Style
|
|
{
|
|
Solid, /* 填充 */
|
|
Round, /* 轮廓 */
|
|
Fill, /* 轮廓 + 填充 */
|
|
};
|
|
|
|
public:
|
|
Shape();
|
|
|
|
virtual ~Shape();
|
|
|
|
// 获取样式
|
|
Style getStyle() const;
|
|
|
|
// 获取填充颜色
|
|
Color getFillColor() const;
|
|
|
|
// 获取线条颜色
|
|
Color getLineColor() const;
|
|
|
|
// 获取线条宽度
|
|
float getStrokeWidth() const;
|
|
|
|
// 设置填充颜色
|
|
void setFillColor(
|
|
Color fillColor
|
|
);
|
|
|
|
// 设置线条颜色
|
|
void setLineColor(
|
|
Color lineColor
|
|
);
|
|
|
|
// 设置线条宽度
|
|
void setStrokeWidth(
|
|
float strokeWidth
|
|
);
|
|
|
|
// 设置样式
|
|
void setStyle(Style style);
|
|
|
|
// 设置线条相交样式
|
|
void setLineJoin(
|
|
LineJoin lineJoin
|
|
);
|
|
|
|
// 渲染形状
|
|
virtual void onRender() const override;
|
|
|
|
protected:
|
|
E2D_DISABLE_COPY(Shape);
|
|
|
|
// 渲染轮廓
|
|
virtual void _renderLine() const = 0;
|
|
|
|
// 渲染填充色
|
|
virtual void _renderFill() const = 0;
|
|
|
|
protected:
|
|
Style _style;
|
|
float _strokeWidth;
|
|
Color _lineColor;
|
|
Color _fillColor;
|
|
ID2D1StrokeStyle * _strokeStyle;
|
|
};
|
|
|
|
|
|
// 矩形
|
|
class RectShape :
|
|
public Shape
|
|
{
|
|
public:
|
|
RectShape();
|
|
|
|
explicit RectShape(
|
|
Size size /* 宽度和高度 */
|
|
);
|
|
|
|
explicit RectShape(
|
|
Point topLeft, /* 左上角坐标 */
|
|
Size size /* 宽度和高度 */
|
|
);
|
|
|
|
virtual ~RectShape();
|
|
|
|
protected:
|
|
E2D_DISABLE_COPY(RectShape);
|
|
|
|
// 渲染轮廓
|
|
virtual void _renderLine() const override;
|
|
|
|
// 渲染填充色
|
|
virtual void _renderFill() const override;
|
|
};
|
|
|
|
|
|
// 圆角矩形
|
|
class RoundRectShape :
|
|
public Shape
|
|
{
|
|
public:
|
|
RoundRectShape();
|
|
|
|
explicit RoundRectShape(
|
|
Size size, /* 宽度和高度 */
|
|
float radiusX, /* 圆角半径 */
|
|
float radiusY /* 圆角半径 */
|
|
);
|
|
|
|
explicit RoundRectShape(
|
|
Point topLeft, /* 左上角坐标 */
|
|
Size size, /* 宽度和高度 */
|
|
float radiusX, /* 圆角半径 */
|
|
float radiusY /* 圆角半径 */
|
|
);
|
|
|
|
virtual ~RoundRectShape();
|
|
|
|
// 获取圆角半径
|
|
float getRadiusX() const;
|
|
|
|
// 获取圆角半径
|
|
float getRadiusY() const;
|
|
|
|
// 设置圆角半径
|
|
virtual void setRadiusX(
|
|
float radiusX
|
|
);
|
|
|
|
// 设置圆角半径
|
|
virtual void setRadiusY(
|
|
float radiusY
|
|
);
|
|
|
|
protected:
|
|
E2D_DISABLE_COPY(RoundRectShape);
|
|
|
|
// 渲染轮廓
|
|
virtual void _renderLine() const override;
|
|
|
|
// 渲染填充色
|
|
virtual void _renderFill() const override;
|
|
|
|
protected:
|
|
float _radiusX;
|
|
float _radiusY;
|
|
};
|
|
|
|
|
|
// 圆形
|
|
class CircleShape :
|
|
public Shape
|
|
{
|
|
public:
|
|
CircleShape();
|
|
|
|
explicit CircleShape(
|
|
float radius /* 半径 */
|
|
);
|
|
|
|
explicit CircleShape(
|
|
Point center, /* 圆心坐标 */
|
|
float radius /* 半径 */
|
|
);
|
|
|
|
virtual ~CircleShape();
|
|
|
|
// 获取半径
|
|
float getRadius() const;
|
|
|
|
// 设置半径
|
|
virtual void setRadius(
|
|
float radius
|
|
);
|
|
|
|
protected:
|
|
E2D_DISABLE_COPY(CircleShape);
|
|
|
|
// 渲染轮廓
|
|
virtual void _renderLine() const override;
|
|
|
|
// 渲染填充色
|
|
virtual void _renderFill() const override;
|
|
|
|
protected:
|
|
float _radius;
|
|
};
|
|
|
|
|
|
// 椭圆形
|
|
class EllipseShape :
|
|
public Shape
|
|
{
|
|
public:
|
|
EllipseShape();
|
|
|
|
explicit EllipseShape(
|
|
float radiusX, /* 横轴半径 */
|
|
float radiusY /* 纵轴半径 */
|
|
);
|
|
|
|
explicit EllipseShape(
|
|
Point center, /* 圆心坐标 */
|
|
float radiusX, /* 横轴半径 */
|
|
float radiusY /* 纵轴半径 */
|
|
);
|
|
|
|
virtual ~EllipseShape();
|
|
|
|
// 获取横轴半径
|
|
float getRadiusX() const;
|
|
|
|
// 获取纵轴半径
|
|
float getRadiusY() const;
|
|
|
|
// 设置横轴半径
|
|
virtual void setRadiusX(
|
|
float radiusX
|
|
);
|
|
|
|
// 设置纵轴半径
|
|
virtual void setRadiusY(
|
|
float radiusY
|
|
);
|
|
|
|
protected:
|
|
E2D_DISABLE_COPY(EllipseShape);
|
|
|
|
// 渲染轮廓
|
|
virtual void _renderLine() const override;
|
|
|
|
// 渲染填充色
|
|
virtual void _renderFill() const override;
|
|
|
|
protected:
|
|
float _radiusX;
|
|
float _radiusY;
|
|
};
|
|
|
|
} |