diff --git a/python/PyQt6/core/auto_additions/qgsmarkersymbollayer.py b/python/PyQt6/core/auto_additions/qgsmarkersymbollayer.py index 25093eb1379..5b04e9f59e0 100644 --- a/python/PyQt6/core/auto_additions/qgsmarkersymbollayer.py +++ b/python/PyQt6/core/auto_additions/qgsmarkersymbollayer.py @@ -1,4 +1,14 @@ # The following has been generated automatically from src/core/symbology/qgsmarkersymbollayer.h +# monkey patching scoped based enum +QgsFontMarkerSymbolLayer.VerticalAnchorMode.Legacy.__doc__ = "Calculate anchor points with different offsets" +QgsFontMarkerSymbolLayer.VerticalAnchorMode.Baseline.__doc__ = "Calculate anchor points with fix baseline" +QgsFontMarkerSymbolLayer.VerticalAnchorMode.__doc__ = """Vertical anchor modes + +* ``Legacy``: Calculate anchor points with different offsets +* ``Baseline``: Calculate anchor points with fix baseline + +""" +# -- try: QgsSimpleMarkerSymbolLayerBase.availableShapes = staticmethod(QgsSimpleMarkerSymbolLayerBase.availableShapes) QgsSimpleMarkerSymbolLayerBase.shapeIsFilled = staticmethod(QgsSimpleMarkerSymbolLayerBase.shapeIsFilled) diff --git a/python/PyQt6/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in b/python/PyQt6/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in index d64bc492ccd..ed3ab87db65 100644 --- a/python/PyQt6/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in +++ b/python/PyQt6/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in @@ -931,6 +931,12 @@ class QgsFontMarkerSymbolLayer : QgsMarkerSymbolLayer %End public: + enum class VerticalAnchorMode /BaseType=IntEnum/ + { + Legacy, + Baseline, + }; + QgsFontMarkerSymbolLayer( const QString &fontFamily = DEFAULT_FONTMARKER_FONT, QString chr = DEFAULT_FONTMARKER_CHR, double pointSize = DEFAULT_FONTMARKER_SIZE, @@ -1119,22 +1125,22 @@ Sets the stroke join ``style``. .. seealso:: :py:func:`penJoinStyle` %End - void setFixVerticalAnchor( const bool fixVerticalAnchor ); + void setVerticalAnchorMode( VerticalAnchorMode verticalAnchorMode ); %Docstring -Set fixVerticalAnchor that means it considers the baseline position for all the characters +Sets the vertical anchor mode whether it should considers the baseline as fix point -:param fixVerticalAnchor: the bool +:param verticalAnchorMode: the mode how to handle the anchor point -.. seealso:: :py:func:`fixVerticalAnchor` +.. seealso:: :py:func:`verticalAnchorMode` .. versionadded:: 3.42 %End - bool fixVerticalAnchor() const; + VerticalAnchorMode verticalAnchorMode() const; %Docstring -Returns wheter it considers teh baseline position for all the characters +Returns whether it should considers the baseline as fix point -.. seealso:: :py:func:`setFixVerticalAnchor` +.. seealso:: :py:func:`setVerticalAnchorMode` .. versionadded:: 3.42 %End diff --git a/python/core/auto_additions/qgsmarkersymbollayer.py b/python/core/auto_additions/qgsmarkersymbollayer.py index 25093eb1379..5b04e9f59e0 100644 --- a/python/core/auto_additions/qgsmarkersymbollayer.py +++ b/python/core/auto_additions/qgsmarkersymbollayer.py @@ -1,4 +1,14 @@ # The following has been generated automatically from src/core/symbology/qgsmarkersymbollayer.h +# monkey patching scoped based enum +QgsFontMarkerSymbolLayer.VerticalAnchorMode.Legacy.__doc__ = "Calculate anchor points with different offsets" +QgsFontMarkerSymbolLayer.VerticalAnchorMode.Baseline.__doc__ = "Calculate anchor points with fix baseline" +QgsFontMarkerSymbolLayer.VerticalAnchorMode.__doc__ = """Vertical anchor modes + +* ``Legacy``: Calculate anchor points with different offsets +* ``Baseline``: Calculate anchor points with fix baseline + +""" +# -- try: QgsSimpleMarkerSymbolLayerBase.availableShapes = staticmethod(QgsSimpleMarkerSymbolLayerBase.availableShapes) QgsSimpleMarkerSymbolLayerBase.shapeIsFilled = staticmethod(QgsSimpleMarkerSymbolLayerBase.shapeIsFilled) diff --git a/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in b/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in index d64bc492ccd..37565b9e7f1 100644 --- a/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in @@ -931,6 +931,12 @@ class QgsFontMarkerSymbolLayer : QgsMarkerSymbolLayer %End public: + enum class VerticalAnchorMode + { + Legacy, + Baseline, + }; + QgsFontMarkerSymbolLayer( const QString &fontFamily = DEFAULT_FONTMARKER_FONT, QString chr = DEFAULT_FONTMARKER_CHR, double pointSize = DEFAULT_FONTMARKER_SIZE, @@ -1119,22 +1125,22 @@ Sets the stroke join ``style``. .. seealso:: :py:func:`penJoinStyle` %End - void setFixVerticalAnchor( const bool fixVerticalAnchor ); + void setVerticalAnchorMode( VerticalAnchorMode verticalAnchorMode ); %Docstring -Set fixVerticalAnchor that means it considers the baseline position for all the characters +Sets the vertical anchor mode whether it should considers the baseline as fix point -:param fixVerticalAnchor: the bool +:param verticalAnchorMode: the mode how to handle the anchor point -.. seealso:: :py:func:`fixVerticalAnchor` +.. seealso:: :py:func:`verticalAnchorMode` .. versionadded:: 3.42 %End - bool fixVerticalAnchor() const; + VerticalAnchorMode verticalAnchorMode() const; %Docstring -Returns wheter it considers teh baseline position for all the characters +Returns whether it should considers the baseline as fix point -.. seealso:: :py:func:`setFixVerticalAnchor` +.. seealso:: :py:func:`setVerticalAnchorMode` .. versionadded:: 3.42 %End diff --git a/src/core/symbology/qgsmarkersymbollayer.cpp b/src/core/symbology/qgsmarkersymbollayer.cpp index d263ff35415..dd2158b7150 100644 --- a/src/core/symbology/qgsmarkersymbollayer.cpp +++ b/src/core/symbology/qgsmarkersymbollayer.cpp @@ -3541,8 +3541,8 @@ QgsSymbolLayer *QgsFontMarkerSymbolLayer::create( const QVariantMap &props ) m->setHorizontalAnchorPoint( QgsMarkerSymbolLayer::HorizontalAnchorPoint( props[ QStringLiteral( "horizontal_anchor_point" )].toInt() ) ); if ( props.contains( QStringLiteral( "vertical_anchor_point" ) ) ) m->setVerticalAnchorPoint( QgsMarkerSymbolLayer::VerticalAnchorPoint( props[ QStringLiteral( "vertical_anchor_point" )].toInt() ) ); - if ( props.contains( QStringLiteral( "fix_vertical_anchor" ) ) ) - m->setFixVerticalAnchor( props[ QStringLiteral( "fix_vertical_anchor" )].toBool() ); + if ( props.contains( QStringLiteral( "vertical_anchor_mode" ) ) ) + m->setVerticalAnchorMode( VerticalAnchorMode( props[ QStringLiteral( "vertical_anchor_mode" )].toInt() ) ); m->restoreOldDataDefinedProperties( props ); @@ -3597,7 +3597,7 @@ void QgsFontMarkerSymbolLayer::startRender( QgsSymbolRenderContext &context ) mFont.setPixelSize( std::max( 2, static_cast< int >( std::round( sizePixels ) ) ) ); mFontMetrics.reset( new QFontMetrics( mFont ) ); mChrWidth = mFontMetrics->horizontalAdvance( mString ); - if ( mFixVerticalAnchor ) + if ( mVerticalAnchorMode == VerticalAnchorMode::Baseline ) { mChrOffset = QPointF( mChrWidth / 2.0, -sizePixels / 2.0 ); } @@ -3637,10 +3637,10 @@ QString QgsFontMarkerSymbolLayer::characterToRender( QgsSymbolRenderContext &con if ( stringToRender != mString ) { charWidth = mFontMetrics->horizontalAdvance( stringToRender ); - if ( mFixVerticalAnchor ) + if ( mVerticalAnchorMode == VerticalAnchorMode::Baseline ) { const double sizePixels = context.renderContext().convertToPainterUnits( mSize, mSizeUnit, mSizeMapUnitScale ); - charOffset = QPointF( mChrWidth / 2.0, -sizePixels / 2.0 ); + charOffset = QPointF( charWidth / 2.0, -sizePixels / 2.0 ); } else { @@ -3875,7 +3875,7 @@ QVariantMap QgsFontMarkerSymbolLayer::properties() const props[QStringLiteral( "offset_map_unit_scale" )] = QgsSymbolLayerUtils::encodeMapUnitScale( mOffsetMapUnitScale ); props[QStringLiteral( "horizontal_anchor_point" )] = QString::number( mHorizontalAnchorPoint ); props[QStringLiteral( "vertical_anchor_point" )] = QString::number( mVerticalAnchorPoint ); - props[QStringLiteral( "fix_vertical_anchor" )] = mFixVerticalAnchor; + props[QStringLiteral( "vertical_anchor_mode" )] = static_cast< int >( mVerticalAnchorMode ); return props; } @@ -3895,7 +3895,7 @@ QgsFontMarkerSymbolLayer *QgsFontMarkerSymbolLayer::clone() const m->setSizeMapUnitScale( mSizeMapUnitScale ); m->setHorizontalAnchorPoint( mHorizontalAnchorPoint ); m->setVerticalAnchorPoint( mVerticalAnchorPoint ); - m->setFixVerticalAnchor( mFixVerticalAnchor ); + m->setVerticalAnchorMode( mVerticalAnchorMode ); copyDataDefinedProperties( m ); copyPaintEffect( m ); return m; diff --git a/src/core/symbology/qgsmarkersymbollayer.h b/src/core/symbology/qgsmarkersymbollayer.h index 7c66a650ca4..44de915e3d2 100644 --- a/src/core/symbology/qgsmarkersymbollayer.h +++ b/src/core/symbology/qgsmarkersymbollayer.h @@ -856,6 +856,13 @@ class CORE_EXPORT QgsFontMarkerSymbolLayer : public QgsMarkerSymbolLayer { public: + //! Vertical anchor modes + enum class VerticalAnchorMode : int + { + Legacy = 0, //!< Calculate anchor points with different offsets + Baseline = 1, //!< Calculate anchor points with fix baseline + }; + //! Constructs a font marker symbol layer. QgsFontMarkerSymbolLayer( const QString &fontFamily = DEFAULT_FONTMARKER_FONT, QString chr = DEFAULT_FONTMARKER_CHR, @@ -1029,19 +1036,19 @@ class CORE_EXPORT QgsFontMarkerSymbolLayer : public QgsMarkerSymbolLayer void setPenJoinStyle( Qt::PenJoinStyle style ) { mPenJoinStyle = style; } /** - * Set fixVerticalAnchor that means it considers the baseline position for all the characters - * \param fixVerticalAnchor the bool - * \see fixVerticalAnchor() + * Sets the vertical anchor mode whether it should considers the baseline as fix point + * \param verticalAnchorMode the mode how to handle the anchor point + * \see verticalAnchorMode() * \since QGIS 3.42 */ - void setFixVerticalAnchor( const bool fixVerticalAnchor ) { mFixVerticalAnchor = fixVerticalAnchor;} + void setVerticalAnchorMode( VerticalAnchorMode verticalAnchorMode ) { mVerticalAnchorMode = verticalAnchorMode;} /** - * Returns wheter it considers teh baseline position for all the characters - * \see setFixVerticalAnchor() + * Returns whether it should considers the baseline as fix point + * \see setVerticalAnchorMode() * \since QGIS 3.42 */ - bool fixVerticalAnchor() const { return mFixVerticalAnchor; } + VerticalAnchorMode verticalAnchorMode() const { return mVerticalAnchorMode; } QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override; @@ -1056,7 +1063,7 @@ class CORE_EXPORT QgsFontMarkerSymbolLayer : public QgsMarkerSymbolLayer double mChrWidth = 0; QPointF mChrOffset; - bool mFixVerticalAnchor = false; + VerticalAnchorMode mVerticalAnchorMode = VerticalAnchorMode::Legacy; //! Scaling for font sizes, used if font size grows too large double mFontSizeScale = 1.0; diff --git a/src/gui/symbology/qgssymbollayerwidget.cpp b/src/gui/symbology/qgssymbollayerwidget.cpp index ccb49b9ae72..91afa7b73cb 100644 --- a/src/gui/symbology/qgssymbollayerwidget.cpp +++ b/src/gui/symbology/qgssymbollayerwidget.cpp @@ -3560,8 +3560,8 @@ void QgsFontMarkerSymbolLayerWidget::setSymbolLayer( QgsSymbolLayer *layer ) //anchor points whileBlocking( mHorizontalAnchorComboBox )->setCurrentIndex( mLayer->horizontalAnchorPoint() ); int verticalAnchorIndex = mLayer->verticalAnchorPoint(); - if ( mLayer->fixVerticalAnchor() ) - verticalAnchorIndex += 3; + if ( mLayer->verticalAnchorMode() == QgsFontMarkerSymbolLayer::VerticalAnchorMode::Baseline ) + verticalAnchorIndex = 3; whileBlocking( mVerticalAnchorComboBox )->setCurrentIndex( verticalAnchorIndex ); registerDataDefinedButton( mFontFamilyDDBtn, QgsSymbolLayer::Property::FontFamily ); @@ -3774,16 +3774,15 @@ void QgsFontMarkerSymbolLayerWidget::mVerticalAnchorComboBox_currentIndexChanged { if ( index >= 3 ) { - mLayer->setFixVerticalAnchor( true ); - //pass original types - index -= 3; + // Bottom on Baseline is selected + mLayer->setVerticalAnchorMode( QgsFontMarkerSymbolLayer::VerticalAnchorMode::Baseline ); + mLayer->setVerticalAnchorPoint( QgsMarkerSymbolLayer::Bottom ); } else { - - mLayer->setFixVerticalAnchor( false ); + mLayer->setVerticalAnchorMode( QgsFontMarkerSymbolLayer::VerticalAnchorMode::Legacy ); + mLayer->setVerticalAnchorPoint( QgsMarkerSymbolLayer::VerticalAnchorPoint( index ) ); } - mLayer->setVerticalAnchorPoint( QgsMarkerSymbolLayer::VerticalAnchorPoint( index ) ); emit changed(); } } diff --git a/src/ui/symbollayer/widget_fontmarker.ui b/src/ui/symbollayer/widget_fontmarker.ui index be22f334e80..8a8be220a92 100644 --- a/src/ui/symbollayer/widget_fontmarker.ui +++ b/src/ui/symbollayer/widget_fontmarker.ui @@ -309,17 +309,7 @@ - Top considering Baseline - - - - - VCenter considering Baseline - - - - - Bottom considering Baseline + Bottom on Baseline