Magic_Game/core/e2dshape.h

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;
};
}