src/tools/drawtool.cpp

changeset 108
94c92c923713
parent 106
128efb9d148b
child 109
40a1cf2f38f5
--- a/src/tools/drawtool.cpp	Sat Jul 24 01:50:38 2021 +0300
+++ b/src/tools/drawtool.cpp	Sun Jul 25 13:49:37 2021 +0300
@@ -1,6 +1,10 @@
 #include <QMessageBox>
 #include "drawtool.h"
 
+static const QBrush brush = {Qt::white};
+static const QPen pen = {Qt::black};
+static const QBrush polygonBrush = {QColor{64, 255, 128}};
+
 DrawTool::DrawTool(QObject* parent) :
 	BaseTool{parent} {}
 
@@ -29,9 +33,11 @@
 		else
 		{
 			this->polygon.push_back(pos);
-			auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview).polygons;
-			previewLayer.clear();
-			previewLayer.push_back({this->polygon});
+			auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview);
+			previewLayer.points.resize(this->polygon.size());
+			previewLayer.points.back() = {pos, brush, pen};
+			previewLayer.polygons.clear();
+			previewLayer.polygons.push_back({geom::NPolygon{this->polygon}, polygonBrush, pen});
 			if (this->polygon.size() == 4)
 			{
 				QMessageBox::information(nullptr, "test", "close the polygon");
@@ -41,6 +47,27 @@
 	return true;
 }
 
+bool DrawTool::mouseMove(const Canvas::MouseMoveInfo& info)
+{
+	if (this->polygon.size() < 4 and info.worldPosition.has_value())
+	{
+		auto& previewLayer = info.invoker->modifyPreviewLayer(Canvas::DrawToolPreview);
+		previewLayer.points.resize(this->polygon.size() + 1);
+		previewLayer.points.back() = {info.worldPosition.value(), brush, pen};
+		if (previewLayer.polygons.size() > 0)
+		{
+			auto& polygon = previewLayer.polygons.back();
+			polygon.geometry.points.resize(this->polygon.size() + 1);
+			polygon.geometry.points.back() = info.worldPosition.value();
+		}
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
 void DrawTool::reset()
 {
 	this->polygon.clear();

mercurial