Add minimum font size in chat.

This commit is contained in:
Phenom 2015-09-07 20:19:52 +02:00
parent 7195d4c20d
commit 3f155b9b75
5 changed files with 62 additions and 8 deletions

View File

@ -870,6 +870,7 @@ void ChatWidget::addChatMsg(bool incoming, const QString &name, const QDateTime
if (!Settings->valueFromGroup("Chat", "EnableCustomFontSize", true).toBool()) { if (!Settings->valueFromGroup("Chat", "EnableCustomFontSize", true).toBool()) {
formatTextFlag |= RSHTML_FORMATTEXT_REMOVE_FONT_SIZE; formatTextFlag |= RSHTML_FORMATTEXT_REMOVE_FONT_SIZE;
} }
int desiredMinimumFontSize = Settings->valueFromGroup("Chat", "MinimumFontSize", 10).toInt();
if (!Settings->valueFromGroup("Chat", "EnableBold", true).toBool()) { if (!Settings->valueFromGroup("Chat", "EnableBold", true).toBool()) {
formatTextFlag |= RSHTML_FORMATTEXT_REMOVE_FONT_WEIGHT; formatTextFlag |= RSHTML_FORMATTEXT_REMOVE_FONT_WEIGHT;
} }
@ -893,7 +894,7 @@ void ChatWidget::addChatMsg(bool incoming, const QString &name, const QDateTime
formatFlag |= CHAT_FORMATMSG_SYSTEM; formatFlag |= CHAT_FORMATMSG_SYSTEM;
} }
QString formattedMessage = RsHtml().formatText(ui->textBrowser->document(), message, formatTextFlag, backgroundColor, desiredContrast); QString formattedMessage = RsHtml().formatText(ui->textBrowser->document(), message, formatTextFlag, backgroundColor, desiredContrast, desiredMinimumFontSize);
QDateTime dtTimestamp=incoming ? sendTime : recvTime; QDateTime dtTimestamp=incoming ? sendTime : recvTime;
QString formatMsg = chatStyle.formatMessage(type, name, dtTimestamp, formattedMessage, formatFlag); QString formatMsg = chatStyle.formatMessage(type, name, dtTimestamp, formattedMessage, formatFlag);
QString timeStamp = dtTimestamp.toString(Qt::ISODate); QString timeStamp = dtTimestamp.toString(Qt::ISODate);

View File

@ -115,6 +115,7 @@ ChatPage::save(QString &/*errmsg*/)
Settings->setValue("Emoteicons_GroupChat", ui.checkBox_emotegroupchat->isChecked()); Settings->setValue("Emoteicons_GroupChat", ui.checkBox_emotegroupchat->isChecked());
Settings->setValue("EnableCustomFonts", ui.checkBox_enableCustomFonts->isChecked()); Settings->setValue("EnableCustomFonts", ui.checkBox_enableCustomFonts->isChecked());
Settings->setValue("EnableCustomFontSize", ui.checkBox_enableCustomFontSize->isChecked()); Settings->setValue("EnableCustomFontSize", ui.checkBox_enableCustomFontSize->isChecked());
Settings->setValue("MinimumFontSize", ui.minimumFontSize->value());
Settings->setValue("EnableBold", ui.checkBox_enableBold->isChecked()); Settings->setValue("EnableBold", ui.checkBox_enableBold->isChecked());
Settings->setValue("EnableItalics", ui.checkBox_enableItalics->isChecked()); Settings->setValue("EnableItalics", ui.checkBox_enableItalics->isChecked());
Settings->setValue("MinimumContrast", ui.minimumContrast->value()); Settings->setValue("MinimumContrast", ui.minimumContrast->value());
@ -219,6 +220,7 @@ ChatPage::load()
ui.checkBox_emotegroupchat->setChecked(Settings->value("Emoteicons_GroupChat", true).toBool()); ui.checkBox_emotegroupchat->setChecked(Settings->value("Emoteicons_GroupChat", true).toBool());
ui.checkBox_enableCustomFonts->setChecked(Settings->value("EnableCustomFonts", true).toBool()); ui.checkBox_enableCustomFonts->setChecked(Settings->value("EnableCustomFonts", true).toBool());
ui.checkBox_enableCustomFontSize->setChecked(Settings->value("EnableCustomFontSize", true).toBool()); ui.checkBox_enableCustomFontSize->setChecked(Settings->value("EnableCustomFontSize", true).toBool());
ui.minimumFontSize->setValue(Settings->value("MinimumFontSize", 10).toInt());
ui.checkBox_enableBold->setChecked(Settings->value("EnableBold", true).toBool()); ui.checkBox_enableBold->setChecked(Settings->value("EnableBold", true).toBool());
ui.checkBox_enableItalics->setChecked(Settings->value("EnableItalics", true).toBool()); ui.checkBox_enableItalics->setChecked(Settings->value("EnableItalics", true).toBool());
ui.minimumContrast->setValue(Settings->value("MinimumContrast", 4.5).toDouble()); ui.minimumContrast->setValue(Settings->value("MinimumContrast", 4.5).toDouble());

View File

@ -75,6 +75,43 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<layout class="QHBoxLayout" name="hl_minimumFontSize">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="minimumFontSizeLabel">
<property name="text">
<string>Minimum font size</string>
</property>
</widget>
</item>
<item>
<spacer name="hs_minimumFontSize">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="minimumFontSize">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>64</number>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="QCheckBox" name="checkBox_enableBold"> <widget class="QCheckBox" name="checkBox_enableBold">
<property name="text"> <property name="text">

View File

@ -376,7 +376,7 @@ static QString saveSpace(const QString text)
return savedSpaceText; return savedSpaceText;
} }
QString RsHtml::formatText(QTextDocument *textDocument, const QString &text, ulong flag, const QColor &backgroundColor, qreal desiredContrast) QString RsHtml::formatText(QTextDocument *textDocument, const QString &text, ulong flag, const QColor &backgroundColor, qreal desiredContrast, int desiredMinimumFontSize)
{ {
if (flag == 0 || text.isEmpty()) { if (flag == 0 || text.isEmpty()) {
// nothing to do // nothing to do
@ -416,7 +416,7 @@ QString RsHtml::formatText(QTextDocument *textDocument, const QString &text, ulo
formattedText = doc.toString(-1); // -1 removes any annoying carriage return misinterpreted by QTextEdit formattedText = doc.toString(-1); // -1 removes any annoying carriage return misinterpreted by QTextEdit
if (flag & RSHTML_OPTIMIZEHTML_MASK) { if (flag & RSHTML_OPTIMIZEHTML_MASK) {
optimizeHtml(formattedText, flag, backgroundColor, desiredContrast); optimizeHtml(formattedText, flag, backgroundColor, desiredContrast, desiredMinimumFontSize);
} }
return formattedText; return formattedText;
@ -734,12 +734,14 @@ static void optimizeHtml(QDomDocument& doc
* is passed inside flag. * is passed inside flag.
* @param desiredContrast: Minimum contrast between text and background color, * @param desiredContrast: Minimum contrast between text and background color,
* between 1 and 21. * between 1 and 21.
* @param desiredMinimumFontSize: Minimum font size.
*/ */
static void styleCreate(QDomDocument& doc static void styleCreate(QDomDocument& doc
, QHash<QString, QStringList*> stylesList , QHash<QString, QStringList*> stylesList
, unsigned int flag , unsigned int flag
, qreal bglum , qreal bglum
, qreal desiredContrast) , qreal desiredContrast
, int desiredMinimumFontSize)
{ {
QDomElement styleElem; QDomElement styleElem;
do{ do{
@ -792,6 +794,15 @@ static void styleCreate(QDomDocument& doc
QString key = keyvalue.at(0).trimmed(); QString key = keyvalue.at(0).trimmed();
QString val = keyvalue.at(1).trimmed(); QString val = keyvalue.at(1).trimmed();
if (key == "font-size") {
QRegExp re("(\\d+)(\\D*)");
if (re.indexIn(val) != -1) {
bool ok; int iVal = re.cap(1).toInt(&ok);
if (ok && (iVal < desiredMinimumFontSize)) {
val = QString::number(desiredMinimumFontSize) + re.cap(2);
}
}
}
if ((flag & RSHTML_FORMATTEXT_REMOVE_FONT_FAMILY && key == "font-family") || if ((flag & RSHTML_FORMATTEXT_REMOVE_FONT_FAMILY && key == "font-family") ||
(flag & RSHTML_FORMATTEXT_REMOVE_FONT_SIZE && key == "font-size") || (flag & RSHTML_FORMATTEXT_REMOVE_FONT_SIZE && key == "font-size") ||
(flag & RSHTML_FORMATTEXT_REMOVE_FONT_WEIGHT && key == "font-weight") || (flag & RSHTML_FORMATTEXT_REMOVE_FONT_WEIGHT && key == "font-weight") ||
@ -864,9 +875,12 @@ void RsHtml::optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag
* is passed inside flag. * is passed inside flag.
* @param desiredContrast Minimum contrast between text and background color, * @param desiredContrast Minimum contrast between text and background color,
* between 1 and 21. * between 1 and 21.
* @param desiredMinimumFontSize Minimum font size.
*/ */
void RsHtml::optimizeHtml(QString &text, unsigned int flag /*= 0*/ void RsHtml::optimizeHtml(QString &text, unsigned int flag /*= 0*/
, const QColor &backgroundColor /*= Qt::white*/, qreal desiredContrast /*= 1.0*/ , const QColor &backgroundColor /*= Qt::white*/
, qreal desiredContrast /*= 1.0*/
, int desiredMinimumFontSize /*=10*/
) )
{ {
@ -888,7 +902,7 @@ void RsHtml::optimizeHtml(QString &text, unsigned int flag /*= 0*/
QHash<QString, QString> knownStyle; QHash<QString, QString> knownStyle;
::optimizeHtml(doc, body, stylesList, knownStyle); ::optimizeHtml(doc, body, stylesList, knownStyle);
::styleCreate(doc, stylesList, flag, ::getRelativeLuminance(backgroundColor), desiredContrast); ::styleCreate(doc, stylesList, flag, ::getRelativeLuminance(backgroundColor), desiredContrast, desiredMinimumFontSize);
text = doc.toString(-1); text = doc.toString(-1);
// std::cerr << "Optimized text to " << text.length() << " bytes , instead of " << originalLength << std::endl; // std::cerr << "Optimized text to " << text.length() << " bytes , instead of " << originalLength << std::endl;

View File

@ -59,11 +59,11 @@ public:
static void initEmoticons(const QHash< QString, QString >& hash); static void initEmoticons(const QHash< QString, QString >& hash);
QString formatText(QTextDocument *textDocument, const QString &text, ulong flag, const QColor &backgroundColor = Qt::white, qreal desiredContrast = 1.0); QString formatText(QTextDocument *textDocument, const QString &text, ulong flag, const QColor &backgroundColor = Qt::white, qreal desiredContrast = 1.0, int desiredMinimumFontSize = 10);
static bool findAnchors(const QString &text, QStringList& urls); static bool findAnchors(const QString &text, QStringList& urls);
static void optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag = 0); static void optimizeHtml(QTextEdit *textEdit, QString &text, unsigned int flag = 0);
static void optimizeHtml(QString &text, unsigned int flag = 0, const QColor &backgroundColor = Qt::white, qreal desiredContrast = 1.0); static void optimizeHtml(QString &text, unsigned int flag = 0, const QColor &backgroundColor = Qt::white, qreal desiredContrast = 1.0, int desiredMinimumFontSize = 10);
static QString toHtml(QString text, bool realHtml = true); static QString toHtml(QString text, bool realHtml = true);
static bool makeEmbeddedImage(const QString &fileName, QString &embeddedImage, const int maxPixels); static bool makeEmbeddedImage(const QString &fileName, QString &embeddedImage, const int maxPixels);