Fix incorrect font sizes (#321)

Recently, when chasing the font size differences between the wayland and xcb Qt backends, I ended up normalizing on the wayland sizing when bypassing the backend's font metrics calculation (#272).  Unfortunately, the wayland backend was not rendering the font sizes correctly, and it was a mistake to duplicate its behavior. 

* Assume a virtual DPI of 72 pixels/in instead of 96 when compulting font size
  - Based on testing, this produces the correct font size
  - Updated reference labels.
* No longer need to scale fonts when importing glabels-3 files.
  - The glabels-3 font sizes were correct afterall!  (#306)
  - No longer need to compensate for scale factor in unit tests when importing glabels-3 files.
This commit is contained in:
Jaye Evins
2026-03-27 15:47:46 -04:00
committed by GitHub
parent 06675f8314
commit d1ee78e58a
5 changed files with 10 additions and 15 deletions
+6 -3
View File
@@ -42,13 +42,16 @@ namespace
///
/// Calculate pixel size
///
/// Assume a virtual DPI of 96 pixels/inch for all QPainter contexts.
/// Assume a virtual DPI of 72 pixels/inch for all QPainter contexts.
/// Ideally, we should use pointSizes for device independence, but as
/// Qt-6.4 on X11, Wayland, and MacOS this approach has better results.
/// of Qt-6.4, the xcb (X11) and Wayland backends will render the same
/// font differently. Currently this function is basically the unity
/// function (i.e. 1 pt = 1 pixel) with rounding, but is a placeholder
/// that may need to be tweaked for different backends.
///
int pixelSize( double pointSize )
{
const double virtual_dpi = 96;
const double virtual_dpi = 72;
return qMax( 1, qRound( pointSize * virtual_dpi/72.0 ) );
}
}
+1 -3
View File
@@ -53,8 +53,6 @@ namespace
using namespace glabels::model;
const uint32_t GDK_PIXBUF_MAGIC_NUMBER {0x47646b50};
const double FONT_SCALE_FACTOR {0.75}; // In glabels-3, fonts were rendered at 75% of specified fontsize
const Distance MARGIN_OFFSET { Distance::pt(3) }; // In glabels-3, margin was not accounted for in text baseline calculations
typedef enum
@@ -557,7 +555,7 @@ namespace glabels::model
/* font attrs */
fontFamily = XmlUtil::getStringAttr( element, "font_family", "Sans" );
fontSize = XmlUtil::getDoubleAttr( element, "font_size", 10 ) * FONT_SCALE_FACTOR;
fontSize = XmlUtil::getDoubleAttr( element, "font_size", 10 );
fontWeight = getWeightAttr( element, "font_weight", QFont::Normal );
fontItalicFlag = XmlUtil::getBoolAttr( element, "font_italic", false );
+3 -9
View File
@@ -60,12 +60,6 @@ using namespace glabels::barcode;
using namespace glabels::merge;
namespace
{
const double FONT_SCALE_FACTOR {0.75};
}
void TestXmlLabel::initTestCase()
{
QCoreApplication::setOrganizationName( glabels::model::Version::ORGANIZATION_NAME );
@@ -548,7 +542,7 @@ void TestXmlLabel::parser_3ReadFile()
QCOMPARE( modelTextObject0->shadow(), false );
QCOMPARE( modelTextObject0->text(), QString( "Hello, my name is" ) );
QCOMPARE( modelTextObject0->fontFamily(), QString( "Sans" ) );
QCOMPARE( modelTextObject0->fontSize(), 16 * FONT_SCALE_FACTOR );
QCOMPARE( modelTextObject0->fontSize(), 16 );
QCOMPARE( modelTextObject0->fontWeight(), QFont::Bold );
QCOMPARE( modelTextObject0->fontItalicFlag(), false );
QCOMPARE( modelTextObject0->textLineSpacing(), 1.0 );
@@ -566,7 +560,7 @@ void TestXmlLabel::parser_3ReadFile()
QCOMPARE( modelTextObject1->shadow(), false );
QCOMPARE( modelTextObject1->text(), QString( "${Name}" ) );
QCOMPARE( modelTextObject1->fontFamily(), QString( "Sans" ) );
QCOMPARE( modelTextObject1->fontSize(), 20 * FONT_SCALE_FACTOR );
QCOMPARE( modelTextObject1->fontSize(), 20 );
QCOMPARE( modelTextObject1->fontWeight(), QFont::Normal );
QCOMPARE( modelTextObject1->fontItalicFlag(), false );
QCOMPARE( modelTextObject1->textLineSpacing(), 1.0 );
@@ -584,7 +578,7 @@ void TestXmlLabel::parser_3ReadFile()
QCOMPARE( modelTextObject2->shadow(), false );
QCOMPARE( modelTextObject2->text(), QString( "Department: ${Department}" ) );
QCOMPARE( modelTextObject2->fontFamily(), QString( "Sans" ) );
QCOMPARE( modelTextObject2->fontSize(), 11 * FONT_SCALE_FACTOR );
QCOMPARE( modelTextObject2->fontSize(), 11 );
QCOMPARE( modelTextObject2->fontWeight(), QFont::Normal );
QCOMPARE( modelTextObject2->fontItalicFlag(), false );
QCOMPARE( modelTextObject2->textLineSpacing(), 1.0 );