Magic_Game/core/e2dshape.h

254 lines
3.5 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
{
2018-05-24 20:37:34 +08:00
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>
2018-07-28 20:06:27 +08:00
float 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(
2018-07-28 20:06:27 +08:00
float 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
2018-05-24 20:10:11 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BDBB>ʽ
void setLineJoin(
LineJoin lineJoin
);
// <20><>Ⱦ<EFBFBD><C8BE>״
virtual void onRender() const override;
2018-04-01 00:04:33 +08:00
protected:
E2D_DISABLE_COPY(Shape);
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() const = 0;
2018-04-01 00:04:33 +08:00
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() const = 0;
2018-04-01 00:04:33 +08:00
protected:
Style _style;
float _strokeWidth;
Color _lineColor;
Color _fillColor;
2018-05-24 20:10:11 +08:00
ID2D1StrokeStyle * _strokeStyle;
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-24 16:25:05 +08:00
explicit RectShape(
2018-05-17 12:22:52 +08:00
Size size /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
);
2018-05-24 16:25:05 +08:00
explicit 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:
E2D_DISABLE_COPY(RectShape);
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() const override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() const 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-24 16:25:05 +08:00
explicit RoundRectShape(
2018-05-17 12:22:52 +08:00
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
2018-07-28 20:06:27 +08:00
float radiusX, /* Բ<>ǰ뾶 */
float radiusY /* Բ<>ǰ뾶 */
);
2018-05-24 16:25:05 +08:00
explicit RoundRectShape(
2018-05-17 12:22:52 +08:00
Point topLeft, /* <20><><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD> */
Size size, /* <20><><EFBFBD>Ⱥ͸߶<CDB8> */
2018-07-28 20:06:27 +08:00
float radiusX, /* Բ<>ǰ뾶 */
float radiusY /* Բ<>ǰ뾶 */
);
2018-05-22 22:29:42 +08:00
virtual ~RoundRectShape();
// <20><>ȡԲ<C8A1>ǰ뾶
2018-07-28 20:06:27 +08:00
float getRadiusX() const;
// <20><>ȡԲ<C8A1>ǰ뾶
2018-07-28 20:06:27 +08:00
float getRadiusY() const;
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
virtual void setRadiusX(
2018-07-28 20:06:27 +08:00
float radiusX
);
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
virtual void setRadiusY(
2018-07-28 20:06:27 +08:00
float radiusY
);
protected:
E2D_DISABLE_COPY(RoundRectShape);
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() const override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() const 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-24 16:25:05 +08:00
explicit CircleShape(
2018-07-28 20:06:27 +08:00
float radius /* <20>뾶 */
);
2018-05-24 16:25:05 +08:00
explicit CircleShape(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
2018-07-28 20:06:27 +08:00
float radius /* <20>뾶 */
);
2018-05-22 22:29:42 +08:00
virtual ~CircleShape();
2017-10-29 23:48:32 +08:00
// <20><>ȡ<EFBFBD>
2018-07-28 20:06:27 +08:00
float getRadius() const;
// <20><><EFBFBD>ð뾶
virtual void setRadius(
2018-07-28 20:06:27 +08:00
float radius
);
protected:
E2D_DISABLE_COPY(CircleShape);
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() const override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() const 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-24 16:25:05 +08:00
explicit EllipseShape(
2018-07-28 20:06:27 +08:00
float radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
float radiusY /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
);
2018-05-24 16:25:05 +08:00
explicit EllipseShape(
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
2018-07-28 20:06:27 +08:00
float radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
float 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>
2018-07-28 20:06:27 +08:00
float getRadiusX() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
2018-07-28 20:06:27 +08:00
float getRadiusY() const;
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>
virtual void setRadiusX(
2018-07-28 20:06:27 +08:00
float radiusX
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setRadiusY(
2018-07-28 20:06:27 +08:00
float radiusY
);
protected:
E2D_DISABLE_COPY(EllipseShape);
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
virtual void _renderLine() const override;
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
virtual void _renderFill() const override;
2018-03-07 20:14:58 +08:00
protected:
float _radiusX;
float _radiusY;
};
}