This commit is contained in:
Matthias Koefferlein 2021-11-25 20:37:10 +01:00
parent c3010745ec
commit 2ee4d5414e
3 changed files with 38 additions and 5 deletions

View File

@ -50,6 +50,30 @@
namespace db
{
// ---------------------------------------------------------------
#if defined(HAVE_QT)
static int fm_width (const QFontMetrics &fm, const QString &s)
{
#if QT_VERSION >= 0x60000
return fm.horizontalAdvance (s);
#else
return fm.width (s);
#endif
}
static int fm_width (const QFontMetrics &fm, const QChar &s)
{
#if QT_VERSION >= 0x60000
return fm.horizontalAdvance (s);
#else
return fm.width (s);
#endif
}
#endif
// ---------------------------------------------------------------
// DXFReader
@ -1279,7 +1303,7 @@ DXFReader::deliver_text (db::Shapes &shapes, const std::string &s, const db::DCp
// The m_text_scaling divider is the letter width in percent of the height.
// 92 is the default letter pitch in percent of the text height.
int pixel_size_ref = int (floor (0.5 + 100.0 * fm.width (QChar::fromLatin1 ('X')) / (0.92 * m_text_scaling)));
int pixel_size_ref = int (floor (0.5 + 100.0 * fm_width (fm, QChar::fromLatin1 ('X')) / (0.92 * m_text_scaling)));
// split text into lines
QStringList lines = QString::fromUtf8 (s.c_str ()).split (QString::fromUtf8 ("\n"));
@ -1302,7 +1326,7 @@ DXFReader::deliver_text (db::Shapes &shapes, const std::string &s, const db::DCp
lines.clear ();
for (QStringList::const_iterator l = ll.begin (); l != ll.end (); ++l) {
if (fm.width (*l) * h / pixel_size_ref > w) {
if (fm_width (fm, *l) * h / pixel_size_ref > w) {
// wrapping required
QString line;
@ -1321,7 +1345,7 @@ DXFReader::deliver_text (db::Shapes &shapes, const std::string &s, const db::DCp
++i;
}
double wc = fm.width (ls) * h / pixel_size_ref;
double wc = fm_width (fm, ls) * h / pixel_size_ref;
if (wl + wc > w) {
lines.push_back (line);
line.clear ();
@ -1351,9 +1375,9 @@ DXFReader::deliver_text (db::Shapes &shapes, const std::string &s, const db::DCp
double x0 = 0.0;
if (ha == HAlignLeft || ha == NoHAlign) {
} else if (ha == HAlignCenter) {
x0 -= fm.width (*l) * 0.5 * h / pixel_size_ref;
x0 -= fm_width (fm, *l) * 0.5 * h / pixel_size_ref;
} else {
x0 -= fm.width (*l) * h / pixel_size_ref;
x0 -= fm_width (fm, *l) * h / pixel_size_ref;
}
QPainterPath pp;

View File

@ -7,6 +7,10 @@ contains(QT_CONFIG, opengl) {
SUBDIRS = lay_plugin unit_tests
}
greaterThan(QT_MAJOR_VERSION, 5) {
QT += openglwidgets
}
unit_tests.depends += lay_plugin
}

View File

@ -109,8 +109,13 @@ public:
QFontMetrics fm (font ());
m_line_height = std::max (fm.height (), m_pixmap_size + 4);
m_font_height = fm.height () * 3 / 2;
#if QT_VERSION >= 0x60000
m_first_column_width = fm.horizontalAdvance (QString::fromUtf8 ("LAYERNAME"));
m_column_width = m_pixmap_size + 4 + m_spacing + fm.horizontalAdvance (QString::fromUtf8 ("1.00G "));
#else
m_first_column_width = fm.width (QString::fromUtf8 ("LAYERNAME"));
m_column_width = m_pixmap_size + 4 + m_spacing + fm.width (QString::fromUtf8 ("1.00G "));
#endif
}
QSize sizeHint () const