Skip to content

Commit 94a9530

Browse files
committedDec 1, 2021
[feature] Allow text buffer size, shadow offset and radius to be
set in "percentage" units Allows these sizes to be set as a percent of the font size. This is desirable as it allows creation of text formats where the components nicely scale as the text size is changed, instead of having constant buffer/shadow sizes which need to be independantly adjusted when the text size changes.
1 parent 4996eab commit 94a9530

File tree

10 files changed

+86
-22
lines changed

10 files changed

+86
-22
lines changed
 

‎src/core/labeling/qgspallabeling.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,15 +1355,16 @@ QPixmap QgsPalLayerSettings::labelSettingsPreviewPixmap( const QgsPalLayerSettin
13551355
context.setPainter( &painter );
13561356

13571357
// slightly inset text to account for buffer/background
1358+
const double fontSize = context.convertToPainterUnits( tempFormat.size(), tempFormat.sizeUnit(), tempFormat.sizeMapUnitScale() );
13581359
double xtrans = 0;
13591360
if ( tempFormat.buffer().enabled() )
1360-
xtrans = context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
1361+
xtrans = tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
13611362
if ( tempFormat.background().enabled() && tempFormat.background().sizeType() != QgsTextBackgroundSettings::SizeFixed )
13621363
xtrans = std::max( xtrans, context.convertToPainterUnits( tempFormat.background().size().width(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
13631364

13641365
double ytrans = 0.0;
13651366
if ( tempFormat.buffer().enabled() )
1366-
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
1367+
ytrans = std::max( ytrans, tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
13671368
if ( tempFormat.background().enabled() )
13681369
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.background().size().height(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
13691370

‎src/core/textrenderer/qgstextformat.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,15 +1095,16 @@ QPixmap QgsTextFormat::textFormatPreviewPixmap( const QgsTextFormat &format, QSi
10951095
context.setFlag( Qgis::RenderContextFlag::Antialiasing, true );
10961096

10971097
// slightly inset text to account for buffer/background
1098+
const double fontSize = context.convertToPainterUnits( tempFormat.size(), tempFormat.sizeUnit(), tempFormat.sizeMapUnitScale() );
10981099
double xtrans = 0;
10991100
if ( tempFormat.buffer().enabled() )
1100-
xtrans = context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
1101+
xtrans = tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
11011102
if ( tempFormat.background().enabled() && tempFormat.background().sizeType() != QgsTextBackgroundSettings::SizeFixed )
11021103
xtrans = std::max( xtrans, context.convertToPainterUnits( tempFormat.background().size().width(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
11031104

11041105
double ytrans = 0.0;
11051106
if ( tempFormat.buffer().enabled() )
1106-
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
1107+
ytrans = std::max( ytrans, tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
11071108
if ( tempFormat.background().enabled() )
11081109
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.background().size().height(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
11091110

‎src/core/textrenderer/qgstextrenderer.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,9 @@ double QgsTextRenderer::drawBuffer( QgsRenderContext &context, const QgsTextRend
305305

306306
QgsTextBufferSettings buffer = format.buffer();
307307

308-
const double penSize = context.convertToPainterUnits( buffer.size(), buffer.sizeUnit(), buffer.sizeMapUnitScale() );
308+
const double penSize = buffer.sizeUnit() == QgsUnitTypes::RenderPercentage
309+
? context.convertToPainterUnits( format.size(), format.sizeUnit(), format.sizeMapUnitScale() ) * buffer.size() / 100
310+
: context.convertToPainterUnits( buffer.size(), buffer.sizeUnit(), buffer.sizeMapUnitScale() );
309311

310312
const double scaleFactor = calculateScaleFactorForFormat( context, format );
311313

@@ -458,7 +460,9 @@ void QgsTextRenderer::drawMask( QgsRenderContext &context, const QgsTextRenderer
458460
if ( ! p )
459461
return;
460462

461-
double penSize = context.convertToPainterUnits( mask.size(), mask.sizeUnit(), mask.sizeMapUnitScale() );
463+
double penSize = mask.sizeUnit() == QgsUnitTypes::RenderPercentage
464+
? context.convertToPainterUnits( format.size(), format.sizeUnit(), format.sizeMapUnitScale() ) * mask.size() / 100
465+
: context.convertToPainterUnits( mask.size(), mask.sizeUnit(), mask.sizeMapUnitScale() );
462466

463467
// buffer: draw the text with a big pen
464468
QPainterPath path;
@@ -652,14 +656,23 @@ double QgsTextRenderer::textHeight( const QgsRenderContext &context, const QgsTe
652656
return height;
653657

654658
double maxExtension = 0;
659+
const double fontSize = context.convertToPainterUnits( format.size(), format.sizeUnit(), format.sizeMapUnitScale() );
655660
if ( format.buffer().enabled() )
656661
{
657-
maxExtension += context.convertToPainterUnits( format.buffer().size(), format.buffer().sizeUnit(), format.buffer().sizeMapUnitScale() );
662+
maxExtension += format.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage
663+
? fontSize * format.buffer().size() / 100
664+
: context.convertToPainterUnits( format.buffer().size(), format.buffer().sizeUnit(), format.buffer().sizeMapUnitScale() );
658665
}
659666
if ( format.shadow().enabled() )
660667
{
661-
maxExtension += context.convertToPainterUnits( format.shadow().offsetDistance(), format.shadow().offsetUnit(), format.shadow().offsetMapUnitScale() )
662-
+ context.convertToPainterUnits( format.shadow().blurRadius(), format.shadow().blurRadiusUnit(), format.shadow().blurRadiusMapUnitScale() );
668+
maxExtension += ( format.shadow().offsetUnit() == QgsUnitTypes::RenderPercentage
669+
? fontSize * format.shadow().offsetDistance() / 100
670+
: context.convertToPainterUnits( format.shadow().offsetDistance(), format.shadow().offsetUnit(), format.shadow().offsetMapUnitScale() )
671+
)
672+
+ ( format.shadow().blurRadiusUnit() == QgsUnitTypes::RenderPercentage
673+
? fontSize * format.shadow().blurRadius() / 100
674+
: context.convertToPainterUnits( format.shadow().blurRadius(), format.shadow().blurRadiusUnit(), format.shadow().blurRadiusMapUnitScale() )
675+
);
663676
}
664677
if ( format.background().enabled() )
665678
{
@@ -1257,7 +1270,11 @@ void QgsTextRenderer::drawShadow( QgsRenderContext &context, const QgsTextRender
12571270

12581271
// generate pixmap representation of label component drawing
12591272
bool mapUnits = shadow.blurRadiusUnit() == QgsUnitTypes::RenderMapUnits;
1260-
double radius = context.convertToPainterUnits( shadow.blurRadius(), shadow.blurRadiusUnit(), shadow.blurRadiusMapUnitScale() );
1273+
1274+
const double fontSize = context.convertToPainterUnits( format.size(), format.sizeUnit(), format.sizeMapUnitScale() );
1275+
double radius = shadow.blurRadiusUnit() == QgsUnitTypes::RenderPercentage
1276+
? fontSize * shadow.blurRadius() / 100
1277+
: context.convertToPainterUnits( shadow.blurRadius(), shadow.blurRadiusUnit(), shadow.blurRadiusMapUnitScale() );
12611278
radius /= ( mapUnits ? context.scaleFactor() / component.dpiRatio : 1 );
12621279
radius = static_cast< int >( radius + 0.5 ); //NOLINT
12631280

@@ -1317,7 +1334,9 @@ void QgsTextRenderer::drawShadow( QgsRenderContext &context, const QgsTextRender
13171334
picti.end();
13181335
#endif
13191336

1320-
double offsetDist = context.convertToPainterUnits( shadow.offsetDistance(), shadow.offsetUnit(), shadow.offsetMapUnitScale() );
1337+
const double offsetDist = shadow.offsetUnit() == QgsUnitTypes::RenderPercentage
1338+
? fontSize * shadow.offsetDistance() / 100
1339+
: context.convertToPainterUnits( shadow.offsetDistance(), shadow.offsetUnit(), shadow.offsetMapUnitScale() );
13211340
double angleRad = shadow.offsetAngle() * M_PI / 180; // to radians
13221341
if ( shadow.offsetGlobal() )
13231342
{

‎src/gui/qgsfontbutton.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,15 +484,16 @@ QPixmap QgsFontButton::createDragIcon( QSize size, const QgsTextFormat *tempForm
484484
context.setPainter( &p );
485485

486486
// slightly inset text to account for buffer/background
487+
const double fontSize = context.convertToPainterUnits( tempFormat->size(), tempFormat->sizeUnit(), tempFormat->sizeMapUnitScale() );
487488
double xtrans = 0;
488489
if ( tempFormat->buffer().enabled() )
489-
xtrans = context.convertToPainterUnits( tempFormat->buffer().size(), tempFormat->buffer().sizeUnit(), tempFormat->buffer().sizeMapUnitScale() );
490+
xtrans = tempFormat->buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat->buffer().size() / 100 : context.convertToPainterUnits( tempFormat->buffer().size(), tempFormat->buffer().sizeUnit(), tempFormat->buffer().sizeMapUnitScale() );
490491
if ( tempFormat->background().enabled() && tempFormat->background().sizeType() != QgsTextBackgroundSettings::SizeFixed )
491492
xtrans = std::max( xtrans, context.convertToPainterUnits( tempFormat->background().size().width(), tempFormat->background().sizeUnit(), tempFormat->background().sizeMapUnitScale() ) );
492493

493494
double ytrans = 0.0;
494495
if ( tempFormat->buffer().enabled() )
495-
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat->buffer().size(), tempFormat->buffer().sizeUnit(), tempFormat->buffer().sizeMapUnitScale() ) );
496+
ytrans = std::max( ytrans, tempFormat->buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat->buffer().size() / 100 : context.convertToPainterUnits( tempFormat->buffer().size(), tempFormat->buffer().sizeUnit(), tempFormat->buffer().sizeMapUnitScale() ) );
496497
if ( tempFormat->background().enabled() )
497498
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat->background().size().height(), tempFormat->background().sizeUnit(), tempFormat->background().sizeMapUnitScale() ) );
498499

@@ -902,15 +903,16 @@ void QgsFontButton::updatePreview( const QColor &color, QgsTextFormat *format, Q
902903
context.setPainter( &p );
903904

904905
// slightly inset text to account for buffer/background
906+
const double fontSize = context.convertToPainterUnits( tempFormat.size(), tempFormat.sizeUnit(), tempFormat.sizeMapUnitScale() );
905907
double xtrans = 0;
906908
if ( tempFormat.buffer().enabled() )
907-
xtrans = context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
909+
xtrans = tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() );
908910
if ( tempFormat.background().enabled() && tempFormat.background().sizeType() != QgsTextBackgroundSettings::SizeFixed )
909911
xtrans = std::max( xtrans, context.convertToPainterUnits( tempFormat.background().size().width(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
910912

911913
double ytrans = 0.0;
912914
if ( tempFormat.buffer().enabled() )
913-
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
915+
ytrans = std::max( ytrans, tempFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * tempFormat.buffer().size() / 100 : context.convertToPainterUnits( tempFormat.buffer().size(), tempFormat.buffer().sizeUnit(), tempFormat.buffer().sizeMapUnitScale() ) );
914916
if ( tempFormat.background().enabled() )
915917
ytrans = std::max( ytrans, context.convertToPainterUnits( tempFormat.background().size().height(), tempFormat.background().sizeUnit(), tempFormat.background().sizeMapUnitScale() ) );
916918

‎src/gui/qgstextformatwidget.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,11 @@ void QgsTextFormatWidget::initWidget()
144144
mFontSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits
145145
<< QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderInches );
146146
mBufferUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
147-
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
147+
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches << QgsUnitTypes::RenderPercentage );
148148
mMaskBufferUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
149-
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches ); mShapeSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
150-
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
149+
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches << QgsUnitTypes::RenderPercentage );
150+
mShapeSizeUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
151+
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
151152
mShapeOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
152153
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
153154
mShapeRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits
@@ -156,9 +157,9 @@ void QgsTextFormatWidget::initWidget()
156157
mShapeStrokeWidthUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
157158
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
158159
mShadowOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
159-
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
160+
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches << QgsUnitTypes::RenderPercentage );
160161
mShadowRadiusUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
161-
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
162+
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches << QgsUnitTypes::RenderPercentage );
162163
mPointOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
163164
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
164165
mLineDistanceUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels

‎src/gui/qgstextpreview.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@ void QgsTextPreview::paintEvent( QPaintEvent *e )
4444
p.setRenderHint( QPainter::Antialiasing );
4545

4646
// slightly inset text
47+
const double fontSize = mContext.convertToPainterUnits( mFormat.size(), mFormat.sizeUnit(), mFormat.sizeMapUnitScale() );
4748
double xtrans = 0;
4849
if ( mFormat.buffer().enabled() )
49-
xtrans = mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() );
50+
xtrans = mFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * mFormat.buffer().size() / 100 : mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() );
5051
if ( mFormat.background().enabled() && mFormat.background().sizeType() != QgsTextBackgroundSettings::SizeFixed )
5152
xtrans = std::max( xtrans, mContext.convertToPainterUnits( mFormat.background().size().width(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
5253
xtrans += 4;
5354

5455
double ytrans = 0.0;
5556
if ( mFormat.buffer().enabled() )
56-
ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() ) );
57+
ytrans = std::max( ytrans, mFormat.buffer().sizeUnit() == QgsUnitTypes::RenderPercentage ? fontSize * mFormat.buffer().size() / 100 : mContext.convertToPainterUnits( mFormat.buffer().size(), mFormat.buffer().sizeUnit(), mFormat.buffer().sizeMapUnitScale() ) );
5758
if ( mFormat.background().enabled() )
5859
ytrans = std::max( ytrans, mContext.convertToPainterUnits( mFormat.background().size().height(), mFormat.background().sizeUnit(), mFormat.background().sizeMapUnitScale() ) );
5960
ytrans += 4;

‎tests/src/python/test_qgstextrenderer.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2299,6 +2299,16 @@ def testDrawBufferSizePixels(self):
22992299
format.buffer().setSizeUnit(QgsUnitTypes.RenderPixels)
23002300
assert self.checkRender(format, 'text_buffer_pixels', QgsTextRenderer.Buffer, text=['test'])
23012301

2302+
def testDrawBufferSizePercentage(self):
2303+
format = QgsTextFormat()
2304+
format.setFont(getTestFont('bold'))
2305+
format.setSize(60)
2306+
format.setSizeUnit(QgsUnitTypes.RenderPoints)
2307+
format.buffer().setEnabled(True)
2308+
format.buffer().setSize(10)
2309+
format.buffer().setSizeUnit(QgsUnitTypes.RenderPercentage)
2310+
assert self.checkRender(format, 'text_buffer_percentage', QgsTextRenderer.Buffer, text=['test'])
2311+
23022312
def testDrawBufferColor(self):
23032313
format = QgsTextFormat()
23042314
format.setFont(getTestFont('bold'))
@@ -2400,6 +2410,20 @@ def testDrawShadowOffsetPixels(self):
24002410
format.shadow().setOffsetUnit(QgsUnitTypes.RenderPixels)
24012411
assert self.checkRender(format, 'shadow_offset_pixels', QgsTextRenderer.Text, text=['test'])
24022412

2413+
def testDrawShadowOffsetPercentage(self):
2414+
format = QgsTextFormat()
2415+
format.setFont(getTestFont('bold'))
2416+
format.setSize(60)
2417+
format.setSizeUnit(QgsUnitTypes.RenderPoints)
2418+
format.setColor(QColor(255, 255, 255))
2419+
format.shadow().setEnabled(True)
2420+
format.shadow().setShadowPlacement(QgsTextShadowSettings.ShadowText)
2421+
format.shadow().setOpacity(1.0)
2422+
format.shadow().setBlurRadius(0)
2423+
format.shadow().setOffsetDistance(10)
2424+
format.shadow().setOffsetUnit(QgsUnitTypes.RenderPercentage)
2425+
assert self.checkRender(format, 'shadow_offset_percentage', QgsTextRenderer.Text, text=['test'])
2426+
24032427
def testDrawShadowBlurRadiusMM(self):
24042428
format = QgsTextFormat()
24052429
format.setFont(getTestFont('bold'))
@@ -2445,6 +2469,21 @@ def testDrawShadowBlurRadiusPixels(self):
24452469
format.shadow().setBlurRadiusUnit(QgsUnitTypes.RenderPixels)
24462470
assert self.checkRender(format, 'shadow_radius_pixels', QgsTextRenderer.Text, text=['test'])
24472471

2472+
def testDrawShadowBlurRadiusPercentage(self):
2473+
format = QgsTextFormat()
2474+
format.setFont(getTestFont('bold'))
2475+
format.setSize(60)
2476+
format.setSizeUnit(QgsUnitTypes.RenderPoints)
2477+
format.setColor(QColor(255, 255, 255))
2478+
format.shadow().setEnabled(True)
2479+
format.shadow().setShadowPlacement(QgsTextShadowSettings.ShadowText)
2480+
format.shadow().setOpacity(1.0)
2481+
format.shadow().setOffsetDistance(5)
2482+
format.shadow().setOffsetUnit(QgsUnitTypes.RenderMillimeters)
2483+
format.shadow().setBlurRadius(5)
2484+
format.shadow().setBlurRadiusUnit(QgsUnitTypes.RenderPercentage)
2485+
assert self.checkRender(format, 'shadow_radius_percentage', QgsTextRenderer.Text, text=['test'])
2486+
24482487
def testDrawShadowOpacity(self):
24492488
format = QgsTextFormat()
24502489
format.setFont(getTestFont('bold'))
Loading

0 commit comments

Comments
 (0)
Please sign in to comment.