Skip to content

Commit 8ee5ba8

Browse files
committedApr 4, 2023
Fix rendering of upside down text along paths
1 parent 8f5476e commit 8ee5ba8

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed
 

‎src/core/textrenderer/qgstextrenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ void QgsTextRenderer::drawDocumentOnLine( const QPolygonF &line, const QgsTextFo
314314
-1, -1,
315315
QgsTextRendererUtils::CurvedTextFlag::UseBaselinePlacement
316316
| QgsTextRendererUtils::CurvedTextFlag::TruncateStringWhenLineIsTooShort
317-
| QgsTextRendererUtils::CurvedTextFlag::UprightCharactersOnly );
317+
);
318318

319319
if ( placement->graphemePlacement.empty() )
320320
return;

‎tests/src/python/test_qgstextrenderer.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3852,6 +3852,45 @@ def testDrawTextOnCurvedLine(self):
38523852
painter.end()
38533853
self.assertTrue(self.imageCheck('text_on_curved_line', 'text_on_curved_line', image))
38543854

3855+
def testDrawTextOnCurvedLineUpsideDown(self):
3856+
format = QgsTextFormat()
3857+
format.setFont(getTestFont('bold'))
3858+
format.setSize(16)
3859+
format.setSizeUnit(QgsUnitTypes.RenderPoints)
3860+
format.buffer().setEnabled(True)
3861+
format.buffer().setSize(2)
3862+
format.buffer().setSizeUnit(QgsUnitTypes.RenderMillimeters)
3863+
3864+
image = QImage(400, 400, QImage.Format_RGB32)
3865+
3866+
painter = QPainter()
3867+
ms = QgsMapSettings()
3868+
ms.setExtent(QgsRectangle(0, 0, 50, 50))
3869+
ms.setOutputSize(image.size())
3870+
context = QgsRenderContext.fromMapSettings(ms)
3871+
context.setPainter(painter)
3872+
context.setScaleFactor(96 / 25.4) # 96 DPI
3873+
context.setFlag(QgsRenderContext.ApplyScalingWorkaroundForTextRendering, True)
3874+
3875+
painter.begin(image)
3876+
painter.setRenderHint(QPainter.Antialiasing)
3877+
image.fill(QColor(152, 219, 249))
3878+
3879+
painter.setBrush(Qt.NoBrush)
3880+
painter.setPen(QPen(QColor(0, 0, 0)))
3881+
3882+
line = QPolygonF(reversed([QPointF(50, 200), QPointF(100, 230), QPointF(150, 235), QPointF(350, 200)]))
3883+
painter.drawPolyline(line)
3884+
3885+
painter.setBrush(QBrush(QColor(182, 239, 255)))
3886+
painter.setPen(Qt.NoPen)
3887+
3888+
format.setAllowHtmlFormatting(True)
3889+
QgsTextRenderer.drawTextOnLine(line, 'm<sup>y</sup> <span style="font-size: 29pt; color: red;">curv<sup style="font-size: 10pt">ed</sup></span> te<sub>xt</sub>', context, format, 20, 0)
3890+
3891+
painter.end()
3892+
self.assertTrue(self.imageCheck('text_on_curved_line_upside_down', 'text_on_curved_line_upside_down', image))
3893+
38553894
def testDrawTextOnCurvedLineBackground(self):
38563895
format = QgsTextFormat()
38573896
format.setFont(getTestFont('bold'))

0 commit comments

Comments
 (0)
Please sign in to comment.