2017-10-26 17:17:30 +08:00
|
|
|
|
#pragma once
|
2018-04-21 21:24:46 +08:00
|
|
|
|
#include "e2dnode.h"
|
2017-10-26 17:17:30 +08:00
|
|
|
|
|
|
|
|
|
|
namespace e2d
|
|
|
|
|
|
{
|
|
|
|
|
|
|
2017-10-28 18:48:21 +08:00
|
|
|
|
|
2018-04-01 00:04:33 +08:00
|
|
|
|
// <20><>״
|
2018-04-02 23:01:38 +08:00
|
|
|
|
class Shape :
|
|
|
|
|
|
public Node
|
2018-04-01 00:04:33 +08:00
|
|
|
|
{
|
2018-05-17 15:22:14 +08:00
|
|
|
|
public:
|
|
|
|
|
|
// <20><>״<EFBFBD><D7B4>ʽ
|
2018-05-23 00:03:47 +08:00
|
|
|
|
enum class Style
|
2018-05-17 15:22:14 +08:00
|
|
|
|
{
|
2018-05-24 20:37:34 +08:00
|
|
|
|
Solid, /* <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
Round, /* <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
Fill, /* <20><><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD> */
|
2018-05-17 15:22:14 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2018-04-01 00:04:33 +08:00
|
|
|
|
public:
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Shape();
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
virtual ~Shape();
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ʽ
|
2018-05-17 15:22:14 +08:00
|
|
|
|
Style getStyle() const;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color getFillColor() const;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color getLineColor() const;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +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
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
void setFillColor(
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color fillColor
|
2018-04-01 00:04:33 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
void setLineColor(
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color lineColor
|
2018-04-01 00:04:33 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +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
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
2018-05-17 15:22:14 +08:00
|
|
|
|
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
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE>״
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void onRender() const override;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
protected:
|
2018-07-07 15:12:18 +08:00
|
|
|
|
E2D_DISABLE_COPY(Shape);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderLine() const = 0;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderFill() const = 0;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-05-17 15:22:14 +08:00
|
|
|
|
Style _style;
|
2018-05-09 00:34:15 +08:00
|
|
|
|
float _strokeWidth;
|
|
|
|
|
|
Color _lineColor;
|
|
|
|
|
|
Color _fillColor;
|
2018-05-24 20:10:11 +08:00
|
|
|
|
ID2D1StrokeStyle * _strokeStyle;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-31 11:59:51 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
2018-05-22 22:29:42 +08:00
|
|
|
|
class RectShape :
|
2018-04-02 23:01:38 +08:00
|
|
|
|
public Shape
|
2017-10-26 17:17:30 +08:00
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-05-22 22:29:42 +08:00
|
|
|
|
RectShape();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
2018-05-24 16:25:05 +08:00
|
|
|
|
explicit RectShape(
|
2018-05-17 12:22:52 +08:00
|
|
|
|
Size size /* <20><><EFBFBD>Ⱥ߶<CDB8> */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
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> */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Size size /* <20><><EFBFBD>Ⱥ߶<CDB8> */
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-22 22:29:42 +08:00
|
|
|
|
virtual ~RectShape();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-07-07 15:12:18 +08:00
|
|
|
|
E2D_DISABLE_COPY(RectShape);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderLine() const override;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderFill() const override;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Բ<>Ǿ<EFBFBD><C7BE><EFBFBD>
|
2018-05-22 22:29:42 +08:00
|
|
|
|
class RoundRectShape :
|
2018-04-02 23:01:38 +08:00
|
|
|
|
public Shape
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-05-22 22:29:42 +08:00
|
|
|
|
RoundRectShape();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
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-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
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> */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Size size, /* <20><><EFBFBD>Ⱥ߶<CDB8> */
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radiusX, /* Բ<>ǰ뾶 */
|
|
|
|
|
|
float radiusY /* Բ<>ǰ뾶 */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
2017-10-26 17:17:30 +08:00
|
|
|
|
|
2018-05-22 22:29:42 +08:00
|
|
|
|
virtual ~RoundRectShape();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡԲ<C8A1>ǰ뾶
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float getRadiusX() const;
|
2018-03-30 01:41:29 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡԲ<C8A1>ǰ뾶
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float getRadiusY() const;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
|
|
|
|
|
|
virtual void setRadiusX(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radiusX
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
|
|
|
|
|
|
virtual void setRadiusY(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radiusY
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
2018-03-31 11:59:51 +08:00
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-07-07 15:12:18 +08:00
|
|
|
|
E2D_DISABLE_COPY(RoundRectShape);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderLine() const override;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderFill() const override;
|
2018-03-07 20:14:58 +08:00
|
|
|
|
|
2017-10-26 17:17:30 +08:00
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
float _radiusX;
|
|
|
|
|
|
float _radiusY;
|
2017-10-26 17:17:30 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-31 11:59:51 +08:00
|
|
|
|
// Բ<><D4B2>
|
2018-05-22 22:29:42 +08:00
|
|
|
|
class CircleShape :
|
2018-04-02 23:01:38 +08:00
|
|
|
|
public Shape
|
2017-10-26 17:17:30 +08:00
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-05-22 22:29:42 +08:00
|
|
|
|
CircleShape();
|
2017-10-26 17:17:30 +08:00
|
|
|
|
|
2018-05-24 16:25:05 +08:00
|
|
|
|
explicit CircleShape(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radius /* <20>뾶 */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-24 16:25:05 +08:00
|
|
|
|
explicit CircleShape(
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Point center, /* Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radius /* <20>뾶 */
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-22 22:29:42 +08:00
|
|
|
|
virtual ~CircleShape();
|
2017-10-29 23:48:32 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD>뾶
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float getRadius() const;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ð뾶
|
|
|
|
|
|
virtual void setRadius(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radius
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-03-31 11:59:51 +08:00
|
|
|
|
protected:
|
2018-07-07 15:12:18 +08:00
|
|
|
|
E2D_DISABLE_COPY(CircleShape);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderLine() const override;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderFill() const override;
|
2018-03-07 20:14:58 +08:00
|
|
|
|
|
2017-10-26 17:17:30 +08:00
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
float _radius;
|
2017-10-26 17:17:30 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-31 11:59:51 +08:00
|
|
|
|
// <20><>Բ<EFBFBD><D4B2>
|
2018-05-22 22:29:42 +08:00
|
|
|
|
class EllipseShape :
|
2018-04-02 23:01:38 +08:00
|
|
|
|
public Shape
|
2017-10-26 17:17:30 +08:00
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-05-22 22:29:42 +08:00
|
|
|
|
EllipseShape();
|
2017-10-26 17:17:30 +08:00
|
|
|
|
|
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>뾶 */
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-24 16:25:05 +08:00
|
|
|
|
explicit EllipseShape(
|
2018-04-02 23:01:38 +08:00
|
|
|
|
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();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>뾶
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float getRadiusX() const;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>뾶
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float getRadiusY() const;
|
2018-03-30 01:41:29 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
virtual void setRadiusX(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radiusX
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
virtual void setRadiusY(
|
2018-07-28 20:06:27 +08:00
|
|
|
|
float radiusY
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-03-31 11:59:51 +08:00
|
|
|
|
protected:
|
2018-07-07 15:12:18 +08:00
|
|
|
|
E2D_DISABLE_COPY(EllipseShape);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderLine() const override;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
2018-07-28 18:44:37 +08:00
|
|
|
|
virtual void _renderFill() const override;
|
2018-03-07 20:14:58 +08:00
|
|
|
|
|
2017-10-26 17:17:30 +08:00
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
float _radiusX;
|
|
|
|
|
|
float _radiusY;
|
2017-10-26 17:17:30 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|