mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
allow user to zoom in/out Web page
1. Mouse wheel with Ctrl pressing will zoom in/out the Markdown Web page; 2. Ctrl+-, Ctrl++ will zoom in/out the Markdown Web page; 3. Ctrl+0 recover the Web page zoom factor to 1.
This commit is contained in:
parent
1f845d5ba8
commit
ce1cefa793
@ -2,10 +2,9 @@
|
|||||||
#include <QtWidgets>
|
#include <QtWidgets>
|
||||||
#include "vconfigmanager.h"
|
#include "vconfigmanager.h"
|
||||||
#include "utils/vutils.h"
|
#include "utils/vutils.h"
|
||||||
|
#include "vconstants.h"
|
||||||
|
|
||||||
extern VConfigManager vconfig;
|
extern VConfigManager vconfig;
|
||||||
static const qreal c_webZoomFactorMax = 5;
|
|
||||||
static const qreal c_webZoomFactorMin = 0.25;
|
|
||||||
|
|
||||||
VSettingsDialog::VSettingsDialog(QWidget *p_parent)
|
VSettingsDialog::VSettingsDialog(QWidget *p_parent)
|
||||||
: QDialog(p_parent)
|
: QDialog(p_parent)
|
||||||
|
@ -35,6 +35,14 @@ var scrollToAnchor = function(anchor) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
window.onwheel = function(e) {
|
||||||
|
e = e || window.event;
|
||||||
|
var ctrl = !!e.ctrlKey;
|
||||||
|
if (ctrl) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
window.onscroll = function() {
|
window.onscroll = function() {
|
||||||
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
|
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
|
||||||
var eles = document.querySelectorAll("h1, h2, h3, h4, h5, h6");
|
var eles = document.querySelectorAll("h1, h2, h3, h4, h5, h6");
|
||||||
@ -129,7 +137,7 @@ document.onkeydown = function(e) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
content.keyPressEvent(key);
|
content.keyPressEvent(key, ctrl, shift);
|
||||||
keyState = 0;
|
keyState = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -5,4 +5,7 @@ enum class DocType { Html, Markdown };
|
|||||||
enum class ClipboardOpType { Invalid, CopyFile, CopyDir };
|
enum class ClipboardOpType { Invalid, CopyFile, CopyDir };
|
||||||
enum class OpenFileMode {Read = 0, Edit};
|
enum class OpenFileMode {Read = 0, Edit};
|
||||||
|
|
||||||
|
static const qreal c_webZoomFactorMax = 5;
|
||||||
|
static const qreal c_webZoomFactorMin = 0.25;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,7 +55,7 @@ void VDocument::setLog(const QString &p_log)
|
|||||||
emit logChanged(p_log);
|
emit logChanged(p_log);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VDocument::keyPressEvent(int p_key)
|
void VDocument::keyPressEvent(int p_key, bool p_ctrl, bool p_shift)
|
||||||
{
|
{
|
||||||
emit keyPressed(p_key);
|
emit keyPressed(p_key, p_ctrl, p_shift);
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ public slots:
|
|||||||
void setToc(const QString &toc);
|
void setToc(const QString &toc);
|
||||||
void setHeader(const QString &anchor);
|
void setHeader(const QString &anchor);
|
||||||
void setLog(const QString &p_log);
|
void setLog(const QString &p_log);
|
||||||
void keyPressEvent(int p_key);
|
void keyPressEvent(int p_key, bool p_ctrl, bool p_shift);
|
||||||
void updateText();
|
void updateText();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -34,7 +34,7 @@ signals:
|
|||||||
void headerChanged(const QString &anchor);
|
void headerChanged(const QString &anchor);
|
||||||
void htmlChanged(const QString &html);
|
void htmlChanged(const QString &html);
|
||||||
void logChanged(const QString &p_log);
|
void logChanged(const QString &p_log);
|
||||||
void keyPressed(int p_key);
|
void keyPressed(int p_key, bool p_ctrl, bool p_shift);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_toc;
|
QString m_toc;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "vmdedit.h"
|
#include "vmdedit.h"
|
||||||
#include "dialog/vfindreplacedialog.h"
|
#include "dialog/vfindreplacedialog.h"
|
||||||
#include "veditarea.h"
|
#include "veditarea.h"
|
||||||
|
#include "vconstants.h"
|
||||||
|
|
||||||
extern VConfigManager vconfig;
|
extern VConfigManager vconfig;
|
||||||
|
|
||||||
@ -592,16 +593,67 @@ bool VEditTab::checkToc()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VEditTab::handleWebKeyPressed(int p_key)
|
void VEditTab::handleWebKeyPressed(int p_key, bool p_ctrl, bool /* p_shift */)
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(webPreviewer);
|
||||||
switch (p_key) {
|
switch (p_key) {
|
||||||
// Esc
|
// Esc
|
||||||
case 27:
|
case 27:
|
||||||
m_editArea->getFindReplaceDialog()->closeDialog();
|
m_editArea->getFindReplaceDialog()->closeDialog();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Dash
|
||||||
|
case 189:
|
||||||
|
if (p_ctrl) {
|
||||||
|
// Zoom out.
|
||||||
|
zoomWebPage(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Equal
|
||||||
|
case 187:
|
||||||
|
if (p_ctrl) {
|
||||||
|
// Zoom in.
|
||||||
|
zoomWebPage(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 0
|
||||||
|
case 48:
|
||||||
|
if (p_ctrl) {
|
||||||
|
// Recover zoom.
|
||||||
|
webPreviewer->setZoomFactor(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VEditTab::wheelEvent(QWheelEvent *p_event)
|
||||||
|
{
|
||||||
|
if (!isEditMode && webPreviewer) {
|
||||||
|
QPoint angle = p_event->angleDelta();
|
||||||
|
Qt::KeyboardModifiers modifiers = p_event->modifiers();
|
||||||
|
if (!angle.isNull() && (angle.y() != 0) && (modifiers & Qt::ControlModifier)) {
|
||||||
|
zoomWebPage(angle.y() > 0);
|
||||||
|
p_event->accept();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p_event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VEditTab::zoomWebPage(bool p_zoomIn, qreal p_step)
|
||||||
|
{
|
||||||
|
Q_ASSERT(webPreviewer);
|
||||||
|
qreal curFactor = webPreviewer->zoomFactor();
|
||||||
|
qreal newFactor = p_zoomIn ? curFactor + p_step : curFactor - p_step;
|
||||||
|
if (newFactor < c_webZoomFactorMin) {
|
||||||
|
newFactor = c_webZoomFactorMin;
|
||||||
|
} else if (newFactor > c_webZoomFactorMax) {
|
||||||
|
newFactor = c_webZoomFactorMax;
|
||||||
|
}
|
||||||
|
webPreviewer->setZoomFactor(newFactor);
|
||||||
|
}
|
||||||
|
@ -51,6 +51,9 @@ public:
|
|||||||
QString getSelectedText() const;
|
QString getSelectedText() const;
|
||||||
void clearSearchedWordHighlight();
|
void clearSearchedWordHighlight();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void wheelEvent(QWheelEvent *p_event) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void getFocused();
|
void getFocused();
|
||||||
void outlineChanged(const VToc &toc);
|
void outlineChanged(const VToc &toc);
|
||||||
@ -65,7 +68,7 @@ private slots:
|
|||||||
void updateTocFromHeaders(const QVector<VHeader> &headers);
|
void updateTocFromHeaders(const QVector<VHeader> &headers);
|
||||||
void handleTextChanged();
|
void handleTextChanged();
|
||||||
void noticeStatusChanged();
|
void noticeStatusChanged();
|
||||||
void handleWebKeyPressed(int p_key);
|
void handleWebKeyPressed(int p_key, bool p_ctrl, bool p_shift);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupUI();
|
void setupUI();
|
||||||
@ -83,6 +86,7 @@ private:
|
|||||||
// Check if @tableOfContent is outdated (such as renaming the file).
|
// Check if @tableOfContent is outdated (such as renaming the file).
|
||||||
// Return true if we need to update toc.
|
// Return true if we need to update toc.
|
||||||
bool checkToc();
|
bool checkToc();
|
||||||
|
void zoomWebPage(bool p_zoomIn, qreal p_step = 0.25);
|
||||||
|
|
||||||
QPointer<VFile> m_file;
|
QPointer<VFile> m_file;
|
||||||
bool isEditMode;
|
bool isEditMode;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user