Magic_Game/core/e2dshape.h

288 lines
3.9 KiB
C
Raw Normal View History

#pragma once
2018-04-21 21:24:46 +08:00
#include "e2dnode.h"
namespace e2d
{
2017-10-28 18:48:21 +08:00
2018-04-01 00:04:33 +08:00
// <20><>״
class Shape :
public Node
2018-04-01 00:04:33 +08:00
{
public:
// <20><>״<EFBFBD><D7B4>ʽ
enum class Style : int
{
SOLID, /* <20><><EFBFBD><EFBFBD> */
ROUND, /* <20><><EFBFBD><EFBFBD> */
FILL, /* <20><><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD> */
};
2018-04-01 00:04:33 +08:00
public:
Shape();
2018-04-01 00:04:33 +08:00
virtual ~Shape();
2018-04-01 00:04:33 +08:00
// <20><>ȡ<EFBFBD><C8A1>ʽ
Style getStyle() const;
2018-04-01 00:04:33 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
Color getFillColor() const;
2018-04-01 00:04:33 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
Color getLineColor() const;
2018-04-01 00:04:33 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double getStrokeWidth() const;
2018-04-01 00:04:33 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setFillColor(
Color fillColor
2018-04-01 00:04:33 +08:00
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setLineColor(
Color lineColor
2018-04-01 00:04:33 +08:00
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setStrokeWidth(
double strokeWidth
2018-04-01 00:04:33 +08:00
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
void setStyle(Style style);
2018-04-01 00:04:33 +08:00
// <20><>Ⱦ<EFBFBD><C8BE>״
virtual void onRender() override;
2018-04-01 00:04:33 +08:00
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() = 0;
2018-04-01 00:04:33 +08:00
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() = 0;
2018-04-01 00:04:33 +08:00
protected:
Style _style;
float _strokeWidth;
Color _lineColor;
Color _fillColor;
2018-04-01 00:04:33 +08:00
};
// <20><><EFBFBD><EFBFBD>
class Rect :
public Shape
{
public:
Rect();
Rect(
2018-05-17 12:22:52 +08:00
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
Rect(
2018-05-17 12:22:52 +08:00
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
2018-05-17 12:22:52 +08:00
static Rect * create();
static Rect * create(
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
2018-05-17 12:22:52 +08:00
static Rect * create(
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
virtual ~Rect();
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() override;
};
// Բ<>Ǿ<EFBFBD><C7BE><EFBFBD>
class RoundRect :
public Shape
{
public:
RoundRect();
RoundRect(
2018-05-17 12:22:52 +08:00
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
double radiusX, /* Բ<>ǰ뾶 */
double radiusY /* Բ<>ǰ뾶 */
);
RoundRect(
2018-05-17 12:22:52 +08:00
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
double radiusX, /* Բ<>ǰ뾶 */
double radiusY /* Բ<>ǰ뾶 */
);
2018-05-17 12:22:52 +08:00
static RoundRect * create();
static RoundRect * create(
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
double radiusX, /* Բ<>ǰ뾶 */
double radiusY /* Բ<>ǰ뾶 */
);
2018-05-17 12:22:52 +08:00
static RoundRect * create(
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
double radiusX, /* Բ<>ǰ뾶 */
double radiusY /* Բ<>ǰ뾶 */
);
virtual ~RoundRect();
// <20><>ȡԲ<C8A1>ǰ뾶
double getRadiusX() const;
// <20><>ȡԲ<C8A1>ǰ뾶
double getRadiusY() const;
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
virtual void setRadiusX(
double radiusX
);
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
virtual void setRadiusY(
double radiusY
);
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() override;
2018-03-07 20:14:58 +08:00
protected:
float _radiusX;
float _radiusY;
};
// Բ<><D4B2>
class Circle :
public Shape
{
public:
Circle();
Circle(
double radius /* <20>뾶 */
);
Circle(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
double radius /* <20>뾶 */
);
2018-05-17 12:22:52 +08:00
static Circle * create();
static Circle * create(
double radius /* <20>뾶 */
);
static Circle * create(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
double radius /* <20>뾶 */
2017-10-29 23:48:32 +08:00
);
virtual ~Circle();
2017-10-29 23:48:32 +08:00
// <20><>ȡ<EFBFBD>
double getRadius() const;
// <20><><EFBFBD>ð뾶
virtual void setRadius(
2018-02-27 21:07:43 +08:00
double radius
);
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() override;
2018-03-07 20:14:58 +08:00
protected:
float _radius;
};
// <20><>Բ<EFBFBD><D4B2>
class Ellipse :
public Shape
{
public:
Ellipse();
Ellipse(
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
double radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
);
Ellipse(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
double radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
2017-10-29 23:48:32 +08:00
);
2018-05-17 12:22:52 +08:00
static Ellipse * create();
static Ellipse * create(
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
double radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
);
static Ellipse * create(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
double radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
);
virtual ~Ellipse();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
double getRadiusX() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
double getRadiusY() const;
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>
virtual void setRadiusX(
double radiusX
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setRadiusY(
2018-02-27 21:07:43 +08:00
double radiusY
);
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() override;
2018-03-07 20:14:58 +08:00
protected:
float _radiusX;
float _radiusY;
};
}