From 5b19f4a2e215a97496c33fceb2dfed3302a178a8 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 10 Sep 2020 08:14:39 +1000 Subject: [PATCH] Translate point text anchor placement correctly --- .../vectortile/qgsmapboxglstyleconverter.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core/vectortile/qgsmapboxglstyleconverter.cpp b/src/core/vectortile/qgsmapboxglstyleconverter.cpp index 416d8aea72e4..ba6b60330b53 100644 --- a/src/core/vectortile/qgsmapboxglstyleconverter.cpp +++ b/src/core/vectortile/qgsmapboxglstyleconverter.cpp @@ -1052,6 +1052,32 @@ void QgsMapBoxGlStyleConverter::parseSymbolLayer( const QVariantMap &jsonLayer, } } + if ( labelSettings.placement == QgsPalLayerSettings::OverPoint ) + { + if ( jsonLayout.contains( QStringLiteral( "text-anchor" ) ) ) + { + const QString textAnchor = jsonLayout.value( QStringLiteral( "text-anchor" ) ).toString(); + if ( textAnchor == QLatin1String( "center" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantOver; + else if ( textAnchor == QLatin1String( "left" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantRight; + else if ( textAnchor == QLatin1String( "right" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantLeft; + else if ( textAnchor == QLatin1String( "top" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantBelow; + else if ( textAnchor == QLatin1String( "bottom" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantAbove; + else if ( textAnchor == QLatin1String( "top-left" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantBelowRight; + else if ( textAnchor == QLatin1String( "top-right" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantBelowLeft; + else if ( textAnchor == QLatin1String( "bottom-left" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantAboveRight; + else if ( textAnchor == QLatin1String( "bottom-right" ) ) + labelSettings.quadOffset = QgsPalLayerSettings::QuadrantAboveLeft; + } + } + if ( textSize >= 0 ) { // TODO -- this probably needs revisiting -- it was copied from the MapTiler code, but may be wrong...