Magic_Game/core/e2dshape.h

290 lines
3.9 KiB
C++

#pragma once
#include "e2dnode.h"
namespace e2d
{
// 形状
class Shape :
public Node
{
public:
Shape();
virtual ~Shape();
// 获取样式
int getStyle() const;
// 获取填充颜色
Color getFillColor() const;
// 获取线条颜色
Color getLineColor() const;
// 获取线条宽度
double getStrokeWidth() const;
// 设置填充颜色
void setFillColor(
Color fillColor
);
// 设置线条颜色
void setLineColor(
Color lineColor
);
// 设置线条宽度
void setStrokeWidth(
double strokeWidth
);
// 设置样式
void setStyle(int style);
// 渲染形状
virtual void onRender() override;
protected:
// 渲染轮廓
virtual void _renderLine() = 0;
// 渲染填充色
virtual void _renderFill() = 0;
protected:
int m_nStyle;
float m_fStrokeWidth;
Color m_nLineColor;
Color m_nFillColor;
};
// 矩形
class Rect :
public Shape
{
public:
Rect();
Rect(
double width, /* 宽度 */
double height /* 高度 */
);
Rect(
Size size /* 宽度和高度 */
);
Rect(
double top, /* 左上角横坐标 */
double left, /* 左上角纵坐标 */
double width, /* 宽度 */
double height /* 高度 */
);
Rect(
Point topLeft, /* 左上角坐标 */
Size size /* 宽度和高度 */
);
virtual ~Rect();
protected:
// 渲染轮廓
virtual void _renderLine() override;
// 渲染填充色
virtual void _renderFill() override;
};
// 圆角矩形
class RoundRect :
public Shape
{
public:
RoundRect();
RoundRect(
double width, /* 宽度 */
double height, /* 高度 */
double radiusX, /* 圆角半径 */
double radiusY /* 圆角半径 */
);
RoundRect(
Size size, /* 宽度和高度 */
double radiusX, /* 圆角半径 */
double radiusY /* 圆角半径 */
);
RoundRect(
double top, /* 左上角横坐标 */
double left, /* 左上角纵坐标 */
double width, /* 宽度 */
double height, /* 高度 */
double radiusX, /* 圆角半径 */
double radiusY /* 圆角半径 */
);
RoundRect(
Point topLeft, /* 左上角坐标 */
Size size, /* 宽度和高度 */
double radiusX, /* 圆角半径 */
double radiusY /* 圆角半径 */
);
virtual ~RoundRect();
// 获取圆角半径
double getRadiusX() const;
// 获取圆角半径
double getRadiusY() const;
// 设置圆角半径
virtual void setRadiusX(
double radiusX
);
// 设置圆角半径
virtual void setRadiusY(
double radiusY
);
protected:
// 渲染轮廓
virtual void _renderLine() override;
// 渲染填充色
virtual void _renderFill() override;
protected:
float m_fRadiusX;
float m_fRadiusY;
};
// 圆形
class Circle :
public Shape
{
public:
Circle();
Circle(
double radius /* 半径 */
);
Circle(
Point center, /* 圆心坐标 */
double radius /* 半径 */
);
Circle(
double centerX, /* 圆心横坐标 */
double centerY, /* 圆心纵坐标 */
double radius /* 半径 */
);
virtual ~Circle();
// 获取半径
double getRadius() const;
// 设置半径
virtual void setRadius(
double radius
);
public:
// 禁用的函数
void setWidth() {}
// 禁用的函数
void setHeight() {}
// 禁用的函数
void setSize() {}
protected:
// 渲染轮廓
virtual void _renderLine() override;
// 渲染填充色
virtual void _renderFill() override;
protected:
float m_fRadius;
};
// 椭圆形
class Ellipse :
public Shape
{
public:
Ellipse();
Ellipse(
double radiusX, /* 横轴半径 */
double radiusY /* 纵轴半径 */
);
Ellipse(
Point center, /* 圆心坐标 */
double radiusX, /* 横轴半径 */
double radiusY /* 纵轴半径 */
);
Ellipse(
double centerX, /* 圆心横坐标 */
double centerY, /* 圆心纵坐标 */
double radiusX, /* 横轴半径 */
double radiusY /* 纵轴半径 */
);
virtual ~Ellipse();
// 获取横轴半径
double getRadiusX() const;
// 获取纵轴半径
double getRadiusY() const;
// 设置横轴半径
virtual void setRadiusX(
double radiusX
);
// 设置纵轴半径
virtual void setRadiusY(
double radiusY
);
public:
// 禁用的函数
void setWidth() {}
// 禁用的函数
void setHeight() {}
// 禁用的函数
void setSize() {}
protected:
// 渲染轮廓
virtual void _renderLine() override;
// 渲染填充色
virtual void _renderFill() override;
protected:
float m_fRadiusX;
float m_fRadiusY;
};
}