Undo actions not generated for transform actions that didn't do anything
This commit is contained in:
parent
dbec3641d8
commit
b6c771c862
4 changed files with 23 additions and 1 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ class CoordSpaceHelperTransform {
|
|||
SCALE
|
||||
};
|
||||
|
||||
bool is_identity();
|
||||
|
||||
private:
|
||||
void set_rotation(double newRotation);
|
||||
void translate(const WorldVec& translation);
|
||||
|
|
|
|||
|
|
@ -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<WorldUndoManager::UndoObjectID> undoIDList;
|
||||
std::vector<std::pair<CoordSpaceHelper, CoordSpaceHelper>> 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<CanvasComponentContainer::ObjInfo*> DrawingProgramSelection::get_selection_as_set() {
|
||||
return std::unordered_set<CanvasComponentContainer::ObjInfo*>(selectedSet.begin(), selectedSet.end());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue