aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Skec <skec@protonmail.ch>2021-02-13 14:27:46 +1100
committerFelix Queißner <felix@ib-queissner.de>2021-02-13 12:32:26 +0100
commitaeaa90c126b7f56cbbcf6b4ffe2f53db58292a33 (patch)
tree32d33238c04fadeaed04bf4608cf42abb4b23eab /src
parent19ac43503568ebc7fe4721f84292a11bbf7c2c2c (diff)
downloadkristall-aeaa90c126b7f56cbbcf6b4ffe2f53db58292a33.tar.gz
Margins are now split into seperate horizontal/vertical options
Diffstat (limited to 'src')
-rw-r--r--src/browsertab.cpp5
-rw-r--r--src/dialogs/settingsdialog.cpp13
-rw-r--r--src/dialogs/settingsdialog.hpp3
-rw-r--r--src/dialogs/settingsdialog.ui54
-rw-r--r--src/documentstyle.cpp11
-rw-r--r--src/documentstyle.hpp2
-rw-r--r--src/renderers/geminirenderer.cpp3
-rw-r--r--src/renderers/gophermaprenderer.cpp2
-rw-r--r--src/renderers/markdownrenderer.cpp4
-rw-r--r--src/renderers/plaintextrenderer.cpp2
-rw-r--r--src/renderers/renderhelpers.cpp16
-rw-r--r--src/renderers/renderhelpers.hpp6
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