diff options
author | artemp <artem@mapnik.org> | 2014-10-28 14:50:44 -0400 |
---|---|---|
committer | artemp <artem@mapnik.org> | 2014-10-28 14:50:44 -0400 |
commit | 0d4f625951d11ea156a90ff7d32068ae3ca222c0 (patch) | |
tree | ef1ffe6f588d666766bc98ae18225fecbdbe46c4 /src | |
parent | a9470feb2380c63c66cfbf44782d9a390018e5e1 (diff) | |
download | qtlocation-mapboxgl-0d4f625951d11ea156a90ff7d32068ae3ca222c0.tar.gz |
fix 'flip' logic to take into account rotation_alignment and keep_upright (#470)
Diffstat (limited to 'src')
-rw-r--r-- | src/renderer/painter_symbol.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/renderer/painter_symbol.cpp b/src/renderer/painter_symbol.cpp index 415dead70e..2992199b3c 100644 --- a/src/renderer/painter_symbol.cpp +++ b/src/renderer/painter_symbol.cpp @@ -24,11 +24,8 @@ void Painter::renderSDF(SymbolBucket &bucket, mat4 exMatrix; matrix::copy(exMatrix, projMatrix); - - const float angleOffset = - bucketProperties.rotation_alignment == RotationAlignmentType::Map - ? map.getState().getAngle() - : 0; + bool aligned_with_map = (bucketProperties.rotation_alignment == RotationAlignmentType::Map); + const float angleOffset = aligned_with_map ? map.getState().getAngle() : 0; if (angleOffset) { matrix::rotate_z(exMatrix, exMatrix, angleOffset); @@ -50,8 +47,8 @@ void Painter::renderSDF(SymbolBucket &bucket, // adjust min/max zooms for variable font sies float zoomAdjust = std::log(fontSize / bucketProperties.max_size) / std::log(2); + sdfShader.u_flip = (aligned_with_map && bucketProperties.keep_upright) ? 1 : 0; sdfShader.u_angle = (int32_t)(angle + 256) % 256; - sdfShader.u_flip = (bucket.properties.placement == PlacementType::Line ? 1 : 0); sdfShader.u_zoom = (map.getState().getNormalizedZoom() - zoomAdjust) * 10; // current zoom level FadeProperties f = frameHistory.getFadeProperties(300_milliseconds); @@ -191,7 +188,10 @@ void Painter::renderSymbol(SymbolBucket &bucket, util::ptr<StyleLayer> layer_des float zoomAdjust = std::log(fontSize / bucket.properties.icon.max_size) / std::log(2); iconShader->u_angle = (int32_t)(angle + 256) % 256; - iconShader->u_flip = bucket.properties.placement == PlacementType::Line ? 1 : 0; + + bool flip = (bucket.properties.icon.rotation_alignment == RotationAlignmentType::Map) + && bucket.properties.icon.keep_upright; + iconShader->u_flip = flip ? 1 : 0; iconShader->u_zoom = (map.getState().getNormalizedZoom() - zoomAdjust) * 10; // current zoom level iconShader->u_fadedist = 0 * 10; |