[LyX/master] Zoom slider
Juergen Spitzmueller
spitz at lyx.org
Sun Mar 7 12:24:29 UTC 2021
commit bdb006543b43f71a06fc5b9915d0df19aae0ef68
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sun Mar 7 13:29:23 2021 +0100
Zoom slider
---
src/LyXRC.h | 1 +
src/frontends/qt/GuiView.cpp | 34 ++++++++++++++++++++++++++++++++--
src/frontends/qt/GuiView.h | 6 ++++++
3 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/src/LyXRC.h b/src/LyXRC.h
index cf6a012..bf65728 100644
--- a/src/LyXRC.h
+++ b/src/LyXRC.h
@@ -318,6 +318,7 @@ public:
int defaultZoom = 150;
/// Actual zoom factor for screen fonts
/// (default zoom plus buffer zoom factor)
+ /// Do not set directly. Use GuiView::setCurrentZoom()
int currentZoom = 150;
/// Screen font sizes in points for each font size
std::string font_sizes[10] = { "5.0", "7.0", "8.0", "9.0", "10.0",
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index c226968..536a0ca 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -102,6 +102,7 @@
#include <QPoint>
#include <QSettings>
#include <QShowEvent>
+#include <QSlider>
#include <QSplitter>
#include <QStackedWidget>
#include <QStatusBar>
@@ -627,6 +628,18 @@ GuiView::GuiView(int id)
connect(busylabel, SIGNAL(clicked()), this, SLOT(checkCancelBackground()));
QFontMetrics const fm(statusBar()->fontMetrics());
+
+ QSlider * zoomslider = new QSlider(Qt::Horizontal, statusBar());
+ zoomslider->setFixedWidth(fm.horizontalAdvance('x') * 15);
+ // Make the defaultZoom center
+ zoomslider->setRange(10, (lyxrc.defaultZoom * 2) - 10);
+ zoomslider->setValue(lyxrc.currentZoom);
+ zoomslider->setToolTip(qt_("Workarea zoom level. Drag, use Ctrl-+/- or Shift-Mousewheel to adjust."));
+ statusBar()->addPermanentWidget(zoomslider);
+
+ connect(zoomslider, SIGNAL(sliderMoved(int)), this, SLOT(zoomSliderMoved(int)));
+ connect(this, SIGNAL(currentZoomChanged(int)), zoomslider, SLOT(setValue(int)));
+
int const iconheight = max(int(d.normalIconSize), fm.height());
QSize const iconsize(iconheight, iconheight);
@@ -727,6 +740,16 @@ void GuiView::checkCancelBackground()
}
+void GuiView::zoomSliderMoved(int value)
+{
+ DispatchResult dr;
+ dispatch(FuncRequest(LFUN_BUFFER_ZOOM, convert<string>(value)), dr);
+ currentWorkArea()->scheduleRedraw(true);
+ message(bformat(_("Zoom level is now %1$d% (default value: %2$d%)"),
+ value, lyxrc.defaultZoom));
+}
+
+
QVector<GuiWorkArea*> GuiView::GuiViewPrivate::guiWorkAreas()
{
QVector<GuiWorkArea*> areas;
@@ -845,6 +868,13 @@ void GuiView::saveUISettings() const
}
+void GuiView::setCurrentZoom(const int v)
+{
+ lyxrc.currentZoom = v;
+ Q_EMIT currentZoomChanged(v);
+}
+
+
bool GuiView::restoreLayout()
{
QSettings settings;
@@ -853,7 +883,7 @@ bool GuiView::restoreLayout()
int zoom = (int)(lyxrc.defaultZoom * zoom_ratio_);
if (zoom < static_cast<int>(zoom_min_))
zoom = zoom_min_;
- lyxrc.currentZoom = zoom;
+ setCurrentZoom(zoom);
devel_mode_ = settings.value("devel_mode", devel_mode_).toBool();
settings.beginGroup("views");
settings.beginGroup(QString::number(id_));
@@ -4565,7 +4595,7 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
if (zoom < static_cast<int>(zoom_min_))
zoom = zoom_min_;
- lyxrc.currentZoom = zoom;
+ setCurrentZoom(zoom);
dr.setMessage(bformat(_("Zoom level is now %1$d% (default value: %2$d%)"),
lyxrc.currentZoom, lyxrc.defaultZoom));
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index b570b19..4f92e31 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -220,6 +220,8 @@ Q_SIGNALS:
void triggerShowDialog(QString const & qname, QString const & qdata, Inset * inset);
// emitted when the work area or its buffer view changed
void bufferViewChanged();
+ /// emitted when zoom is modified
+ void currentZoomChanged(int);
public Q_SLOTS:
///
@@ -241,6 +243,8 @@ private Q_SLOTS:
///
void checkCancelBackground();
///
+ void zoomSliderMoved(int);
+ ///
void on_currentWorkAreaChanged(GuiWorkArea *);
///
void onBufferViewChanged();
@@ -354,6 +358,8 @@ public:
void disconnectDialog(std::string const & name);
///
bool develMode() const { return devel_mode_; }
+ ///
+ void setCurrentZoom(int const v);
private:
/// Saves the layout and geometry of the window
More information about the lyx-cvs
mailing list