From 3cadba1fc3f67ef7ad825e8d155871852299da73 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Thu, 25 Sep 2025 12:26:11 +0300 Subject: [PATCH] Improved grid visuals to allow for more of the grid to be displayed on the screen --- src/GridManager.cpp | 2 +- src/WorldGrid.cpp | 53 +++++++++++++++++---------------------------- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/src/GridManager.cpp b/src/GridManager.cpp index 664089c..9e6aaf4 100644 --- a/src/GridManager.cpp +++ b/src/GridManager.cpp @@ -28,7 +28,7 @@ ServerClientID GridManager::add_default_grid(const std::string& newName) { ServerClientID newID = world.get_new_id(); WorldGrid g; g.name = newName; - g.color = color_mul_alpha(convert_vec4(world.canvasTheme.toolFrontColor), 0.6f); + g.color = color_mul_alpha(convert_vec4(world.canvasTheme.toolFrontColor), 0.4f); g.size = world.drawData.cam.c.inverseScale * WorldScalar(WorldGrid::GRID_UNIT_PIXEL_SIZE); g.offset = world.drawData.cam.c.pos + world.drawData.cam.c.dir_from_space(world.main.window.size.cast() * 0.5f); grids[newID] = g; diff --git a/src/WorldGrid.cpp b/src/WorldGrid.cpp index ac02db1..192c1d7 100644 --- a/src/WorldGrid.cpp +++ b/src/WorldGrid.cpp @@ -9,7 +9,7 @@ sk_sp WorldGrid::squarePointEffect; sk_sp WorldGrid::squareLinesEffect; sk_sp WorldGrid::ruledEffect; Vector2f WorldGrid::oldWindowSize = Vector2f{0.0f, 0.0f}; -unsigned WorldGrid::GRID_UNIT_PIXEL_SIZE = 50; +unsigned WorldGrid::GRID_UNIT_PIXEL_SIZE = 25; // NOTE: Skia shaders return premultiplied alpha colors @@ -226,11 +226,13 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa WorldScalar divSize; WorldScalar gridCoordDivSize; + float gridPointSizeDefault = 4.0f; + if(sizeDetermineSubdivisionsToRemove > WorldScalar(1)) { double divLogDouble, divLogFraction; divLogFraction = std::modf(static_cast(FixedPoint::log(sizeDetermineSubdivisionsToRemove, WorldScalar(subdivisions == 1 ? 2 : subdivisions))), &divLogDouble); uint64_t divLog = divLogDouble; - if(divLog >= 2 && !removeDivisionsOutwards) + if(divLog >= 1 && !removeDivisionsOutwards) return; WorldScalar logMultiplier = FixedPoint::exp_int_accurate(divLog, subdivisions); @@ -246,40 +248,25 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa Vector2f closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); Vector2f subClosestGridPointScreenPos = get_closest_grid_point(offset, subDivSize, drawData); - SkColor4f pointColor = convert_vec4(color_mul_alpha(color, removeDivisionsOutwards ? 1.0f : std::clamp(floatDivWorldSize / 100.0f, 0.0f, 1.0f))); - float gridPointSize = 5.0f; + SkColor4f pointColor = convert_vec4(color); - float finalDivMultiplierValue = (1.0 - divLogFraction) * ((divLog == 0) ? 0.5 : 1.0); + float finalDivMultiplierValue = 1.0 - divLogFraction; float finalDivMultiplierSqrt = std::sqrt(finalDivMultiplierValue); float finalDivMultiplierSqrd = std::pow(finalDivMultiplierValue, 2); - if(removeDivisionsOutwards || divLog == 0) { - linePaint.setShader(get_shader(gridType, { - .gridColor = pointColor, - .mainGridScale = floatDivWorldSize, - .mainGridClosestPoint = closestGridPointScreenPos, - .mainGridPointSize = gridPointSize, - - .divGridAlphaFrac = 0.3f, - .divGridScale = floatSubDivWorldSize, - .divGridClosestPoint = subClosestGridPointScreenPos, - .divGridPointSize = gridPointSize * finalDivMultiplierSqrd - })); - } - else { + if(!removeDivisionsOutwards) pointColor.fA *= finalDivMultiplierSqrt; - linePaint.setShader(get_shader(gridType, { - .gridColor = pointColor, - .mainGridScale = floatSubDivWorldSize, - .mainGridClosestPoint = subClosestGridPointScreenPos, - .mainGridPointSize = gridPointSize * finalDivMultiplierSqrt, + linePaint.setShader(get_shader(gridType, { + .gridColor = pointColor, + .mainGridScale = floatDivWorldSize, + .mainGridClosestPoint = closestGridPointScreenPos, + .mainGridPointSize = gridPointSizeDefault * finalDivMultiplierSqrt, - .divGridAlphaFrac = 0.0f, - .divGridScale = floatSubDivWorldSize, - .divGridClosestPoint = subClosestGridPointScreenPos, - .divGridPointSize = gridPointSize * finalDivMultiplierSqrd - })); - } + .divGridAlphaFrac = 0.3f, + .divGridScale = floatSubDivWorldSize, + .divGridClosestPoint = subClosestGridPointScreenPos, + .divGridPointSize = gridPointSizeDefault * finalDivMultiplierSqrd + })); gridCoordDivSize = logMultiplier * WorldScalar(subdivisions); } @@ -295,19 +282,19 @@ void WorldGrid::draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawDa Vector2f closestGridPointScreenPos = get_closest_grid_point(offset, divSize, drawData); Vector2f subClosestGridPointScreenPos = get_closest_grid_point(offset, subDivSize, drawData); - SkColor4f pointColor = convert_vec4(color_mul_alpha(color, std::clamp(floatDivWorldSize / 100.0f, 0.0f, 1.0f))); + SkColor4f pointColor = convert_vec4(color); float gridPointSize = std::clamp(floatDivWorldSize / 10.0f, 0.0f, 5.0f); linePaint.setShader(get_shader(gridType, { .gridColor = pointColor, .mainGridScale = floatDivWorldSize, .mainGridClosestPoint = closestGridPointScreenPos, - .mainGridPointSize = gridPointSize, + .mainGridPointSize = gridPointSizeDefault, .divGridAlphaFrac = 0.3f, .divGridScale = floatSubDivWorldSize, .divGridClosestPoint = subClosestGridPointScreenPos, - .divGridPointSize = gridPointSize * 0.25f + .divGridPointSize = gridPointSize })); gridCoordDivSize = WorldScalar(subdivisions);