diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-09 19:32:59 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-09 19:32:59 +0200 |
| commit | 0739bce0be84e8ccebdc632726efd0fd6f612789 (patch) | |
| tree | 7c6d705c87900a72d13d3924f6b1a59b5f2ea58d /src | |
| parent | 18fde8808d0f9febb668ff96714aefba82c0dce2 (diff) | |
| download | kristall-0739bce0be84e8ccebdc632726efd0fd6f612789.tar.gz | |
Introduces plain text renderer for improved styling.
Diffstat (limited to 'src')
| -rw-r--r-- | src/browsertab.cpp | 18 | ||||
| -rw-r--r-- | src/kristall.pro | 2 | ||||
| -rw-r--r-- | src/plaintextrenderer.cpp | 19 | ||||
| -rw-r--r-- | src/plaintextrenderer.hpp | 25 |
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 |
