* \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
*/
* \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
*/
* \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
*/
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";
break;
case RC_SCREEN_ZOOM:
- lexrc >> zoom;
- if (zoom < 10)
- zoom = 10;
+ lexrc >> defaultZoom;
+ if (defaultZoom < 10)
+ defaultZoom = 10;
break;
case RC_GEOMETRY_SESSION:
// 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;
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];
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);
|| 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.
selectSans(screenSansCO->currentText());
selectTypewriter(screenTypewriterCO->currentText());
- screenZoomSB->setValue(rc.zoom);
+ screenZoomSB->setValue(rc.defaultZoom);
updateScreenFontSizes(rc);
pixmapCacheCB->setChecked(rc.use_pixmap_cache);
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_));
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_));
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.
/// 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;