From 976c71215b614f80ad718fac83bd04b8fbb12365 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Wed, 31 Dec 2025 16:43:08 +0300 Subject: [PATCH] Fixed scale up amount calculations --- src/Bookmarks/BookmarkListItem.cpp | 2 +- src/CanvasComponents/CanvasComponentContainer.cpp | 2 +- src/ClientData.cpp | 4 ++-- src/DrawingProgram/DrawingProgram.cpp | 2 +- src/ScaleUpCanvas.cpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Bookmarks/BookmarkListItem.cpp b/src/Bookmarks/BookmarkListItem.cpp index c5fead5..147ec92 100644 --- a/src/Bookmarks/BookmarkListItem.cpp +++ b/src/Bookmarks/BookmarkListItem.cpp @@ -34,7 +34,7 @@ void BookmarkListItem::scale_up(const WorldScalar& scaleUpAmount) { i.obj->scale_up(scaleUpAmount); } else - bookmarkData->coords.inverseScale *= scaleUpAmount; + bookmarkData->coords.scale_about(WorldVec{0, 0}, scaleUpAmount, true); } bool BookmarkListItem::is_folder() const { diff --git a/src/CanvasComponents/CanvasComponentContainer.cpp b/src/CanvasComponents/CanvasComponentContainer.cpp index d5aba33..6133824 100644 --- a/src/CanvasComponents/CanvasComponentContainer.cpp +++ b/src/CanvasComponents/CanvasComponentContainer.cpp @@ -144,7 +144,7 @@ CanvasComponentContainer::TransformDrawData CanvasComponentContainer::calculate_ } void CanvasComponentContainer::scale_up(const WorldScalar& scaleUpAmount) { - coords.inverseScale *= scaleUpAmount; + coords.scale_about(WorldVec{0, 0}, scaleUpAmount, true); calculate_world_bounds(); } diff --git a/src/ClientData.cpp b/src/ClientData.cpp index cfba1da..6de8e48 100644 --- a/src/ClientData.cpp +++ b/src/ClientData.cpp @@ -59,7 +59,7 @@ void ClientData::register_class(World& world) { uint32_t oldGridSize = o->gridSize; a(o->gridSize); if(oldGridSize < o->gridSize) - world.scale_up(WorldScalar(o->gridSize - oldGridSize) * CANVAS_SCALE_UP_STEP); + world.scale_up(get_canvas_scale_up_amount(o->gridSize, oldGridSize)); break; } } @@ -101,7 +101,7 @@ void ClientData::register_class(World& world) { uint32_t oldGridSize = o->gridSize; a(o->gridSize); if(oldGridSize < o->gridSize) - world.scale_up(WorldScalar(o->gridSize - oldGridSize) * CANVAS_SCALE_UP_STEP); + world.scale_up(get_canvas_scale_up_amount(o->gridSize, oldGridSize)); o.send_server_update_to_all_clients(RELIABLE_COMMAND_CHANNEL, [](const NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive & a) { a(ClientDataCommand::SET_GRID_SIZE, o->gridSize); }); diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 57c0f7f..22fd4a4 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -74,7 +74,7 @@ void DrawingProgram::init_server_callbacks() { if(clientData->get_grid_size() < world.ownClientData->get_grid_size()) { WorldScalar scaleUpAmount = get_canvas_scale_up_amount(world.ownClientData->get_grid_size(), clientData->get_grid_size()); for(auto& [netID, coord] : transforms) - coord.inverseScale *= scaleUpAmount; + coord.scale_about(WorldVec{0, 0}, scaleUpAmount, true); } process_transform_message(transforms); diff --git a/src/ScaleUpCanvas.cpp b/src/ScaleUpCanvas.cpp index 2a7a2a5..8bc7a95 100644 --- a/src/ScaleUpCanvas.cpp +++ b/src/ScaleUpCanvas.cpp @@ -1,5 +1,5 @@ #include "ScaleUpCanvas.hpp" WorldScalar get_canvas_scale_up_amount(uint32_t newGridSize, uint32_t oldGridSize) { - return WorldScalar(newGridSize - oldGridSize) * CANVAS_SCALE_UP_STEP; + return FixedPoint::pow_int(CANVAS_SCALE_UP_STEP, newGridSize - oldGridSize); }