diff --git a/src/DrawingProgram/GridModifyTool.cpp b/src/DrawingProgram/GridModifyTool.cpp index 8f4ee01..6193540 100644 --- a/src/DrawingProgram/GridModifyTool.cpp +++ b/src/DrawingProgram/GridModifyTool.cpp @@ -35,6 +35,7 @@ void GridModifyTool::gui_toolbox() { WorldGrid& g = gridFoundIt->second; t.gui.input_text_field("grid name", "Name", &g.name); t.gui.checkbox_field("Visible", "Visible", &g.visible); + t.gui.checkbox_field("Display in Front", "Display in front of canvas", &g.displayInFront); size_t typeSelected = static_cast(g.gridType); std::vector listOfGridTypes = { "Circle Points", diff --git a/src/GridManager.cpp b/src/GridManager.cpp index b0d0501..129f1d1 100644 --- a/src/GridManager.cpp +++ b/src/GridManager.cpp @@ -75,10 +75,20 @@ ClientPortionID GridManager::get_max_id(ServerPortionID serverID) const { return maxClientID; } -void GridManager::draw(SkCanvas* canvas, const DrawData& drawData) { +void GridManager::draw_back(SkCanvas* canvas, const DrawData& drawData) { auto& sortedGridIDS = sorted_grid_ids(); - for(ServerClientID id : sortedGridIDS) - grids[id].draw(*this, canvas, drawData); + for(ServerClientID id : sortedGridIDS) { + if(!grids[id].displayInFront) + grids[id].draw(*this, canvas, drawData); + } +} + +void GridManager::draw_front(SkCanvas* canvas, const DrawData& drawData) { + auto& sortedGridIDS = sorted_grid_ids(); + for(ServerClientID id : sortedGridIDS) { + if(grids[id].displayInFront) + grids[id].draw(*this, canvas, drawData); + } } void GridManager::draw_coordinates(SkCanvas* canvas, const DrawData& drawData) { diff --git a/src/GridManager.hpp b/src/GridManager.hpp index 70bcf5e..6ed1ff3 100644 --- a/src/GridManager.hpp +++ b/src/GridManager.hpp @@ -21,7 +21,8 @@ class GridManager { void send_grid_info(ServerClientID gridID); void remove_grid(ServerClientID idToRemove); - void draw(SkCanvas* canvas, const DrawData& drawData); + void draw_back(SkCanvas* canvas, const DrawData& drawData); + void draw_front(SkCanvas* canvas, const DrawData& drawData); void draw_coordinates(SkCanvas* canvas, const DrawData& drawData); void scale_up(const WorldScalar& scaleUpAmount); diff --git a/src/World.cpp b/src/World.cpp index 6916ce1..34e5bcb 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -439,9 +439,11 @@ void World::scale_up(const WorldScalar& scaleUpAmount) { void World::draw(SkCanvas* canvas) { drawData.refresh_draw_optimizing_values(); if(drawData.drawGrids) - gridMan.draw(canvas, drawData); + gridMan.draw_back(canvas, drawData); drawProg.draw(canvas, drawData); - if(drawData.drawGrids) + if(drawData.drawGrids) { + gridMan.draw_front(canvas, drawData); gridMan.draw_coordinates(canvas, drawData); + } draw_other_player_cursors(canvas, drawData); } diff --git a/src/WorldGrid.hpp b/src/WorldGrid.hpp index 7242b98..b979297 100644 --- a/src/WorldGrid.hpp +++ b/src/WorldGrid.hpp @@ -9,7 +9,7 @@ class GridManager; class WorldGrid { public: template void serialize(Archive& a) { - a(name, gridType, size, visible, offset, bounds, color, removeDivisionsOutwards, subdivisions, showCoordinates); + a(name, gridType, size, visible, offset, bounds, color, removeDivisionsOutwards, subdivisions, showCoordinates, displayInFront); } void draw(GridManager& gMan, SkCanvas* canvas, const DrawData& drawData); @@ -43,6 +43,7 @@ class WorldGrid { WorldScalar coordinatesGridCoordDivSize; bool coordinatesWillBeDrawn = false; bool coordinatesAxisOnBounds = false; + bool displayInFront = false; private: struct ShaderData {