Better way to find maximally suitable font size.
--HG-- branch : feature
This commit is contained in:
parent
97d76957e3
commit
227e4f0ba0
|
@ -189,6 +189,7 @@ void VTextManager::FitFontSize(qreal fW, qreal fH)
|
||||||
// get ratio between char width and height
|
// get ratio between char width and height
|
||||||
|
|
||||||
int iMaxLen = 0;
|
int iMaxLen = 0;
|
||||||
|
TextLine maxLine;
|
||||||
QFont fnt;
|
QFont fnt;
|
||||||
for (int i = 0; i < GetSourceLinesCount(); ++i)
|
for (int i = 0; i < GetSourceLinesCount(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -198,15 +199,28 @@ void VTextManager::FitFontSize(qreal fW, qreal fH)
|
||||||
fnt.setWeight(tl.m_eFontWeight);
|
fnt.setWeight(tl.m_eFontWeight);
|
||||||
fnt.setStyle(tl.m_eStyle);
|
fnt.setStyle(tl.m_eStyle);
|
||||||
QFontMetrics fm(fnt);
|
QFontMetrics fm(fnt);
|
||||||
const int iTW = fm.width(GetSourceLine(i).m_qsText);
|
const int iTW = fm.width(tl.m_qsText);
|
||||||
if (iTW > iMaxLen)
|
if (iTW > iMaxLen)
|
||||||
{
|
{
|
||||||
iMaxLen = iTW;
|
iMaxLen = iTW;
|
||||||
|
maxLine = tl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (iMaxLen > fW)
|
if (iMaxLen > fW)
|
||||||
{
|
{
|
||||||
iFS = qFloor(iFS*fW/iMaxLen);
|
QFont fnt = m_font;
|
||||||
|
fnt.setWeight(maxLine.m_eFontWeight);
|
||||||
|
fnt.setStyle(maxLine.m_eStyle);
|
||||||
|
|
||||||
|
int lineLength = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
--iFS;
|
||||||
|
fnt.setPixelSize(iFS + maxLine.m_iFontSize);
|
||||||
|
QFontMetrics fm(fnt);
|
||||||
|
lineLength = fm.width(maxLine.m_qsText);
|
||||||
|
}
|
||||||
|
while (lineLength > fW && iFS > MIN_FONT_SIZE);
|
||||||
}
|
}
|
||||||
SetFontSize(iFS);
|
SetFontSize(iFS);
|
||||||
qDebug() << "Font size" << GetSourceLinesCount() << iFS;
|
qDebug() << "Font size" << GetSourceLinesCount() << iFS;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user