summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-05-26 00:12:32 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2020-05-26 20:37:08 +0300
commit49d7f198f649f2ad1647857edb67a0a2e0535271 (patch)
tree06388d3b47e06ef370fd834481a6fc806da54c19 /src
parentf5befeb2a4cd737562f27b6d7bb918cfd97d8bd8 (diff)
downloadqtlocation-mapboxgl-49d7f198f649f2ad1647857edb67a0a2e0535271.tar.gz
[core] Export placement types
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/text/placement.cpp38
-rw-r--r--src/mbgl/text/placement.hpp46
-rw-r--r--src/mbgl/text/placement_types.cpp30
3 files changed, 41 insertions, 73 deletions
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index 1a2971e16e..a55d372c62 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -12,32 +12,6 @@
namespace mbgl {
-OpacityState::OpacityState(bool placed_, bool skipFade)
- : opacity((skipFade && placed_) ? 1 : 0)
- , placed(placed_)
-{
-}
-
-OpacityState::OpacityState(const OpacityState& prevState, float increment, bool placed_) :
- opacity(::fmax(0, ::fmin(1, prevState.opacity + (prevState.placed ? increment : -increment)))),
- placed(placed_) {}
-
-bool OpacityState::isHidden() const {
- return opacity == 0 && !placed;
-}
-
-JointOpacityState::JointOpacityState(bool placedText, bool placedIcon, bool skipFade) :
- icon(OpacityState(placedIcon, skipFade)),
- text(OpacityState(placedText, skipFade)) {}
-
-JointOpacityState::JointOpacityState(const JointOpacityState& prevOpacityState, float increment, bool placedText, bool placedIcon) :
- icon(OpacityState(prevOpacityState.icon, increment, placedIcon)),
- text(OpacityState(prevOpacityState.text, increment, placedText)) {}
-
-bool JointOpacityState::isHidden() const {
- return icon.isHidden() && text.isHidden();
-}
-
const CollisionGroups::CollisionGroup& CollisionGroups::get(const std::string& sourceID) {
// The predicate/groupID mechanism allows for arbitrary grouping,
// but the current interface defines one source == one group when
@@ -1224,6 +1198,13 @@ bool Placement::recordSymbolPlacement(const SymbolInstance& symbol,
assert(box.isBox());
iconCollisionBox = box.box();
}
+ optional<JointOpacityState> prevOpacity;
+ if (getPrevPlacement()) {
+ auto it = getPrevPlacement()->opacities.find(symbol.crossTileID);
+ if (it != getPrevPlacement()->opacities.end()) {
+ prevOpacity = it->second;
+ }
+ }
PlacedSymbolData symbolData{symbol.key,
textCollisionBox,
iconCollisionBox,
@@ -1231,7 +1212,8 @@ bool Placement::recordSymbolPlacement(const SymbolInstance& symbol,
placement.icon,
nullopt,
collisionIndex.getViewportPadding(),
- ctx.getBucket().bucketLeaderID};
+ ctx.getBucket().bucketLeaderID,
+ prevOpacity};
placedSymbolsData.emplace_back(std::move(symbolData));
return true;
}
@@ -1239,7 +1221,7 @@ bool Placement::recordSymbolPlacement(const SymbolInstance& symbol,
const CollisionIndex& Placement::getCollisionIndex() const {
return collisionIndex;
}
-
+
const RetainedQueryData& Placement::getQueryData(uint32_t bucketInstanceId) const {
auto it = retainedQueryData.find(bucketInstanceId);
if (it == retainedQueryData.end()) {
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp
index 864f195c80..28296115ee 100644
--- a/src/mbgl/text/placement.hpp
+++ b/src/mbgl/text/placement.hpp
@@ -4,6 +4,7 @@
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/style/transition_options.hpp>
#include <mbgl/text/collision_index.hpp>
+#include <mbgl/text/placement_types.hpp>
#include <mbgl/util/chrono.hpp>
#include <string>
#include <unordered_map>
@@ -17,51 +18,6 @@ using SymbolInstanceReferences = std::vector<std::reference_wrapper<const Symbol
class UpdateParameters;
enum class PlacedSymbolOrientation : bool;
-class OpacityState {
-public:
- OpacityState(bool placed, bool skipFade);
- OpacityState(const OpacityState& prevState, float increment, bool placed);
- bool isHidden() const;
- float opacity;
- bool placed;
-};
-
-class JointOpacityState {
-public:
- JointOpacityState(bool placedText, bool placedIcon, bool skipFade);
- JointOpacityState(const JointOpacityState& prevOpacityState, float increment, bool placedText, bool placedIcon);
- bool isHidden() const;
- OpacityState icon;
- OpacityState text;
-};
-
-class VariableOffset {
-public:
- std::array<float, 2> offset;
- float width;
- float height;
- style::TextVariableAnchorType anchor;
- float textBoxScale;
- optional<style::TextVariableAnchorType> prevAnchor;
-};
-
-class JointPlacement {
-public:
- JointPlacement(bool text_, bool icon_, bool skipFade_)
- : text(text_), icon(icon_), skipFade(skipFade_)
- {}
-
- bool placed() const { return text || icon; }
-
- const bool text;
- const bool icon;
- // skipFade = outside viewport, but within CollisionIndex::viewportPadding px of the edge
- // Because these symbols aren't onscreen yet, we can skip the "fade in" animation,
- // and if a subsequent viewport change brings them into view, they'll be fully
- // visible right away.
- const bool skipFade;
-};
-
struct RetainedQueryData {
uint32_t bucketInstanceId;
std::shared_ptr<FeatureIndex> featureIndex;
diff --git a/src/mbgl/text/placement_types.cpp b/src/mbgl/text/placement_types.cpp
new file mode 100644
index 0000000000..02cf90e11a
--- /dev/null
+++ b/src/mbgl/text/placement_types.cpp
@@ -0,0 +1,30 @@
+#include <mbgl/text/placement_types.hpp>
+
+#include <cmath>
+
+namespace mbgl {
+
+OpacityState::OpacityState(bool placed_, bool skipFade) : opacity((skipFade && placed_) ? 1 : 0), placed(placed_) {}
+
+OpacityState::OpacityState(const OpacityState& prevState, float increment, bool placed_)
+ : opacity(::fmax(0, ::fmin(1, prevState.opacity + (prevState.placed ? increment : -increment)))), placed(placed_) {}
+
+bool OpacityState::isHidden() const {
+ return opacity == 0 && !placed;
+}
+
+JointOpacityState::JointOpacityState(bool placedText, bool placedIcon, bool skipFade)
+ : icon(OpacityState(placedIcon, skipFade)), text(OpacityState(placedText, skipFade)) {}
+
+JointOpacityState::JointOpacityState(const JointOpacityState& prevOpacityState,
+ float increment,
+ bool placedText,
+ bool placedIcon)
+ : icon(OpacityState(prevOpacityState.icon, increment, placedIcon)),
+ text(OpacityState(prevOpacityState.text, increment, placedText)) {}
+
+bool JointOpacityState::isHidden() const {
+ return icon.isHidden() && text.isHidden();
+}
+
+} // namespace mbgl \ No newline at end of file