Skip to content

Commit

Permalink
QT autoscale font size for fixed rect in value labels
Browse files Browse the repository at this point in the history
  • Loading branch information
rootSig committed Mar 14, 2018
1 parent f7feff8 commit 3ba8ddf
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 29 deletions.
3 changes: 3 additions & 0 deletions src/qt/forms/lastsendtransactionview.ui
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,9 @@ padding-right: 17px;</string>
<property name="text">
<string>[BCA]</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
Expand Down
10 changes: 5 additions & 5 deletions src/qt/forms/overviewpage.ui
Original file line number Diff line number Diff line change
Expand Up @@ -871,9 +871,9 @@ border-image: url(:/icons/qr_ico);</string>
<number>0</number>
</property>
<item alignment="Qt::AlignBottom">
<widget class="QLabel" name="label_7">
<widget class="QLabel" name="labelTotalCaption">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
Expand Down Expand Up @@ -961,14 +961,14 @@ font-size: 28px;</string>
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item alignment="Qt::AlignBottom">
<widget class="QLabel" name="label_8">
<widget class="QLabel" name="labelTotalUnit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
Expand Down
4 changes: 2 additions & 2 deletions src/qt/forms/sendcoinsdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,8 @@ font-weight: 500;</string>
<property name="styleSheet">
<string notr="true">background-color: transparent;
font-family: &quot;Roboto Mono&quot;;
font-size: 28px;
font-weight: 700;</string>
font-weight: 700;
font-size: 28px;</string>
</property>
<property name="text">
<string>0.00</string>
Expand Down
19 changes: 19 additions & 0 deletions src/qt/guiutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include <QTextDocument> // for Qt::mightBeRichText
#include <QThread>
#include <QMouseEvent>
#include <QFontMetrics>

#if QT_VERSION < 0x050000
#include <QUrl>
Expand All @@ -77,6 +78,24 @@ extern double NSAppKitVersionNumber;

namespace GUIUtil {

int getFontPixelSize(const QString& str, int minFontPixelSize, int maxFontPixelSize, int maxRectWidth, QString fontFamilyName, int fontWeight)
{
int res = minFontPixelSize;
for (int i = maxFontPixelSize; i >= minFontPixelSize; --i) {
QFont font(fontFamilyName);
font.setPixelSize(i);
font.setWeight(fontWeight);
QFontMetrics fm(font);
QRect rect = fm.boundingRect(str);
int textWidth = rect.width();
if (textWidth <= maxRectWidth) {
res = i;
break;
}
}
return res;
}

QString dateTimeStr(const QDateTime &date)
{
return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm");
Expand Down
2 changes: 2 additions & 0 deletions src/qt/guiutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ QT_END_NAMESPACE
*/
namespace GUIUtil
{
int getFontPixelSize(const QString& str, int minFontPixelSize, int maxFontPixelSize, int maxRectWidth, QString fontFamilyName, int fontWeight);

// Create human-readable string from date
QString dateTimeStr(const QDateTime &datetime);
QString dateTimeStr(qint64 nTime);
Expand Down
9 changes: 8 additions & 1 deletion src/qt/lastsendtransactionview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <qt/platformstyle.h>
#include <qt/bitcoinunits.h>
#include <qt/transactionrecord.h>
#include <qt/guiutil.h>

LastSendTransactionView::LastSendTransactionView(const PlatformStyle *platformStyle, QWidget *parent) :
QWidget(parent),
Expand All @@ -23,7 +24,13 @@ void LastSendTransactionView::setAmount(const CAmount& balance)
if (amount < 0) {
amount = -amount;
}
ui->amountLabel->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC_rounded, amount, false, BitcoinUnits::separatorAlways));

QString amountStr = BitcoinUnits::format(BitcoinUnits::Unit::BTC, amount, false, BitcoinUnits::separatorAlways);
int fontSize = GUIUtil::getFontPixelSize(amountStr, 5, 18, 85, QString("Roboto Mono"), 700);
QString labelAmountStyle = "font-family: \"Roboto Mono\"; font-weight: 700; font-size: ";
labelAmountStyle = labelAmountStyle + QString(std::to_string(fontSize).c_str()) + QString("px;");
ui->amountLabel->setStyleSheet(labelAmountStyle);
ui->amountLabel->setText(amountStr);
}

void LastSendTransactionView::setStatus(TransactionStatus& status)
Expand Down
29 changes: 9 additions & 20 deletions src/qt/overviewpage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

#include <QAbstractItemDelegate>
#include <QPainter>
#include <QFontMetrics>

#define DECORATION_SIZE 54
#define NUM_ITEMS 4
Expand Down Expand Up @@ -206,28 +205,18 @@ void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmed
currentWatchOnlyBalance = watchOnlyBalance;
currentWatchUnconfBalance = watchUnconfBalance;
currentWatchImmatureBalance = watchImmatureBalance;
ui->labelBalance->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC_rounded, balance, false, BitcoinUnits::separatorAlways));
ui->labelUnconfirmed->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC_rounded, unconfirmedBalance, false, BitcoinUnits::separatorAlways));
ui->labelBalance->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC, balance, false, BitcoinUnits::separatorAlways));
ui->labelUnconfirmed->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC, unconfirmedBalance, false, BitcoinUnits::separatorAlways));
//ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, immatureBalance, false, BitcoinUnits::separatorAlways));

//ui->labelTotal->setText(BitcoinUnits::format(unit, balance + unconfirmedBalance + immatureBalance, false, BitcoinUnits::separatorAlways));
/*QString textTotal = BitcoinUnits::format(unit, balance + unconfirmedBalance + immatureBalance, false, BitcoinUnits::separatorAlways);
int totalLabelWidth = ui->labelTotal->width();
int minFontSize = 5;
for (int i = 28; i >= minFontSize; --i) {
QFont font("Roboto Mono", i);
QFontMetrics fm(font);
QRect rect = fm.boundingRect(totalLabelWidth);
if (rect.width() <= totalLabelWidth || i == minFontSize) {
QString totalLabelStyle = "background-color: transparent; color: rgb(255, 198, 0); font-family: \"Roboto Mono\"; font-weight: 700; font-size: ";
totalLabelStyle = totalLabelStyle + QString(std::to_string(i).c_str()) + QString("px;");
ui->labelTotal->setStyleSheet(totalLabelStyle);
ui->labelTotal->setText(textTotal);
break;
}
}*/

ui->labelTotal->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC_rounded, balance + unconfirmedBalance, false, BitcoinUnits::separatorAlways));
QString textTotal = BitcoinUnits::format(BitcoinUnits::Unit::BTC, balance + unconfirmedBalance, false, BitcoinUnits::separatorAlways);
int labelTotalMaxWidth = ui->frameTotal->width() - ui->labelTotalCaption->width() - ui->labelTotalUnit->width();
int fontSize = GUIUtil::getFontPixelSize(textTotal, 5, 28, labelTotalMaxWidth, QString("Roboto Mono"), 700);
QString totalLabelStyle = "background-color: transparent; color: rgb(255, 198, 0); font-family: \"Roboto Mono\"; font-weight: 700; font-size: ";
totalLabelStyle = totalLabelStyle + QString(std::to_string(fontSize).c_str()) + QString("px;");
ui->labelTotal->setStyleSheet(totalLabelStyle);
ui->labelTotal->setText(textTotal);

//ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(unit, watchOnlyBalance, false, BitcoinUnits::separatorAlways));
//ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(unit, watchUnconfBalance, false, BitcoinUnits::separatorAlways));
Expand Down
7 changes: 6 additions & 1 deletion src/qt/sendcoinsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,12 @@ void SendCoinsDialog::setBalance(const CAmount& balance, const CAmount& unconfir

if(model && model->getOptionsModel())
{
ui->labelBalance->setText(BitcoinUnits::format(BitcoinUnits::Unit::BTC_rounded, balance));
QString balanceStr = BitcoinUnits::format(BitcoinUnits::Unit::BTC, balance);
int fontSize = GUIUtil::getFontPixelSize(balanceStr, 5, 28, 198, QString("Roboto Mono"), 700);
QString labelBalanceStyle = "background-color: transparent; font-family: \"Roboto Mono\"; font-weight: 700; font-size: ";
labelBalanceStyle = labelBalanceStyle + QString(std::to_string(fontSize).c_str()) + QString("px;");
ui->labelBalance->setStyleSheet(labelBalanceStyle);
ui->labelBalance->setText(balanceStr);
}
}

Expand Down

0 comments on commit 3ba8ddf

Please sign in to comment.