blob: 2f4d50cd8323d2467c82506c9b1bbbd6077a0e8d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include <mbgl/style/layer.hpp>
#include <mbgl/style/layer_impl.hpp>
#include <mbgl/style/layer_observer.hpp>
#include <mbgl/style/conversion/constant.hpp>
#include <mbgl/style/conversion/filter.hpp>
#include <mbgl/style/conversion_impl.hpp>
#include <mbgl/tile/tile.hpp>
#include <mbgl/renderer/render_layer.hpp>
namespace mbgl {
namespace style {
static_assert(mbgl::underlying_type(Tile::Kind::Geometry) == mbgl::underlying_type(LayerTypeInfo::TileKind::Geometry), "tile kind error");
static_assert(mbgl::underlying_type(Tile::Kind::Raster) == mbgl::underlying_type(LayerTypeInfo::TileKind::Raster), "tile kind error");
static_assert(mbgl::underlying_type(Tile::Kind::RasterDEM) == mbgl::underlying_type(LayerTypeInfo::TileKind::RasterDEM), "tile kind error");
static LayerObserver nullObserver;
Layer::Layer(Immutable<Impl> impl)
: baseImpl(std::move(impl)),
observer(&nullObserver) {
}
Layer::~Layer() = default;
std::string Layer::getID() const {
return baseImpl->id;
}
std::string Layer::getSourceID() const {
return baseImpl->source;
}
std::string Layer::getSourceLayer() const {
return baseImpl->sourceLayer;
}
void Layer::setSourceLayer(const std::string& sourceLayer) {
auto impl_ = mutableBaseImpl();
impl_->sourceLayer = sourceLayer;
baseImpl = std::move(impl_);
}
const Filter& Layer::getFilter() const {
return baseImpl->filter;
}
void Layer::setFilter(const Filter& filter) {
auto impl_ = mutableBaseImpl();
impl_->filter = filter;
baseImpl = std::move(impl_);
observer->onLayerChanged(*this);
}
VisibilityType Layer::getVisibility() const {
return baseImpl->visibility;
}
void Layer::setVisibility(VisibilityType value) {
if (value == getVisibility())
return;
auto impl_ = mutableBaseImpl();
impl_->visibility = value;
baseImpl = std::move(impl_);
observer->onLayerChanged(*this);
}
float Layer::getMinZoom() const {
return baseImpl->minZoom;
}
float Layer::getMaxZoom() const {
return baseImpl->maxZoom;
}
void Layer::setMinZoom(float minZoom) {
auto impl_ = mutableBaseImpl();
impl_->minZoom = minZoom;
baseImpl = std::move(impl_);
observer->onLayerChanged(*this);
}
void Layer::setMaxZoom(float maxZoom) {
auto impl_ = mutableBaseImpl();
impl_->maxZoom = maxZoom;
baseImpl = std::move(impl_);
observer->onLayerChanged(*this);
}
void Layer::setObserver(LayerObserver* observer_) {
observer = observer_ ? observer_ : &nullObserver;
}
optional<conversion::Error> Layer::setVisibility(const conversion::Convertible& value) {
using namespace conversion;
if (isUndefined(value)) {
setVisibility(VisibilityType::Visible);
return nullopt;
}
Error error;
optional<VisibilityType> visibility = convert<VisibilityType>(value, error);
if (!visibility) {
return error;
}
setVisibility(*visibility);
return nullopt;
}
const LayerTypeInfo* Layer::getTypeInfo() const noexcept {
return baseImpl->getTypeInfo();
}
} // namespace style
} // namespace mbgl
|