diff options
| author | Mike Skec <skec@protonmail.ch> | 2021-02-13 14:27:46 +1100 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-02-13 12:32:26 +0100 |
| commit | aeaa90c126b7f56cbbcf6b4ffe2f53db58292a33 (patch) | |
| tree | 32d33238c04fadeaed04bf4608cf42abb4b23eab /src | |
| parent | 19ac43503568ebc7fe4721f84292a11bbf7c2c2c (diff) | |
| download | kristall-aeaa90c126b7f56cbbcf6b4ffe2f53db58292a33.tar.gz | |
Margins are now split into seperate horizontal/vertical options
Diffstat (limited to 'src')
| -rw-r--r-- | src/browsertab.cpp | 5 | ||||
| -rw-r--r-- | src/dialogs/settingsdialog.cpp | 13 | ||||
| -rw-r--r-- | src/dialogs/settingsdialog.hpp | 3 | ||||
| -rw-r--r-- | src/dialogs/settingsdialog.ui | 54 | ||||
| -rw-r--r-- | src/documentstyle.cpp | 11 | ||||
| -rw-r--r-- | src/documentstyle.hpp | 2 | ||||
| -rw-r--r-- | src/renderers/geminirenderer.cpp | 3 | ||||
| -rw-r--r-- | src/renderers/gophermaprenderer.cpp | 2 | ||||
| -rw-r--r-- | src/renderers/markdownrenderer.cpp | 4 | ||||
| -rw-r--r-- | src/renderers/plaintextrenderer.cpp | 2 | ||||
| -rw-r--r-- | src/renderers/renderhelpers.cpp | 16 | ||||
| -rw-r--r-- | src/renderers/renderhelpers.hpp | 6 |
12 files changed, 89 insertions, 32 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp index dfcf517..f6684b5 100644 --- a/src/browsertab.cpp +++ b/src/browsertab.cpp @@ -6,6 +6,7 @@ #include "renderers/geminirenderer.hpp" #include "renderers/plaintextrenderer.hpp" #include "renderers/markdownrenderer.hpp" +#include "renderers/renderhelpers.hpp" #include "mimeparser.hpp" @@ -575,7 +576,7 @@ void BrowserTab::renderPage(const QByteArray &data, const MimeType &mime) document->setDefaultFont(doc_style.standard_font); document->setDefaultStyleSheet(doc_style.toStyleSheet()); - document->setDocumentMargin(doc_style.margin); + renderhelpers::setPageMargins(document.get(), doc_style.margin_h, doc_style.margin_v); // Strip inline styles from page, so they don't // conflict with user styles. @@ -1322,7 +1323,7 @@ void BrowserTab::updatePageMargins() QTextFrame *root = this->current_document->rootFrame(); QTextFrameFormat fmt = root->frameFormat(); int margin = std::max((this->width() - this->current_style.text_width) / 2, - this->current_style.margin); + this->current_style.margin_h); fmt.setLeftMargin(margin); fmt.setRightMargin(margin); root->setFrameFormat(fmt); diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index 1bbdcf3..252c7a6 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -110,7 +110,8 @@ void SettingsDialog::setGeminiStyle(DocumentStyle const &style) this->ui->link_local_prefix->setText(this->current_style.internal_link_prefix); this->ui->link_foreign_prefix->setText(this->current_style.external_link_prefix); - this->ui->page_margin->setValue(this->current_style.margin); + this->ui->page_margin_h->setValue(this->current_style.margin_h); + this->ui->page_margin_v->setValue(this->current_style.margin_v); this->ui->enable_justify_text->setChecked(this->current_style.justify_text); @@ -437,9 +438,15 @@ void SettingsDialog::on_preview_url_textChanged(const QString &) this->reloadStylePreview(); } -void SettingsDialog::on_page_margin_valueChanged(double value) +void SettingsDialog::on_page_margin_h_valueChanged(double value) { - this->current_style.margin = value; + this->current_style.margin_h = value; + this->reloadStylePreview(); +} + +void SettingsDialog::on_page_margin_v_valueChanged(double value) +{ + this->current_style.margin_v = value; this->reloadStylePreview(); } diff --git a/src/dialogs/settingsdialog.hpp b/src/dialogs/settingsdialog.hpp index 4032129..d515242 100644 --- a/src/dialogs/settingsdialog.hpp +++ b/src/dialogs/settingsdialog.hpp @@ -76,7 +76,8 @@ private slots: void on_preview_url_textChanged(const QString &arg1); - void on_page_margin_valueChanged(double arg1); + void on_page_margin_h_valueChanged(double arg1); + void on_page_margin_v_valueChanged(double arg1); void on_enable_justify_text_clicked(bool arg1); diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui index b1c0684..a88285e 100644 --- a/src/dialogs/settingsdialog.ui +++ b/src/dialogs/settingsdialog.ui @@ -891,15 +891,16 @@ <item row="12" column="1"> <widget class="QComboBox" name="auto_theme"/> </item> + <item row="13" column="0"> <widget class="QLabel" name="label_13"> <property name="text"> - <string>Page Margin</string> + <string>Left/right Page Margin</string> </property> </widget> </item> <item row="13" column="1"> - <widget class="QDoubleSpinBox" name="page_margin"> + <widget class="QDoubleSpinBox" name="page_margin_h"> <property name="suffix"> <string> px</string> </property> @@ -907,18 +908,40 @@ <number>0</number> </property> <property name="maximum"> - <double>350.000000000000000</double> + <double>350</double> </property> </widget> </item> + <item row="14" column="0"> + <widget class="QLabel" name="label_32"> + <property name="text"> + <string>Top/bottom Page Margin</string> + </property> + </widget> + </item> + <item row="14" column="1"> + <widget class="QDoubleSpinBox" name="page_margin_v"> + <property name="suffix"> + <string> px</string> + </property> + <property name="decimals"> + <number>0</number> + </property> + <property name="maximum"> + <double>350</double> + </property> + </widget> + </item> + + <item row="15" column="0"> <widget class="QLabel" name="label_25"> <property name="text"> <string>Other options</string> </property> </widget> </item> - <item row="14" column="1"> + <item row="15" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_98"> <item> <widget class="QCheckBox" name="enable_justify_text"> @@ -943,7 +966,7 @@ </layout> </item> - <item row="15" column="0"> + <item row="16" column="0"> <widget class="QLabel" name="label_38"> <property name="text"> <string>Text width limit</string> @@ -953,7 +976,7 @@ </property> </widget> </item> - <item row="15" column="1"> + <item row="16" column="1"> <widget class="QSpinBox" name="text_width"> <property name="minimum"> <number>300</number> @@ -970,14 +993,14 @@ </widget> </item> - <item row="16" column="0"> + <item row="17" column="0"> <widget class="QLabel" name="label_35"> <property name="text"> <string>Line height (paragraph)</string> </property> </widget> </item> - <item row="16" column="1"> + <item row="17" column="1"> <widget class="QDoubleSpinBox" name="line_height_p"> <property name="suffix"> <string> px</string> @@ -991,14 +1014,14 @@ </widget> </item> - <item row="17" column="0"> + <item row="18" column="0"> <widget class="QLabel" name="label_36"> <property name="text"> <string>Line height (header)</string> </property> </widget> </item> - <item row="17" column="1"> + <item row="18" column="1"> <widget class="QDoubleSpinBox" name="line_height_h"> <property name="suffix"> <string> px</string> @@ -1012,14 +1035,14 @@ </widget> </item> - <item row="18" column="0"> + <item row="19" column="0"> <widget class="QLabel" name="label_37"> <property name="text"> <string>Indentation</string> </property> </widget> </item> - <item row="18" column="1"> + <item row="19" column="1"> <layout class="QHBoxLayout" name="indent_container"> <item> @@ -1109,14 +1132,14 @@ </layout> </item> - <item row="19" column="0"> + <item row="20" column="0"> <widget class="QLabel" name="label_17"> <property name="text"> <string>Presets</string> </property> </widget> </item> - <item row="19" column="1"> + <item row="20" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QComboBox" name="presets"/> @@ -1342,7 +1365,8 @@ <tabstop>link_foreign_prefix</tabstop> <tabstop>quote_change_color</tabstop> <tabstop>auto_theme</tabstop> - <tabstop>page_margin</tabstop> + <tabstop>page_margin_h</tabstop> + <tabstop>page_margin_v</tabstop> <tabstop>enable_justify_text</tabstop> <tabstop>enable_text_width</tabstop> <tabstop>text_width</tabstop> diff --git a/src/documentstyle.cpp b/src/documentstyle.cpp index 3bfd857..0a9f48d 100644 --- a/src/documentstyle.cpp +++ b/src/documentstyle.cpp @@ -134,7 +134,8 @@ DocumentStyle::DocumentStyle(bool do_init) : theme(Fixed), cross_scheme_link_color(0x09, 0x60, 0xa7), internal_link_prefix("→ "), external_link_prefix("⇒ "), - margin(55.0), + margin_h(30.0), + margin_v(55.0), text_width(900), ansi_colors({"black", "darkred", "darkgreen", "darkgoldenrod", "darkblue", "darkmagenta", "darkcyan", "lightgray", @@ -225,7 +226,8 @@ bool DocumentStyle::save(QSettings &settings) const settings.setValue("background_color", background_color.name()); settings.setValue("blockquote_color", blockquote_color.name()); - settings.setValue("margins", margin); + settings.setValue("margins_h", margin_h); + settings.setValue("margins_v", margin_v); settings.setValue("ansi_colors", ansi_colors); @@ -317,7 +319,7 @@ bool DocumentStyle::load(QSettings &settings) internal_link_prefix = settings.value("internal_link_prefix").toString(); external_link_prefix = settings.value("external_link_prefix").toString(); - margin = settings.value("margins").toDouble(); + margin_h = margin_v = settings.value("margins").toDouble(); theme = Theme(settings.value("theme").toInt()); } break; @@ -328,7 +330,8 @@ bool DocumentStyle::load(QSettings &settings) background_color = QColor { settings.value("background_color", background_color.name()).toString() }; blockquote_color = QColor { settings.value("blockquote_color", blockquote_color.name()).toString() }; - margin = settings.value("margins", 55).toInt(); + margin_h = settings.value("margins_h", 30).toInt(); + margin_v = settings.value("margins_v", 55).toInt(); QStringList default_colors = {"black", "darkred", "darkgreen", "darkgoldenrod", "darkblue", "darkmagenta", "darkcyan", "lightgray", diff --git a/src/documentstyle.hpp b/src/documentstyle.hpp index a8d12fe..961a0ed 100644 --- a/src/documentstyle.hpp +++ b/src/documentstyle.hpp @@ -49,7 +49,7 @@ struct DocumentStyle QString internal_link_prefix; QString external_link_prefix; - double margin; + double margin_h, margin_v; double text_width; diff --git a/src/renderers/geminirenderer.cpp b/src/renderers/geminirenderer.cpp index 721a969..5f82bb8 100644 --- a/src/renderers/geminirenderer.cpp +++ b/src/renderers/geminirenderer.cpp @@ -1,4 +1,5 @@ #include "geminirenderer.hpp" +#include "renderhelpers.hpp" #include <QTextList> #include <QTextBlock> @@ -37,7 +38,7 @@ std::unique_ptr<GeminiDocument> GeminiRenderer::render( TextStyleInstance text_style { themed_style }; std::unique_ptr<GeminiDocument> result = std::make_unique<GeminiDocument>(); - result->setDocumentMargin(themed_style.margin); + renderhelpers::setPageMargins(result.get(), themed_style.margin_h, themed_style.margin_v); result->setIndentWidth(20); bool emit_fancy_text = kristall::options.enable_text_decoration; diff --git a/src/renderers/gophermaprenderer.cpp b/src/renderers/gophermaprenderer.cpp index cffb2e1..6e6deb1 100644 --- a/src/renderers/gophermaprenderer.cpp +++ b/src/renderers/gophermaprenderer.cpp @@ -30,7 +30,7 @@ std::unique_ptr<QTextDocument> GophermapRenderer::render(const QByteArray &input bool emit_text_only = (kristall::options.gophermap_display == GenericSettings::PlainText); std::unique_ptr<QTextDocument> result = std::make_unique<QTextDocument>(); - result->setDocumentMargin(themed_style.margin); + renderhelpers::setPageMargins(result.get(), themed_style.margin_h, themed_style.margin_v); if(not emit_text_only) { diff --git a/src/renderers/markdownrenderer.cpp b/src/renderers/markdownrenderer.cpp index 308f8a2..2b8657d 100644 --- a/src/renderers/markdownrenderer.cpp +++ b/src/renderers/markdownrenderer.cpp @@ -2,6 +2,8 @@ #include "textstyleinstance.hpp" +#include "renderhelpers.hpp" + #include <cmark.h> #include <cassert> @@ -316,7 +318,7 @@ std::unique_ptr<QTextDocument> MarkdownRenderer::render( return nullptr; auto doc = std::make_unique<QTextDocument>(); - doc->setDocumentMargin(style.margin); + renderhelpers::setPageMargins(doc.get(), style.margin_h, style.margin_v); doc->setIndentWidth(20); outline.beginBuild(); diff --git a/src/renderers/plaintextrenderer.cpp b/src/renderers/plaintextrenderer.cpp index 73a7abf..b183818 100644 --- a/src/renderers/plaintextrenderer.cpp +++ b/src/renderers/plaintextrenderer.cpp @@ -14,7 +14,7 @@ std::unique_ptr<QTextDocument> PlainTextRenderer::render(const QByteArray &input standard.setForeground(style.preformatted_color); std::unique_ptr<QTextDocument> result = std::make_unique<QTextDocument>(); - result->setDocumentMargin(style.margin); + renderhelpers::setPageMargins(result.get(), style.margin_h, style.margin_v); QTextCursor cursor { result.get() }; RenderEscapeCodes(input, standard, cursor); diff --git a/src/renderers/renderhelpers.cpp b/src/renderers/renderhelpers.cpp index 298dc9d..6c5f2ef 100644 --- a/src/renderers/renderhelpers.cpp +++ b/src/renderers/renderhelpers.cpp @@ -2,7 +2,7 @@ * @TODO I'm hardcoding this to ANSI for now, as it's the most common. * Ideally we should have configurable control characters for various * types of terminals that could be emulated via a standard termcap file. - * @NOTE ANSI escape sequence reference: + * @NOTE ANSI escape sequence reference: * https://en.wikipedia.org/wiki/ANSI_escape_code#Escape_sequences * Note that escape sequences for other terminal types are a thing, and * currently aren't implemented yet as mentioned in the TODO above, eg: @@ -14,6 +14,8 @@ #include <QByteArray> #include <QString> #include <QTextCursor> +#include <QTextFrame> +#include <QTextFrameFormat> #include <string> #include <iostream> @@ -79,7 +81,7 @@ void parseSGR( if (args.empty()) return; for (auto it = args.cbegin(); it != args.cend(); ++it) { - /// @TODO A whole bunch of unimplemented SGR codes are unimplemented + /// @TODO A whole bunch of unimplemented SGR codes are unimplemented /// yet (eg: blink or font switching) enum { Reset = 0, Bold, Light, Italic, Underline, @@ -347,3 +349,13 @@ void RenderEscapeCodes(const QByteArray &input, const QTextCharFormat& format, Q } } +void renderhelpers::setPageMargins(QTextDocument *doc, int mh, int mv) +{ + QTextFrame *root = doc->rootFrame(); + QTextFrameFormat fmt = root->frameFormat(); + fmt.setLeftMargin(mh); + fmt.setRightMargin(mh); + fmt.setTopMargin(mv); + fmt.setBottomMargin(mv); + root->setFrameFormat(fmt); +} diff --git a/src/renderers/renderhelpers.hpp b/src/renderers/renderhelpers.hpp index c2c81d8..c5273c2 100644 --- a/src/renderers/renderhelpers.hpp +++ b/src/renderers/renderhelpers.hpp @@ -3,7 +3,13 @@ #include <QByteArray> #include <QTextCursor> +#include <QTextDocument> void RenderEscapeCodes(const QByteArray &input, const QTextCharFormat& format, QTextCursor& cursor); +namespace renderhelpers +{ + void setPageMargins(QTextDocument *doc, int mh, int mv); +} + #endif |
