Separate coord space transform class for more correct scaling

This commit is contained in:
Yousef Khadadeh 2025-08-04 10:47:24 +03:00
parent 46370e5762
commit d261293d6b
7 changed files with 307 additions and 7 deletions

View file

@ -283,7 +283,7 @@ void DrawingProgramSelection::update() {
scaleAmount = centerToScaleStartNorm / centerToScaleCurrentNorm;
selectionTransformCoords = startingSelectionTransformCoords;
selectionTransformCoords.scale_about(scaleData.centerPos, scaleAmount, flipScale);
selectionTransformCoords.scale_about(scaleData.centerPos, WorldMultiplier(scaleAmount, flipScale));
}
}
else {
@ -313,9 +313,9 @@ void DrawingProgramSelection::update() {
deselect_all();
else if(drawP.world.main.input.key(InputManager::KEY_DRAW_DELETE).pressed)
delete_all();
else if(drawP.world.main.input.key(InputManager::KEY_COPY).pressed && startingSelectionTransformCoords == CoordSpaceHelper())
else if(drawP.world.main.input.key(InputManager::KEY_COPY).pressed && startingSelectionTransformCoords == CoordSpaceHelperTransform())
selection_to_clipboard();
else if(drawP.world.main.input.key(InputManager::KEY_CUT).pressed && startingSelectionTransformCoords == CoordSpaceHelper()) {
else if(drawP.world.main.input.key(InputManager::KEY_CUT).pressed && startingSelectionTransformCoords == CoordSpaceHelperTransform()) {
selection_to_clipboard();
delete_all();
}
@ -448,7 +448,7 @@ void DrawingProgramSelection::reset_selection_data() {
}
void DrawingProgramSelection::reset_transform_data() {
selectionTransformCoords = CoordSpaceHelper();
selectionTransformCoords = CoordSpaceHelperTransform();
transformOpHappening = TransformOperation::NONE;
translateData = TranslationData();
scaleData = ScaleData();

View file

@ -1,5 +1,6 @@
#pragma once
#include "DrawingProgramCache.hpp"
#include "../CoordSpaceHelperTransform.hpp"
class DrawingProgram;
@ -40,7 +41,7 @@ class DrawingProgramSelection {
std::array<WorldVec, 4> selectionRectPoints;
CoordSpaceHelper selectionTransformCoords;
CoordSpaceHelperTransform selectionTransformCoords;
std::unordered_set<CollabListType::ObjectInfoPtr> selectedSet;
DrawingProgramCache cache;
DrawingProgram& drawP;
@ -53,7 +54,7 @@ class DrawingProgramSelection {
ROTATE
} transformOpHappening = TransformOperation::NONE;
CoordSpaceHelper startingSelectionTransformCoords;
CoordSpaceHelperTransform startingSelectionTransformCoords;
struct TranslationData {
WorldVec startPos;