diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-05-26 00:12:32 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2020-05-26 20:37:08 +0300 |
commit | 49d7f198f649f2ad1647857edb67a0a2e0535271 (patch) | |
tree | 06388d3b47e06ef370fd834481a6fc806da54c19 /src | |
parent | f5befeb2a4cd737562f27b6d7bb918cfd97d8bd8 (diff) | |
download | qtlocation-mapboxgl-49d7f198f649f2ad1647857edb67a0a2e0535271.tar.gz |
[core] Export placement types
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/text/placement.cpp | 38 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 46 | ||||
-rw-r--r-- | src/mbgl/text/placement_types.cpp | 30 |
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 |