[core] Introduce mbgl::RendererState
This commit is contained in:
@@ -180,6 +180,7 @@ include/mbgl/renderer/renderer.hpp
|
||||
include/mbgl/renderer/renderer_backend.hpp
|
||||
include/mbgl/renderer/renderer_frontend.hpp
|
||||
include/mbgl/renderer/renderer_observer.hpp
|
||||
include/mbgl/renderer/renderer_state.hpp
|
||||
src/mbgl/renderer/backend_scope.cpp
|
||||
src/mbgl/renderer/bucket.hpp
|
||||
src/mbgl/renderer/bucket_parameters.cpp
|
||||
@@ -216,6 +217,7 @@ src/mbgl/renderer/renderer.cpp
|
||||
src/mbgl/renderer/renderer_backend.cpp
|
||||
src/mbgl/renderer/renderer_impl.cpp
|
||||
src/mbgl/renderer/renderer_impl.hpp
|
||||
src/mbgl/renderer/renderer_state.cpp
|
||||
src/mbgl/renderer/style_diff.cpp
|
||||
src/mbgl/renderer/style_diff.hpp
|
||||
src/mbgl/renderer/tile_mask.hpp
|
||||
|
||||
22
include/mbgl/renderer/renderer_state.hpp
Normal file
22
include/mbgl/renderer/renderer_state.hpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <mbgl/map/camera.hpp>
|
||||
#include <mbgl/util/geo.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
class UpdateParameters;
|
||||
|
||||
/**
|
||||
* RendererState acts as a Memento-like object that is able to extract data out of UpdateParameters (an opaque object
|
||||
* from the public API perspective).
|
||||
*/
|
||||
class RendererState {
|
||||
public:
|
||||
|
||||
// Obtains a CameraOptions out of a given UpdateParameters object.
|
||||
static CameraOptions getCameraOptions(UpdateParameters&, const EdgeInsets& = {});
|
||||
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <mbgl/gl/headless_frontend.hpp>
|
||||
#include <mbgl/renderer/renderer.hpp>
|
||||
#include <mbgl/renderer/renderer_state.hpp>
|
||||
#include <mbgl/renderer/update_parameters.hpp>
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/map/transform_state.hpp>
|
||||
|
||||
@@ -20,6 +20,7 @@ class UnwrappedTileID;
|
||||
|
||||
class TransformState {
|
||||
friend class Transform;
|
||||
friend class RendererState;
|
||||
|
||||
public:
|
||||
TransformState(ConstrainMode = ConstrainMode::HeightOnly, ViewportMode = ViewportMode::Default);
|
||||
|
||||
10
src/mbgl/renderer/renderer_state.cpp
Normal file
10
src/mbgl/renderer/renderer_state.cpp
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <mbgl/renderer/renderer_state.hpp>
|
||||
#include <mbgl/renderer/update_parameters.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
CameraOptions RendererState::getCameraOptions(UpdateParameters& updateParameters, const EdgeInsets& padding) {
|
||||
return updateParameters.transformState.getCameraOptions(padding);
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
@@ -49,6 +49,34 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
TEST(Map, RendererState) {
|
||||
MapTest<> test;
|
||||
|
||||
// Map hasn't notified the frontend about an update yet.
|
||||
CameraOptions nullOptions;
|
||||
ASSERT_EQ(test.frontend.getCameraOptions(), nullOptions);
|
||||
|
||||
LatLng coordinate { 1, 1 };
|
||||
double zoom = 12.0;
|
||||
double pitchInDegrees = 45.0;
|
||||
double bearingInDegrees = 30.0;
|
||||
|
||||
test.map.getStyle().loadJSON(util::read_file("test/fixtures/api/empty.json"));
|
||||
test.map.setLatLngZoom(coordinate, zoom);
|
||||
test.map.setPitch(pitchInDegrees);
|
||||
test.map.setBearing(bearingInDegrees);
|
||||
|
||||
test.runLoop.runOnce();
|
||||
test.frontend.render(test.map);
|
||||
|
||||
const CameraOptions& options = test.frontend.getCameraOptions();
|
||||
EXPECT_NEAR(options.center->latitude(), coordinate.latitude(), 1e-7);
|
||||
EXPECT_NEAR(options.center->longitude(), coordinate.longitude(), 1e-7);
|
||||
ASSERT_DOUBLE_EQ(*options.zoom, zoom);
|
||||
ASSERT_DOUBLE_EQ(*options.pitch, pitchInDegrees);
|
||||
EXPECT_NEAR(*options.angle, bearingInDegrees, 1e-7);
|
||||
}
|
||||
|
||||
TEST(Map, LatLngBehavior) {
|
||||
MapTest<> test;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user