diff --git a/src/CoordSpaceHelperTransform.cpp b/src/CoordSpaceHelperTransform.cpp index a5a486d..4435197 100644 --- a/src/CoordSpaceHelperTransform.cpp +++ b/src/CoordSpaceHelperTransform.cpp @@ -43,6 +43,20 @@ bool CoordSpaceHelperTransform::operator!=(const CoordSpaceHelperTransform& othe // return coord; //} +bool CoordSpaceHelperTransform::is_identity() { + switch(transformType) { + case TransformType::NONE: + return true; + case TransformType::TRANSLATE: + return pos == WorldVec{0, 0}; + case TransformType::SCALE: + return inverseScale == WorldScalar(1); + case TransformType::ROTATE: + return rotation == 0.0; + } + return true; +} + WorldVec CoordSpaceHelperTransform::from_space_world(const WorldVec& coord) const { switch(transformType) { case TransformType::NONE: diff --git a/src/CoordSpaceHelperTransform.hpp b/src/CoordSpaceHelperTransform.hpp index b200f7a..bdb8025 100644 --- a/src/CoordSpaceHelperTransform.hpp +++ b/src/CoordSpaceHelperTransform.hpp @@ -36,6 +36,8 @@ class CoordSpaceHelperTransform { SCALE }; + bool is_identity(); + private: void set_rotation(double newRotation); void translate(const WorldVec& translation); diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index 012a51c..f2c125a 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -163,7 +163,7 @@ bool DrawingProgramSelection::mouse_collided_with_rotate_handle_point() { } void DrawingProgramSelection::commit_transform_selection() { - if(is_being_transformed()) { + if(!is_empty_transform()) { std::vector undoIDList; std::vector> transformDataList; for(auto& comp : selectedSet) { @@ -440,6 +440,10 @@ bool DrawingProgramSelection::is_being_transformed() { return transformOpHappening != TransformOperation::NONE; } +bool DrawingProgramSelection::is_empty_transform() { + return transformOpHappening == TransformOperation::NONE || selectionTransformCoords.is_identity(); +} + std::unordered_set DrawingProgramSelection::get_selection_as_set() { return std::unordered_set(selectedSet.begin(), selectedSet.end()); } diff --git a/src/DrawingProgram/DrawingProgramSelection.hpp b/src/DrawingProgram/DrawingProgramSelection.hpp index 335d530..1f6149d 100644 --- a/src/DrawingProgram/DrawingProgramSelection.hpp +++ b/src/DrawingProgram/DrawingProgramSelection.hpp @@ -29,6 +29,8 @@ class DrawingProgramSelection { bool mouse_collided_with_rotate_center_handle_point(); bool mouse_collided_with_rotate_handle_point(); + bool is_empty_transform(); + void commit_transform_selection(); void rebuild_cam_space(); Vector2f get_rotation_point_pos_from_angle(double angle);