Magic_Game/core/e2dshape.h

238 lines
3.1 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>ʽ
2018-05-23 00:03:47 +08:00
enum class Style
{
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>
2018-05-22 22:29:42 +08:00
class RectShape :
public Shape
{
public:
2018-05-22 22:29:42 +08:00
RectShape();
2018-05-22 22:29:42 +08:00
RectShape(
2018-05-17 12:22:52 +08:00
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
2018-05-22 22:29:42 +08:00
RectShape(
2018-05-17 12:22:52 +08:00
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
2018-05-22 22:29:42 +08:00
virtual ~RectShape();
protected:
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() override;
};
// Բ<>Ǿ<EFBFBD><C7BE><EFBFBD>
2018-05-22 22:29:42 +08:00
class RoundRectShape :
public Shape
{
public:
2018-05-22 22:29:42 +08:00
RoundRectShape();
2018-05-22 22:29:42 +08:00
RoundRectShape(
2018-05-17 12:22:52 +08:00
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
double radiusX, /* Բ<>ǰ뾶 */
double radiusY /* Բ<>ǰ뾶 */
);
2018-05-22 22:29:42 +08:00
RoundRectShape(
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-22 22:29:42 +08:00
virtual ~RoundRectShape();
// <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>
2018-05-22 22:29:42 +08:00
class CircleShape :
public Shape
{
public:
2018-05-22 22:29:42 +08:00
CircleShape();
2018-05-22 22:29:42 +08:00
CircleShape(
double radius /* <20>뾶 */
);
2018-05-22 22:29:42 +08:00
CircleShape(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
double radius /* <20>뾶 */
);
2018-05-22 22:29:42 +08:00
virtual ~CircleShape();
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>
2018-05-22 22:29:42 +08:00
class EllipseShape :
public Shape
{
public:
2018-05-22 22:29:42 +08:00
EllipseShape();
2018-05-22 22:29:42 +08:00
EllipseShape(
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
double radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
);
2018-05-22 22:29:42 +08:00
EllipseShape(
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-22 22:29:42 +08:00
virtual ~EllipseShape();
// <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;
};
}