summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/placement_state.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/placement_state.hpp')
-rw-r--r--src/mbgl/renderer/placement_state.hpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/mbgl/renderer/placement_state.hpp b/src/mbgl/renderer/placement_state.hpp
new file mode 100644
index 0000000000..07c655ca03
--- /dev/null
+++ b/src/mbgl/renderer/placement_state.hpp
@@ -0,0 +1,70 @@
+#pragma once
+
+#include <mbgl/map/transform_state.hpp>
+#include <mbgl/style/collection.hpp>
+#include <mbgl/style/layer.hpp>
+#include <mbgl/tile/tile_id.hpp>
+#include <mbgl/util/chrono.hpp>
+#include <mbgl/util/optional.hpp>
+
+#include <functional>
+#include <map>
+#include <string>
+
+namespace mbgl {
+
+// TODO: Placeholder
+class CollisionIndex {
+public:
+ CollisionIndex(const TransformState&) {}
+};
+
+class RenderLayer;
+class RenderSymbolLayer;
+class RenderSource;
+
+struct CollisionFadeTimes {
+ TimePoint latestStart;
+ Duration fadeDuration;
+};
+
+class LayerPlacementState {
+public:
+ LayerPlacementState();
+ bool continuePlacement(RenderSymbolLayer& renderLayer,
+ CollisionIndex& collisionIndex,
+ const bool showCollisionBoxes,
+ std::function<bool()> shouldPausePlacement);
+
+private:
+ size_t currentTileIndex;
+};
+
+class PlacementState
+{
+public:
+ PlacementState(const TransformState& transformState,
+ const std::vector<RenderLayer>& order,
+ const bool forceFullPlacement,
+ const bool showCollisionBoxes,
+ Duration fadeDuration,
+ optional<PlacementState>& previousPlacement);
+
+ bool isDone() const { return done; }
+ bool stillFading() const;
+
+ void continuePlacement(std::vector<RenderLayer>& order, std::vector<RenderSource>& sources);
+
+private:
+ CollisionIndex collisionIndex;
+ bool done;
+ size_t currentLayerIndex;
+ bool forceFullPlacement;
+ bool showCollisionBoxes;
+ TimePoint delayUntil;
+ CollisionFadeTimes collisionFadeTimes;
+ optional<LayerPlacementState> inProgressLayer;
+
+};
+
+}; // mbgl