]> git.lyx.org Git - lyx.git/commitdiff
Add feedback in status bar when zooming
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 18 Jul 2016 14:44:06 +0000 (16:44 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 18 Jul 2016 15:03:54 +0000 (17:03 +0200)
Moreover enforce better the lower limit of 10 and avoid overflow due
to unsigned int.

Fixes bug #10212.

src/LyXRC.cpp
src/frontends/qt4/GuiView.cpp

index 8b7c3b3ec89756bdeda71245322239e9ec4cb39d..7696d0991fb2502d888c0183ee49d63c84605734 100644 (file)
@@ -604,6 +604,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
 
                case RC_SCREEN_ZOOM:
                        lexrc >> zoom;
+                       if (zoom < 10)
+                               zoom = 10;
                        break;
 
                case RC_GEOMETRY_SESSION:
index b94625b7ca123319f4e137067ec9f3a5b62d29c8..1342eb7998a9d3f755a435d3214a58186d2b055d 100644 (file)
@@ -1990,6 +1990,8 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
 
        case LFUN_BUFFER_ZOOM_OUT:
                enable = doc_buffer && lyxrc.zoom > 10;
+               if (lyxrc.zoom <= 10)
+                       flag.message(_("Zoom level cannot be less than 10%."));
                break;
 
        case LFUN_BUFFER_ZOOM_IN:
@@ -3933,17 +3935,22 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        break;
 
                case LFUN_BUFFER_ZOOM_IN:
-               case LFUN_BUFFER_ZOOM_OUT:
+               case LFUN_BUFFER_ZOOM_OUT: {
+                       // use a signed temp to avoid overflow
+                       int zoom = lyxrc.zoom;
                        if (cmd.argument().empty()) {
                                if (cmd.action() == LFUN_BUFFER_ZOOM_IN)
-                                       lyxrc.zoom += 20;
+                                       zoom += 20;
                                else
-                                       lyxrc.zoom -= 20;
+                                       zoom -= 20;
                        } else
-                               lyxrc.zoom += convert<int>(cmd.argument());
+                               zoom += convert<int>(cmd.argument());
 
-                       if (lyxrc.zoom < 10)
-                               lyxrc.zoom = 10;
+                       if (zoom < 10)
+                               zoom = 10;
+                       lyxrc.zoom = zoom;
+
+                       dr.setMessage(bformat(_("Zoom level is now %1$d%"), lyxrc.zoom));
 
                        // The global QPixmapCache is used in GuiPainter to cache text
                        // painting so we must reset it.
@@ -3951,6 +3958,7 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        guiApp->fontLoader().update();
                        lyx::dispatch(FuncRequest(LFUN_SCREEN_FONT_UPDATE));
                        break;
+               }
 
                case LFUN_VC_REGISTER:
                case LFUN_VC_RENAME: