]> git.lyx.org Git - lyx.git/commitdiff
Make the session zoom relative to the default zoom
authorJuergen Spitzmueller <spitz@lyx.org>
Wed, 6 Sep 2017 16:11:31 +0000 (18:11 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Wed, 6 Sep 2017 16:11:31 +0000 (18:11 +0200)
Also rename lyxrc.zoom to lyxrc.defaultZoom

Fixes: #10455
src/LyXAction.cpp
src/LyXRC.cpp
src/LyXRC.h
src/frontends/qt4/GuiPrefs.cpp
src/frontends/qt4/GuiView.cpp
src/frontends/qt4/GuiView.h

index 6aaec9242881fe4bdd4beac0a3995c6d3a371bd1..74031c70fdbbb4bf323b754401807683c23b4624 100644 (file)
@@ -892,7 +892,8 @@ void LyXAction::init()
 * \var lyx::FuncCode lyx::LFUN_BUFFER_ZOOM
 * \li Action: Sets the zoom of the screen fonts.
 * \li Syntax: buffer-zoom [<ZOOM>]
-* \li Params: <ZOOM>: The zoom in % points (neg. or pos.), the default is to reset to zoom savd in preferences.
+* \li Params: <ZOOM>: The target zoom value in %;
+*                     the default is the default zoom as saved in preferences.
 * \li Origin: daniel, 28 Oct 2016
 * \endvar
 */
@@ -902,7 +903,8 @@ void LyXAction::init()
  * \var lyx::FuncCode lyx::LFUN_BUFFER_ZOOM_IN
  * \li Action: Increases the zoom of the screen fonts.
  * \li Syntax: buffer-zoom-in [<ZOOM>]
- * \li Params: <ZOOM>: The zoom in % points (neg. or pos.), the default is 20.
+ * \li Params: <ZOOM>: The zoom value addition in % (neg. or pos.);
+ *                     the default is 10% of the default zoom as saved in preferences.
  * \li Origin: vfr, 30 Mar 2009
  * \endvar
  */
@@ -913,7 +915,8 @@ void LyXAction::init()
  * \var lyx::FuncCode lyx::LFUN_BUFFER_ZOOM_OUT
  * \li Action: Decreases the zoom of the screen fonts.
  * \li Syntax: buffer-zoom-out [<ZOOM>]
- * \li Params: <ZOOM>: The zoom in % points (neg. or pos.), the default is -20.
+ * \li Params: <ZOOM>: The zoom value abstraction in % (neg. or pos.);
+ *                     the default is 10% of the default zoom as saved in preferences.
  * \li Origin: vfr, 30 Mar 2009
  * \endvar
  */
index 315495f85ca21eee851beb8c1746301bbcac280b..431f4a40d65d5870a3a2e236b6bd5159d160c99f 100644 (file)
@@ -245,8 +245,8 @@ void LyXRC::setDefaults()
        pygmentize_command = string();
        dpi = 75;
        // Because a screen is typically wider than a piece of paper:
-       zoom = 150;
-       currentZoom = zoom;
+       defaultZoom = 150;
+       currentZoom = defaultZoom;
        allow_geometry_session = true;
        // Default LaTeX font size:
        font_sizes[FONT_SIZE_TINY] = "5.0";
@@ -624,9 +624,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
 
                case RC_SCREEN_ZOOM:
-                       lexrc >> zoom;
-                       if (zoom < 10)
-                               zoom = 10;
+                       lexrc >> defaultZoom;
+                       if (defaultZoom < 10)
+                               defaultZoom = 10;
                        break;
 
                case RC_GEOMETRY_SESSION:
@@ -1724,8 +1724,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                // fall through
        case RC_SCREEN_ZOOM:
                if (ignore_system_lyxrc ||
-                   zoom != system_lyxrc.zoom) {
-                       os << "\\screen_zoom " << zoom << '\n';
+                   defaultZoom != system_lyxrc.defaultZoom) {
+                       os << "\\screen_zoom " << defaultZoom << '\n';
                }
                if (tag != RC_LAST)
                        break;
index 38fcd3739490f3f220d750ffbf684ab5c9a9c707..8ac70c1bca9949f37b2283b26cc8cc81d9bc8ba8 100644 (file)
@@ -295,9 +295,10 @@ public:
        bool allow_geometry_session;
        /// Scrolling speed of the mouse wheel
        double mouse_wheel_speed;
-       /// Zoom factor for screen fonts
-       int zoom;
-       /// Current zoom factor for screen fonts
+       /// Default zoom factor for screen fonts
+       int defaultZoom;
+       /// Actual zoom factor for screen fonts
+       /// (default zoom plus buffer zoom factor)
        int currentZoom;
        /// Screen font sizes in points for each font size
        std::string font_sizes[10];
index 891970b69464a54674115ed2a653c30857388a4c..212d19f6019ed23665391d5fae02490e8a615986 100644 (file)
@@ -1089,7 +1089,7 @@ void PrefScreenFonts::applyRC(LyXRC & rc) const
        parseFontName(screenTypewriterCO->currentText(),
                rc.typewriter_font_name, rc.typewriter_font_foundry);
 
-       rc.zoom = screenZoomSB->value();
+       rc.defaultZoom = screenZoomSB->value();
        rc.font_sizes[FONT_SIZE_TINY] = widgetToDoubleStr(screenTinyED);
        rc.font_sizes[FONT_SIZE_SCRIPT] = widgetToDoubleStr(screenSmallestED);
        rc.font_sizes[FONT_SIZE_FOOTNOTE] = widgetToDoubleStr(screenSmallerED);
@@ -1106,7 +1106,7 @@ void PrefScreenFonts::applyRC(LyXRC & rc) const
                || rc.roman_font_name != oldrc.roman_font_name
                || rc.sans_font_name != oldrc.sans_font_name
                || rc.typewriter_font_name != oldrc.typewriter_font_name
-               || rc.zoom != oldrc.zoom) {
+               || rc.defaultZoom != oldrc.defaultZoom) {
                // The global QPixmapCache is used in GuiPainter to cache text
                // painting so we must reset it in case any of the above
                // parameter is changed.
@@ -1130,7 +1130,7 @@ void PrefScreenFonts::updateRC(LyXRC const & rc)
        selectSans(screenSansCO->currentText());
        selectTypewriter(screenTypewriterCO->currentText());
 
-       screenZoomSB->setValue(rc.zoom);
+       screenZoomSB->setValue(rc.defaultZoom);
        updateScreenFontSizes(rc);
 
        pixmapCacheCB->setChecked(rc.use_pixmap_cache);
index b325e4b2256a2e69eec1f1d809b168e87b46676b..e48d6db1af73d364da3780bd0ec362272cb0f2d2 100644 (file)
@@ -741,7 +741,7 @@ void GuiView::autoSaveThreadFinished()
 void GuiView::saveLayout() const
 {
        QSettings settings;
-       settings.setValue("zoom", lyxrc.currentZoom);
+       settings.setValue("zoom_ratio", zoom_ratio_);
        settings.setValue("devel_mode", devel_mode_);
        settings.beginGroup("views");
        settings.beginGroup(QString::number(id_));
@@ -772,7 +772,12 @@ void GuiView::saveUISettings() const
 bool GuiView::restoreLayout()
 {
        QSettings settings;
-       lyxrc.currentZoom = settings.value("zoom", lyxrc.zoom).toInt();
+       zoom_ratio_ = settings.value("zoom_ratio", 1.0).toDouble();
+       // Actual zoom value: default zoom + fractional offset
+       int zoom = lyxrc.defaultZoom * zoom_ratio_;
+       if (zoom < static_cast<int>(zoom_min_))
+               zoom = zoom_min_;
+       lyxrc.currentZoom = zoom;
        devel_mode_ = settings.value("devel_mode", devel_mode_).toBool();
        settings.beginGroup("views");
        settings.beginGroup(QString::number(id_));
@@ -4114,30 +4119,31 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                case LFUN_BUFFER_ZOOM_IN:
                case LFUN_BUFFER_ZOOM_OUT:
                case LFUN_BUFFER_ZOOM: {
-                       // use a signed temp to avoid overflow
-                       int zoom = lyxrc.currentZoom;
                        if (cmd.argument().empty()) {
                                if (cmd.action() == LFUN_BUFFER_ZOOM)
-                                       zoom = lyxrc.zoom;
+                                       zoom_ratio_ = 1.0;
                                else if (cmd.action() == LFUN_BUFFER_ZOOM_IN)
-                                       zoom += 20;
+                                       zoom_ratio_ += 0.1;
                                else
-                                       zoom -= 20;
+                                       zoom_ratio_ -= 0.1;
                        } else {
                                if (cmd.action() == LFUN_BUFFER_ZOOM)
-                                       zoom = convert<int>(cmd.argument());
+                                       zoom_ratio_ = convert<int>(cmd.argument()) / double(lyxrc.defaultZoom);
                                else if (cmd.action() == LFUN_BUFFER_ZOOM_IN)
-                                       zoom += convert<int>(cmd.argument());
+                                       zoom_ratio_ += convert<int>(cmd.argument()) / 100.0;
                                else
-                                       zoom -= convert<int>(cmd.argument());
+                                       zoom_ratio_ -= convert<int>(cmd.argument()) / 100.0;
                        }
 
+                       // Actual zoom value: default zoom + fractional extra value
+                       int zoom = lyxrc.defaultZoom * zoom_ratio_;
                        if (zoom < static_cast<int>(zoom_min_))
                                zoom = zoom_min_;
 
                        lyxrc.currentZoom = zoom;
 
-                       dr.setMessage(bformat(_("Zoom level is now %1$d%"), lyxrc.currentZoom));
+                       dr.setMessage(bformat(_("Zoom level is now %1$d% (default value: %2$d%)"),
+                                             lyxrc.currentZoom, lyxrc.defaultZoom));
 
                        // The global QPixmapCache is used in GuiPainter to cache text
                        // painting so we must reset it.
index dd6fb9bd6e2c22e40aaa72f0d7711c7fb21401d1..ecf4e446c60f992072f5c36718052379d2444c2f 100644 (file)
@@ -470,6 +470,9 @@ private:
        /// Statusbar widget that shows version control status
        QLabel * version_control_;
 
+       /// The rate from which the actual zoom value is calculated
+       /// from the default zoom pref
+       double zoom_ratio_ = 1.0;
        /// Minimum zoom percentage
        static int const zoom_min_ = 10;