aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-09 19:32:59 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-09 19:32:59 +0200
commit0739bce0be84e8ccebdc632726efd0fd6f612789 (patch)
tree7c6d705c87900a72d13d3924f6b1a59b5f2ea58d /src
parent18fde8808d0f9febb668ff96714aefba82c0dce2 (diff)
downloadkristall-0739bce0be84e8ccebdc632726efd0fd6f612789.tar.gz
Introduces plain text renderer for improved styling.
Diffstat (limited to 'src')
-rw-r--r--src/browsertab.cpp18
-rw-r--r--src/kristall.pro2
-rw-r--r--src/plaintextrenderer.cpp19
-rw-r--r--src/plaintextrenderer.hpp25
4 files changed, 52 insertions, 12 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp
index 5d18040..cde8fc7 100644
--- a/src/browsertab.cpp
+++ b/src/browsertab.cpp
@@ -1,9 +1,12 @@
#include "browsertab.hpp"
#include "ui_browsertab.h"
#include "mainwindow.hpp"
-#include "geminirenderer.hpp"
#include "settingsdialog.hpp"
+
#include "gophermaprenderer.hpp"
+#include "geminirenderer.hpp"
+#include "plaintextrenderer.hpp"
+
#include "ioutil.hpp"
#include "kristall.hpp"
@@ -307,12 +310,7 @@ void BrowserTab::on_requestComplete(const QByteArray &data, const QString &mime)
doc_style);
}
else if(not plaintext_only and mime.startsWith("text/finger")) {
- document = std::make_unique<QTextDocument>();
-
- document->setDefaultFont(doc_style.preformatted_font);
- document->setDefaultStyleSheet(doc_style.toStyleSheet());
- document->setDocumentMargin(doc_style.margin);
- document->setPlainText(QString::fromUtf8(data));
+ document = PlainTextRenderer::render(data, doc_style);
}
else if(not plaintext_only and mime.startsWith("text/html")) {
document = std::make_unique<QTextDocument>();
@@ -332,11 +330,7 @@ void BrowserTab::on_requestComplete(const QByteArray &data, const QString &mime)
}
#endif
else if(mime.startsWith("text/")) {
- document = std::make_unique<QTextDocument>();
- document->setDefaultFont(doc_style.standard_font);
- document->setDefaultStyleSheet(doc_style.toStyleSheet());
- document->setDocumentMargin(doc_style.margin);
- document->setPlainText(QString::fromUtf8(data));
+ document = PlainTextRenderer::render(data, doc_style);
}
else if(mime.startsWith("image/")) {
doc_type = Image;
diff --git a/src/kristall.pro b/src/kristall.pro
index 9610998..1ff82cf 100644
--- a/src/kristall.pro
+++ b/src/kristall.pro
@@ -32,6 +32,7 @@ SOURCES += \
main.cpp \
mainwindow.cpp \
mediaplayer.cpp \
+ plaintextrenderer.cpp \
protocolsetup.cpp \
settingsdialog.cpp \
tabbrowsinghistory.cpp \
@@ -51,6 +52,7 @@ HEADERS += \
kristall.hpp \
mainwindow.hpp \
mediaplayer.hpp \
+ plaintextrenderer.hpp \
protocolsetup.hpp \
settingsdialog.hpp \
tabbrowsinghistory.hpp \
diff --git a/src/plaintextrenderer.cpp b/src/plaintextrenderer.cpp
new file mode 100644
index 0000000..37801a4
--- /dev/null
+++ b/src/plaintextrenderer.cpp
@@ -0,0 +1,19 @@
+#include "plaintextrenderer.hpp"
+
+#include <QTextImageFormat>
+#include <QTextCursor>
+
+std::unique_ptr<QTextDocument> PlainTextRenderer::render(const QByteArray &input, const DocumentStyle &style)
+{
+ QTextCharFormat standard;
+ standard.setFont(style.preformatted_font);
+ standard.setForeground(style.preformatted_color);
+
+ std::unique_ptr<QTextDocument> result = std::make_unique<QTextDocument>();
+ result->setDocumentMargin(style.margin);
+
+ QTextCursor cursor { result.get() };
+ cursor.insertText(QString::fromUtf8(input), standard);
+
+ return result;
+}
diff --git a/src/plaintextrenderer.hpp b/src/plaintextrenderer.hpp
new file mode 100644
index 0000000..cfa2ccb
--- /dev/null
+++ b/src/plaintextrenderer.hpp
@@ -0,0 +1,25 @@
+#ifndef PLAINTEXTRENDERER_HPP
+#define PLAINTEXTRENDERER_HPP
+
+#include "documentstyle.hpp"
+
+#include <memory>
+#include <QTextDocument>
+
+struct PlainTextRenderer
+{
+ PlainTextRenderer() = delete;
+
+
+ //! Renders the given byte sequence into a GeminiDocument.
+ //! @param input The utf8 encoded input string
+ //! @param root_url The url that is used to resolve relative links
+ //! @param style The style which is used to render the document
+ //! @param outline The extracted outline from the document
+ static std::unique_ptr<QTextDocument> render(
+ QByteArray const & input,
+ DocumentStyle const & style
+ );
+};
+
+#endif // PLAINTEXTRENDERER_HPP