Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix rendering of upside down text along paths
  • Loading branch information
nyalldawson committed Apr 4, 2023
1 parent 8f5476e commit 8ee5ba8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/core/textrenderer/qgstextrenderer.cpp
Expand Up @@ -314,7 +314,7 @@ void QgsTextRenderer::drawDocumentOnLine( const QPolygonF &line, const QgsTextFo
-1, -1,
QgsTextRendererUtils::CurvedTextFlag::UseBaselinePlacement
| QgsTextRendererUtils::CurvedTextFlag::TruncateStringWhenLineIsTooShort
| QgsTextRendererUtils::CurvedTextFlag::UprightCharactersOnly );
);

if ( placement->graphemePlacement.empty() )
return;
Expand Down
39 changes: 39 additions & 0 deletions tests/src/python/test_qgstextrenderer.py
Expand Up @@ -3852,6 +3852,45 @@ def testDrawTextOnCurvedLine(self):
painter.end()
self.assertTrue(self.imageCheck('text_on_curved_line', 'text_on_curved_line', image))

def testDrawTextOnCurvedLineUpsideDown(self):
format = QgsTextFormat()
format.setFont(getTestFont('bold'))
format.setSize(16)
format.setSizeUnit(QgsUnitTypes.RenderPoints)
format.buffer().setEnabled(True)
format.buffer().setSize(2)
format.buffer().setSizeUnit(QgsUnitTypes.RenderMillimeters)

image = QImage(400, 400, QImage.Format_RGB32)

painter = QPainter()
ms = QgsMapSettings()
ms.setExtent(QgsRectangle(0, 0, 50, 50))
ms.setOutputSize(image.size())
context = QgsRenderContext.fromMapSettings(ms)
context.setPainter(painter)
context.setScaleFactor(96 / 25.4) # 96 DPI
context.setFlag(QgsRenderContext.ApplyScalingWorkaroundForTextRendering, True)

painter.begin(image)
painter.setRenderHint(QPainter.Antialiasing)
image.fill(QColor(152, 219, 249))

painter.setBrush(Qt.NoBrush)
painter.setPen(QPen(QColor(0, 0, 0)))

line = QPolygonF(reversed([QPointF(50, 200), QPointF(100, 230), QPointF(150, 235), QPointF(350, 200)]))
painter.drawPolyline(line)

painter.setBrush(QBrush(QColor(182, 239, 255)))
painter.setPen(Qt.NoPen)

format.setAllowHtmlFormatting(True)
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)

painter.end()
self.assertTrue(self.imageCheck('text_on_curved_line_upside_down', 'text_on_curved_line_upside_down', image))

def testDrawTextOnCurvedLineBackground(self):
format = QgsTextFormat()
format.setFont(getTestFont('bold'))
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8ee5ba8

Please sign in to comment.