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>
|
|
|
|
|
|
double 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(
|
|
|
|
|
|
double 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>״
|
|
|
|
|
|
virtual void onRender() 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>
|
|
|
|
|
|
virtual void _renderLine() = 0;
|
2018-04-01 00:04:33 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
virtual void _renderFill() = 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>
|
|
|
|
|
|
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 :
|
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-04-02 23:01:38 +08:00
|
|
|
|
double radiusX, /* Բ<>ǰ뾶 */
|
|
|
|
|
|
double 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> */
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Size size, /* <20><><EFBFBD>Ⱥ߶<CDB8> */
|
|
|
|
|
|
double radiusX, /* Բ<>ǰ뾶 */
|
|
|
|
|
|
double radiusY /* Բ<>ǰ뾶 */
|
|
|
|
|
|
);
|
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>ǰ뾶
|
|
|
|
|
|
double getRadiusX() const;
|
2018-03-30 01:41:29 +08:00
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><>ȡԲ<C8A1>ǰ뾶
|
|
|
|
|
|
double getRadiusY() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
|
|
|
|
|
|
virtual void setRadiusX(
|
|
|
|
|
|
double radiusX
|
2017-10-26 17:17:30 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ǰ뾶
|
|
|
|
|
|
virtual void setRadiusY(
|
|
|
|
|
|
double radiusY
|
|
|
|
|
|
);
|
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>
|
|
|
|
|
|
virtual void _renderLine() override;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
virtual void _renderFill() 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-04-02 23:01:38 +08:00
|
|
|
|
double radius /* <20>뾶 */
|
|
|
|
|
|
);
|
|
|
|
|
|
|
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> */
|
|
|
|
|
|
double 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>뾶
|
|
|
|
|
|
double getRadius() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ð뾶
|
|
|
|
|
|
virtual void setRadius(
|
2018-02-27 21:07:43 +08:00
|
|
|
|
double 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>
|
|
|
|
|
|
virtual void _renderLine() override;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
virtual void _renderFill() 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-04-02 23:01:38 +08:00
|
|
|
|
double radiusX, /* <20><><EFBFBD><EFBFBD><EFBFBD>뾶 */
|
|
|
|
|
|
double 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> */
|
|
|
|
|
|
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();
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
double getRadiusX() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
double 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(
|
|
|
|
|
|
double radiusX
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
virtual void setRadiusY(
|
2018-02-27 21:07:43 +08:00
|
|
|
|
double 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>
|
|
|
|
|
|
virtual void _renderLine() override;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
virtual void _renderFill() 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
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|