diff --git a/src/dialog/vcopytextashtmldialog.cpp b/src/dialog/vcopytextashtmldialog.cpp
index 4e677f12..5ee8070f 100644
--- a/src/dialog/vcopytextashtmldialog.cpp
+++ b/src/dialog/vcopytextashtmldialog.cpp
@@ -1,6 +1,7 @@
#include "vcopytextashtmldialog.h"
#include
+#include
#include
#include
#include
@@ -30,8 +31,8 @@ void VCopyTextAsHtmlDialog::setupUI()
m_textEdit->setProperty("LineEdit", true);
m_htmlLabel = new QLabel(tr("HTML:"));
- m_htmlViewer = VUtils::getTextBrowser(g_config->getBaseBackground());
- // m_htmlViewer->setContextMenuPolicy(Qt::NoContextMenu);
+ m_htmlViewer = VUtils::getWebView(g_config->getBaseBackground());
+ m_htmlViewer->setContextMenuPolicy(Qt::NoContextMenu);
m_htmlViewer->setMinimumSize(600, 400);
m_infoLabel = new QLabel(tr("Converting text to HTML ..."));
@@ -65,8 +66,7 @@ void VCopyTextAsHtmlDialog::setConvertedHtml(const QUrl &p_baseUrl,
const QString &p_html)
{
QString html = p_html;
- m_htmlViewer->setHtml("" + html + "");
- m_htmlViewer->setSource(p_baseUrl);
+ m_htmlViewer->setHtml("" + html + "", p_baseUrl);
setHtmlVisible(true);
g_webUtils->alterHtmlAsTarget(p_baseUrl, html, m_copyTarget);
diff --git a/src/dialog/vcopytextashtmldialog.h b/src/dialog/vcopytextashtmldialog.h
index 3f33fb6d..bc84d33b 100644
--- a/src/dialog/vcopytextashtmldialog.h
+++ b/src/dialog/vcopytextashtmldialog.h
@@ -6,7 +6,7 @@
class QPlainTextEdit;
-class QTextBrowser;
+class QWebView;
class QDialogButtonBox;
class VWaitingWidget;
class QLabel;
@@ -32,7 +32,7 @@ private:
QLabel *m_htmlLabel;
- QTextBrowser *m_htmlViewer;
+ QWebView *m_htmlViewer;
QLabel *m_infoLabel;
diff --git a/src/dialog/vtipsdialog.cpp b/src/dialog/vtipsdialog.cpp
index ae2f0f40..e9d5a264 100644
--- a/src/dialog/vtipsdialog.cpp
+++ b/src/dialog/vtipsdialog.cpp
@@ -1,6 +1,7 @@
#include "vtipsdialog.h"
#include
+#include
#include "vconfigmanager.h"
#include "vmarkdownconverter.h"
@@ -22,8 +23,8 @@ VTipsDialog::VTipsDialog(const QString &p_tipFile,
void VTipsDialog::setupUI(const QString &p_actionText)
{
- m_viewer = VUtils::getTextBrowser(g_config->getBaseBackground());
- // m_viewer->setContextMenuPolicy(Qt::NoContextMenu);
+ m_viewer = VUtils::getWebView(g_config->getBaseBackground());
+ m_viewer->setContextMenuPolicy(Qt::NoContextMenu);
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok);
connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
@@ -58,10 +59,9 @@ void VTipsDialog::readFile(const QString &p_tipFile)
QString html = mdConverter.generateHtml(content,
g_config->getMarkdownExtensions(),
toc);
- // html = VUtils::generateSimpleHtmlTemplate(html);
+ html = VUtils::generateSimpleHtmlTemplate(html);
// Add a base URL to enable it to access local style files.
- m_viewer->setHtml(html);
- // m_viewer->setSource(QUrl("qrc:/resources"));
+ m_viewer->setHtml(html, QUrl("qrc:/resources"));
}
void VTipsDialog::showEvent(QShowEvent *p_event)
diff --git a/src/dialog/vtipsdialog.h b/src/dialog/vtipsdialog.h
index 719b0314..30383d52 100644
--- a/src/dialog/vtipsdialog.h
+++ b/src/dialog/vtipsdialog.h
@@ -8,7 +8,7 @@
class QDialogButtonBox;
class QPushButton;
class QShowEvent;
-class QTextBrowser;
+class QWebView;
typedef std::function TipsDialogFunc;
@@ -29,7 +29,7 @@ private:
void readFile(const QString &p_tipFile);
- QTextBrowser *m_viewer;
+ QWebView *m_viewer;
QDialogButtonBox *m_btnBox;
diff --git a/src/src.pro b/src/src.pro
index 99b7a28d..29429907 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -4,7 +4,7 @@
#
#-------------------------------------------------
-QT += core gui network svg printsupport
+QT += core gui network svg printsupport webkitwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@@ -155,7 +155,8 @@ SOURCES += main.cpp\
widgets/vcombobox.cpp \
vtablehelper.cpp \
vtable.cpp \
- dialog/vinserttabledialog.cpp
+ dialog/vinserttabledialog.cpp \
+ vpreviewpage.cpp
HEADERS += vmainwindow.h \
vdirectorytree.h \
@@ -295,7 +296,8 @@ HEADERS += vmainwindow.h \
widgets/vcombobox.h \
vtablehelper.h \
vtable.h \
- dialog/vinserttabledialog.h
+ dialog/vinserttabledialog.h \
+ vpreviewpage.h
RESOURCES += \
vnote.qrc \
diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp
index a658128c..3dae8d2e 100644
--- a/src/utils/vutils.cpp
+++ b/src/utils/vutils.cpp
@@ -31,12 +31,13 @@
#include
#include
#include
-#include
+#include
#include "vorphanfile.h"
#include "vnote.h"
#include "vnotebook.h"
#include "pegparser.h"
+#include "vpreviewpage.h"
#include "widgets/vcombobox.h"
extern VConfigManager *g_config;
@@ -1462,10 +1463,18 @@ void VUtils::setDynamicProperty(QWidget *p_widget, const char *p_prop, bool p_va
p_widget->style()->polish(p_widget);
}
-QTextBrowser *VUtils::getTextBrowser(const QColor &p_background, QWidget *p_parent)
+QWebView *VUtils::getWebView(const QColor &p_background, QWidget *p_parent)
{
- QTextBrowser *browser = new QTextBrowser(p_parent);
- return browser;
+ auto viewer = new QWebView(p_parent);
+ VPreviewPage *page = new VPreviewPage(viewer);
+ // Setting the background to Qt::transparent will force GrayScale antialiasing.
+ if (p_background.isValid() && p_background != Qt::transparent) {
+ page->setBackgroundColor(p_background);
+ }
+
+ viewer->setPage(page);
+ viewer->setZoomFactor(g_config->getWebZoomFactor());
+ return viewer;
}
QString VUtils::getFileNameWithLocale(const QString &p_name, const QString &p_locale)
diff --git a/src/utils/vutils.h b/src/utils/vutils.h
index 214d65d1..24c155f7 100644
--- a/src/utils/vutils.h
+++ b/src/utils/vutils.h
@@ -23,7 +23,7 @@ class QAction;
class QTreeWidgetItem;
class QFormLayout;
class QTemporaryFile;
-class QTextBrowser;
+class QWebView;
#if !defined(V_ASSERT)
#define V_ASSERT(cond) ((!(cond)) ? qt_assert(#cond, __FILE__, __LINE__) : qt_noop())
@@ -314,7 +314,7 @@ public:
// Create and return a QComboBox.
static QComboBox *getComboBox(QWidget *p_parent = nullptr);
- static QTextBrowser *getTextBrowser(const QColor &p_background, QWidget *p_parent = nullptr);
+ static QWebView *getWebView(const QColor &p_background, QWidget *p_parent = nullptr);
static void setDynamicProperty(QWidget *p_widget, const char *p_prop, bool p_val = true);
diff --git a/src/vpreviewpage.cpp b/src/vpreviewpage.cpp
new file mode 100644
index 00000000..ddde027d
--- /dev/null
+++ b/src/vpreviewpage.cpp
@@ -0,0 +1,47 @@
+#include "vpreviewpage.h"
+
+#include
+#include
+#include
+
+#include "vmainwindow.h"
+
+extern VMainWindow *g_mainWin;
+
+VPreviewPage::VPreviewPage(QWidget *parent)
+ : QWebPage(parent)
+{
+
+}
+
+bool VPreviewPage::acceptNavigationRequest(QWebFrame *p_frame,
+ const QNetworkRequest &p_request,
+ QWebPage::NavigationType p_type)
+{
+ Q_UNUSED(p_frame);
+ Q_UNUSED(p_type);
+
+ auto url = p_request.url();
+ if (url.isLocalFile()) {
+ QString filePath = url.toLocalFile();
+ if (g_mainWin->tryOpenInternalFile(filePath)) {
+ return false;
+ }
+ } else if (p_frame) {
+ return true;
+ } else if (url.scheme() == "data") {
+ // Qt 5.12 will trigger this when calling QWebEngineView.setHtml().
+ return true;
+ }
+
+ QDesktopServices::openUrl(url);
+ return false;
+}
+
+void VPreviewPage::setBackgroundColor(const QColor &p_background)
+{
+ auto pa = palette();
+ pa.setColor(QPalette::Window, p_background);
+ pa.setColor(QPalette::Base, p_background);
+ setPalette(pa);
+}
diff --git a/src/vpreviewpage.h b/src/vpreviewpage.h
new file mode 100644
index 00000000..9055caa5
--- /dev/null
+++ b/src/vpreviewpage.h
@@ -0,0 +1,21 @@
+#ifndef VPREVIEWPAGE_H
+#define VPREVIEWPAGE_H
+
+#include
+#include
+
+class VPreviewPage : public QWebPage
+{
+ Q_OBJECT
+public:
+ explicit VPreviewPage(QWidget *parent = 0);
+
+ void setBackgroundColor(const QColor &p_background);
+
+protected:
+ bool acceptNavigationRequest(QWebFrame *p_frame,
+ const QNetworkRequest &p_request,
+ QWebPage::NavigationType p_type) Q_DECL_OVERRIDE;
+};
+
+#endif // VPREVIEWPAGE_H
diff --git a/src/vwebview.cpp b/src/vwebview.cpp
index bd059fd4..ac12d30c 100644
--- a/src/vwebview.cpp
+++ b/src/vwebview.cpp
@@ -27,7 +27,7 @@ extern VWebUtils *g_webUtils;
static const QString c_ClipboardPropertyMark = "CopiedImageURLAltered";
VWebView::VWebView(VFile *p_file, QWidget *p_parent)
- : QTextBrowser(p_parent),
+ : QWebView(p_parent),
m_file(p_file),
m_copyImageUrlActionHooked(false),
m_afterCopyImage(false),
@@ -481,14 +481,3 @@ void VWebView::initPreviewTunnelMenu(QAction *p_before, QMenu *p_menu)
p_menu->insertMenu(p_before, subMenu);
}
-
-QString VWebView::selectedText() const
-{
- return QString();
-}
-
-void VWebView::setHtml(const QString &p_html, const QUrl &p_baseUrl)
-{
- QTextBrowser::setHtml(p_html);
- setSource(p_baseUrl);
-}
diff --git a/src/vwebview.h b/src/vwebview.h
index 06b2c5a4..190b90fb 100644
--- a/src/vwebview.h
+++ b/src/vwebview.h
@@ -1,14 +1,14 @@
#ifndef VWEBVIEW_H
#define VWEBVIEW_H
-#include
+#include
#include
#include
class VFile;
class QMenu;
-class VWebView : public QTextBrowser
+class VWebView : public QWebView
{
Q_OBJECT
public:
@@ -17,10 +17,6 @@ public:
void setInPreview(bool p_preview);
- QString selectedText() const;
-
- void setHtml(const QString &p_html, const QUrl &p_baseUrl = QUrl());
-
signals:
void editNote();