Added minimum distance between points when creating objects, and also deselecting objects with lasso tool improved
This commit is contained in:
parent
7ffa039061
commit
6d8d532952
7 changed files with 22 additions and 1 deletions
|
|
@ -275,3 +275,12 @@ template <typename T> std::string vec_pretty(const Vector<T, 2>& a) {
|
|||
ss << "[" << a.x() << ", " << a.y() << "]";
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template <typename T> Vector<T, 2> ensure_points_have_distance(const Vector<T, 2>& a, const Vector<T, 2>& b, T d) {
|
||||
Vector<T, 2> toRet = b;
|
||||
if(std::abs(a.x() - b.x()) < d)
|
||||
toRet.x() = a.x() + d;
|
||||
if(std::abs(a.y() - b.y()) < d)
|
||||
toRet.y() = a.y() + d;
|
||||
return toRet;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
class DrawingProgram;
|
||||
|
||||
#define MINIMUM_DISTANCE_BETWEEN_BOUNDS 10.0f
|
||||
|
||||
enum class DrawingProgramToolType : int {
|
||||
BRUSH = 0,
|
||||
ERASER,
|
||||
|
|
|
|||
|
|
@ -7,13 +7,14 @@
|
|||
|
||||
class DrawingProgram;
|
||||
|
||||
|
||||
class EditTool : public DrawingProgramToolBase {
|
||||
public:
|
||||
struct HandleData {
|
||||
Vector2f* p;
|
||||
Vector2f* min;
|
||||
Vector2f* max;
|
||||
float minimumDistanceBetweenBoundsAndPoint = 10.0f;
|
||||
float minimumDistanceBetweenBoundsAndPoint = MINIMUM_DISTANCE_BETWEEN_BOUNDS;
|
||||
};
|
||||
|
||||
EditTool(DrawingProgram& initDrawP);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "../MainProgram.hpp"
|
||||
#include "../DrawData.hpp"
|
||||
#include "DrawingProgramToolBase.hpp"
|
||||
#include "Helpers/MathExtras.hpp"
|
||||
#include "Helpers/SCollision.hpp"
|
||||
#include "Helpers/Serializers.hpp"
|
||||
#include "../InputManager.hpp"
|
||||
|
|
@ -46,6 +47,7 @@ void EllipseDrawTool::tool_update() {
|
|||
controls.intermediateItem->d.strokeWidth = drawP.controls.relativeWidth;
|
||||
controls.intermediateItem->d.p1 = controls.startAt;
|
||||
controls.intermediateItem->d.p2 = controls.startAt;
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->d.fillStrokeMode = static_cast<uint8_t>(controls.fillStrokeMode);
|
||||
controls.intermediateItem->coords = drawP.world.drawData.cam.c;
|
||||
controls.intermediateItem->lastUpdateTime = std::chrono::steady_clock::now();
|
||||
|
|
@ -68,6 +70,7 @@ void EllipseDrawTool::tool_update() {
|
|||
}
|
||||
controls.intermediateItem->d.p1 = cwise_vec_min(controls.startAt, newPos);
|
||||
controls.intermediateItem->d.p2 = cwise_vec_max(controls.startAt, newPos);
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->client_send_update(drawP);
|
||||
controls.intermediateItem->commit_update(drawP);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,6 +93,8 @@ void LassoSelectTool::tool_update() {
|
|||
drawP.selection.add_from_cam_coord_collider_to_selection(cC);
|
||||
}
|
||||
}
|
||||
else if(!drawP.world.main.input.key(InputManager::KEY_GENERIC_LSHIFT).held && !drawP.world.main.input.key(InputManager::KEY_GENERIC_LALT).held)
|
||||
drawP.selection.deselect_all();
|
||||
controls.selectionMode = 0;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ void RectDrawTool::tool_update() {
|
|||
controls.intermediateItem->d.strokeWidth = drawP.controls.relativeWidth;
|
||||
controls.intermediateItem->d.p1 = controls.startAt;
|
||||
controls.intermediateItem->d.p2 = controls.startAt;
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->d.fillStrokeMode = static_cast<uint8_t>(controls.fillStrokeMode);
|
||||
controls.intermediateItem->coords = drawP.world.drawData.cam.c;
|
||||
controls.intermediateItem->lastUpdateTime = std::chrono::steady_clock::now();
|
||||
|
|
@ -65,6 +66,7 @@ void RectDrawTool::tool_update() {
|
|||
}
|
||||
controls.intermediateItem->d.p1 = cwise_vec_min(controls.startAt, newPos);
|
||||
controls.intermediateItem->d.p2 = cwise_vec_max(controls.startAt, newPos);
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->client_send_update(drawP);
|
||||
controls.intermediateItem->commit_update(drawP);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ void TextBoxTool::tool_update() {
|
|||
controls.startAt = drawP.world.main.input.mouse.pos;
|
||||
controls.endAt = controls.startAt;
|
||||
controls.intermediateItem->d.p1 = controls.intermediateItem->d.p2 = controls.startAt;
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->d.textColor = drawP.controls.foregroundColor;
|
||||
controls.intermediateItem->d.textSize = controls.textRelativeSize;
|
||||
controls.intermediateItem->d.editing = true;
|
||||
|
|
@ -61,6 +62,7 @@ void TextBoxTool::tool_update() {
|
|||
controls.endAt = newPos;
|
||||
controls.intermediateItem->d.p1 = cwise_vec_min(controls.endAt, controls.startAt);
|
||||
controls.intermediateItem->d.p2 = cwise_vec_max(controls.endAt, controls.startAt);
|
||||
controls.intermediateItem->d.p2 = ensure_points_have_distance(controls.intermediateItem->d.p1, controls.intermediateItem->d.p2, MINIMUM_DISTANCE_BETWEEN_BOUNDS);
|
||||
controls.intermediateItem->lastUpdateTime = std::chrono::steady_clock::now();
|
||||
if(!drawP.controls.leftClickHeld) {
|
||||
auto editTool = std::make_unique<EditTool>(drawP);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue