From 0739bce0be84e8ccebdc632726efd0fd6f612789 Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Tue, 9 Jun 2020 19:32:59 +0200 Subject: Introduces plain text renderer for improved styling. --- src/browsertab.cpp | 18 ++++++------------ src/kristall.pro | 2 ++ src/plaintextrenderer.cpp | 19 +++++++++++++++++++ src/plaintextrenderer.hpp | 25 +++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 src/plaintextrenderer.cpp create mode 100644 src/plaintextrenderer.hpp (limited to 'src') 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(); - - 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(); @@ -332,11 +330,7 @@ void BrowserTab::on_requestComplete(const QByteArray &data, const QString &mime) } #endif else if(mime.startsWith("text/")) { - document = std::make_unique(); - 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 +#include + +std::unique_ptr PlainTextRenderer::render(const QByteArray &input, const DocumentStyle &style) +{ + QTextCharFormat standard; + standard.setFont(style.preformatted_font); + standard.setForeground(style.preformatted_color); + + std::unique_ptr result = std::make_unique(); + 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 +#include + +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 render( + QByteArray const & input, + DocumentStyle const & style + ); +}; + +#endif // PLAINTEXTRENDERER_HPP -- cgit v1.2.3