aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-08-17 11:12:16 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-08-17 11:12:16 +0200
commit7f0143b87433a40b651a1ea582c7dcd2fd22660b (patch)
tree39758129b7a03d2adae4c65913b1f9a3f57477cd /src
parent696660b24314d662e16f585deca7c0c2e732b63a (diff)
downloadkristall-7f0143b87433a40b651a1ea582c7dcd2fd22660b.tar.gz
Adds primitive support for emoji fonts.
Diffstat (limited to 'src')
-rw-r--r--src/about/updates.gemini5
-rw-r--r--src/documentstyle.cpp28
-rw-r--r--src/fonts.qrc6
-rw-r--r--src/fonts/NotoColorEmoji.ttfbin0 -> 9723244 bytes
-rw-r--r--src/fonts/OpenMoji-Color.ttfbin0 -> 13556148 bytes
-rw-r--r--src/kristall.pro5
-rw-r--r--src/main.cpp34
-rw-r--r--src/protocols/gopherclient.cpp1
8 files changed, 73 insertions, 6 deletions
diff --git a/src/about/updates.gemini b/src/about/updates.gemini
index c9e4a56..5cd7074 100644
--- a/src/about/updates.gemini
+++ b/src/about/updates.gemini
@@ -1,5 +1,10 @@
# Kristall Changelog
+## 0.4 - Improved user experience
+* Basic Emoji rendering support using OpenMoji
+*
+*
+
## 0.3 - TLS and security
* Adds support for transient client certificates
* Adds support for permanent client certificates
diff --git a/src/documentstyle.cpp b/src/documentstyle.cpp
index 7056cec..5f31a5f 100644
--- a/src/documentstyle.cpp
+++ b/src/documentstyle.cpp
@@ -265,7 +265,7 @@ bool DocumentStyle::load(QSettings &settings)
margin = settings.value("margins").toDouble();
theme = Theme(settings.value("theme").toInt());
}
- return true;
+ break;
}
case 1: {
theme = Theme(settings.value("theme", int(theme)).toInt());
@@ -318,10 +318,32 @@ bool DocumentStyle::load(QSettings &settings)
settings.endGroup();
}
- return true;
}
+ default:
+ return false;
}
- return false;
+
+
+
+ // Patch font lists to allow improved emoji display:
+
+ QStringList emojiFonts = { "Apple Color Emoji", "Segoe UI Emoji", "Twitter Color Emoji", "Noto Color Emoji", "JoyPixels" };
+
+ QFont::insertSubstitutions(h1_font.family(), emojiFonts);
+ QFont::insertSubstitutions(h2_font.family(), emojiFonts);
+ QFont::insertSubstitutions(h3_font.family(), emojiFonts);
+ QFont::insertSubstitutions(standard_font.family(), emojiFonts);
+ QFont::insertSubstitutions(preformatted_font.family(), emojiFonts);
+
+ // from docs:
+ // > After substituting a font, you must trigger the updating of the font by destroying and re-creating all QFont objects.
+ h1_font.fromString(h1_font.toString());
+ h2_font.fromString(h2_font.toString());
+ h3_font.fromString(h3_font.toString());
+ standard_font.fromString(standard_font.toString());
+ preformatted_font.fromString(preformatted_font.toString());
+
+ return true;
}
DocumentStyle DocumentStyle::derive(const QUrl &url) const
diff --git a/src/fonts.qrc b/src/fonts.qrc
new file mode 100644
index 0000000..960ca97
--- /dev/null
+++ b/src/fonts.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>fonts/OpenMoji-Color.ttf</file>
+ <file>fonts/NotoColorEmoji.ttf</file>
+ </qresource>
+</RCC>
diff --git a/src/fonts/NotoColorEmoji.ttf b/src/fonts/NotoColorEmoji.ttf
new file mode 100644
index 0000000..3fcd23f
--- /dev/null
+++ b/src/fonts/NotoColorEmoji.ttf
Binary files differ
diff --git a/src/fonts/OpenMoji-Color.ttf b/src/fonts/OpenMoji-Color.ttf
new file mode 100644
index 0000000..af3f779
--- /dev/null
+++ b/src/fonts/OpenMoji-Color.ttf
Binary files differ
diff --git a/src/kristall.pro b/src/kristall.pro
index eca386e..9f2324a 100644
--- a/src/kristall.pro
+++ b/src/kristall.pro
@@ -51,10 +51,10 @@ macx {
# Homebrew include paths
INCLUDEPATH += /usr/local/opt/qt/include
LIBS += -L/usr/local/opt/qt/lib
-
+
INCLUDEPATH += /usr/local/opt/openssl/include
LIBS += -L/usr/local/opt/openssl/lib
-
+
ICON = icons/AppIcon.icns
}
@@ -177,6 +177,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
+ ./fonts.qrc \
../lib/BreezeStyleSheets/breeze.qrc \
builtins.qrc \
icons.qrc
diff --git a/src/main.cpp b/src/main.cpp
index 9be807e..8de3530 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -7,6 +7,7 @@
#include <QCommandLineParser>
#include <QDebug>
#include <QStandardPaths>
+#include <QFontDatabase>
#include <cassert>
ProtocolSetup kristall::protocols;
@@ -50,6 +51,36 @@ static QDir derive_dir(QDir const & parent, QString subdir)
return child;
}
+static void addEmojiSubstitutions()
+{
+ QFontDatabase db;
+
+ auto const families = db.families();
+
+ // Provide OpenMoji font for a safe fallback
+ QFontDatabase::addApplicationFont(":/fonts/OpenMoji-Color.ttf");
+ QFontDatabase::addApplicationFont(":/fonts/NotoColorEmoji.ttf");
+
+ QStringList emojiFonts = {
+ // Use system fonts on windows/mac
+ "Apple Color Emoji",
+ "Segoe UI Emoji",
+
+ // Provide common fonts as a fallback:
+ // "Noto Color Emoji", // this font seems to replace a lot of text characters?
+ // "JoyPixels", // this font seems to replace a lot of text characters?
+
+ // Built-in font fallback
+ "OpenMoji",
+ };
+
+ for(auto const & family: families)
+ {
+ auto current = QFont::substitutes(family);
+ current << emojiFonts;
+ QFont::insertSubstitutions(family, current);
+ }
+}
int main(int argc, char *argv[])
@@ -61,6 +92,8 @@ int main(int argc, char *argv[])
kristall::clipboard = app.clipboard();
+ addEmojiSubstitutions();
+
QCommandLineParser cli_parser;
cli_parser.addVersionOption();
cli_parser.addHelpOption();
@@ -261,7 +294,6 @@ int main(int argc, char *argv[])
}
app_settings.endGroup();
-
w.show();
int exit_code = app.exec();
diff --git a/src/protocols/gopherclient.cpp b/src/protocols/gopherclient.cpp
index 63c35ca..658a3de 100644
--- a/src/protocols/gopherclient.cpp
+++ b/src/protocols/gopherclient.cpp
@@ -97,6 +97,7 @@ void GopherClient::on_finished()
{
if(not was_cancelled)
{
+ this->on_readRead();
emit this->requestComplete(this->body, mime);
was_cancelled = true;
}