From 6c92075799ae8d83f4f38e3c169c40da215e03f2 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Wed, 23 Nov 2016 17:30:49 +0100 Subject: [PATCH] Amend fix for #10428 - Allow using logical values for icon sizes as the standard sizes may differ among different icon sets - Do not allow setting sizes smaller than smallIconSize When the logical sizes differ and the icon set is changed, the correct sizes are established only after a restart. --- lib/ui/stdcontext.inc | 10 ++--- lib/ui/stdmenus.inc | 10 ++--- src/LyXAction.cpp | 4 +- src/frontends/qt4/GuiView.cpp | 84 ++++++++++++++++++++++++++--------- 4 files changed, 75 insertions(+), 33 deletions(-) diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc index abba265031..a229b4af4b 100644 --- a/lib/ui/stdcontext.inc +++ b/lib/ui/stdcontext.inc @@ -665,11 +665,11 @@ Menuset Menu "context-toolbars" Toolbars Separator - Item "Small-sized Icons" "icon-size 16" - Item "Normal-sized Icons" "icon-size 20" - Item "Big-sized Icons" "icon-size 26" - Item "Huge-sized Icons" "icon-size 32" - Item "Giant-sized Icons" "icon-size 48" + Item "Small-sized Icons" "icon-size small" + Item "Normal-sized Icons" "icon-size normal" + Item "Big-sized Icons" "icon-size big" + Item "Huge-sized Icons" "icon-size huge" + Item "Giant-sized Icons" "icon-size giant" End End diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc index 06614c8997..3404fa8afc 100644 --- a/lib/ui/stdmenus.inc +++ b/lib/ui/stdmenus.inc @@ -351,11 +351,11 @@ Menuset Menu "toolbars" Toolbars Separator - Item "Small-sized Icons" "icon-size 16" - Item "Normal-sized Icons" "icon-size 20" - Item "Big-sized Icons" "icon-size 26" - Item "Huge-sized Icons" "icon-size 32" - Item "Giant-sized Icons" "icon-size 48" + Item "Small-sized Icons" "icon-size small" + Item "Normal-sized Icons" "icon-size normal" + Item "Big-sized Icons" "icon-size big" + Item "Huge-sized Icons" "icon-size huge" + Item "Giant-sized Icons" "icon-size giant" End # # INSERT MENU diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index cf113184f3..9fe5917850 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -2749,7 +2749,9 @@ void LyXAction::init() * \var lyx::FuncCode lyx::LFUN_ICON_SIZE * \li Action: Sets icon size of toolbars. * \li Syntax: icon-size [] - * \li Params: : the icon size in px, the default is 20 (normalIconSize). + * \li Params: : the icon size in px or one of the logical settings + small|normal|big|huge|giant, the default is normal + (whose size in px is icon set dependent). * \li Origin: 11 July 2016 * \endvar */ diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 432da37d53..a6a96e269c 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -383,6 +383,60 @@ public: processing_thread_watcher_.setFuture(f); } + QSize iconSize(docstring const & icon_size) + { + int size; + if (icon_size == "small") + size = smallIconSize; + else if (icon_size == "normal") + size = normalIconSize; + else if (icon_size == "big") + size = bigIconSize; + else if (icon_size == "huge") + size = hugeIconSize; + else if (icon_size == "giant") + size = giantIconSize; + else + size = icon_size.empty() ? normalIconSize : convert(icon_size); + + if (size < smallIconSize) + size = smallIconSize; + + return QSize(size, size); + } + + QSize iconSize(QString const & icon_size) + { + return iconSize(qstring_to_ucs4(icon_size)); + } + + string & iconSize(QSize const & qsize) + { + LATTEST(qsize.width() == qsize.height()); + + static string icon_size; + + int size = qsize.width(); + + if (size < smallIconSize) + size = smallIconSize; + + if (size == smallIconSize) + icon_size = "small"; + else if (size == normalIconSize) + icon_size = "normal"; + else if (size == bigIconSize) + icon_size = "big"; + else if (size == hugeIconSize) + icon_size = "huge"; + else if (size == giantIconSize) + icon_size = "giant"; + else + icon_size = convert(size); + + return icon_size; + } + public: GuiView * gv_; GuiWorkArea * current_work_area_; @@ -668,7 +722,7 @@ void GuiView::saveLayout() const settings.setValue("geometry", saveGeometry()); #endif settings.setValue("layout", saveState(0)); - settings.setValue("icon_size", iconSize()); + settings.setValue("icon_size", toqstr(d.iconSize(iconSize()))); } @@ -695,9 +749,7 @@ bool GuiView::restoreLayout() return false; //code below is skipped when when ~/.config/LyX is (re)created - QSize icon_size = settings.value(icon_key).toSize(); - // Check whether session size changed. - setIconSize(icon_size); + setIconSize(d.iconSize(settings.value(icon_key).toString())); #if defined(Q_WS_X11) || defined(QPA_XCB) QPoint pos = settings.value("pos", QPoint(50, 50)).toPoint(); @@ -1828,11 +1880,9 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) break; } - case LFUN_ICON_SIZE: { - int const size = cmd.argument().empty() ? d.normalIconSize : convert(cmd.argument()); - flag.setOnOff(QSize(size, size) == iconSize()); + case LFUN_ICON_SIZE: + flag.setOnOff(d.iconSize(cmd.argument()) == iconSize()); break; - } case LFUN_DROP_LAYOUTS_CHOICE: enable = buf != 0; @@ -3729,20 +3779,10 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr) } case LFUN_ICON_SIZE: { - int const size = cmd.argument().empty() ? d.normalIconSize : convert(cmd.argument()); - setIconSize(QSize(size, size)); - if (size == d.smallIconSize) - dr.setMessage("Icon size set to small"); - else if (size == d.normalIconSize) - dr.setMessage("Icon size set to normal"); - else if (size == d.bigIconSize) - dr.setMessage("Icon size set to big"); - else if (size == d.hugeIconSize) - dr.setMessage("Icon size set to huge"); - else if (size == d.giantIconSize) - dr.setMessage("Icon size set to giant"); - else - dr.setMessage(bformat(_("Icon size set to %1$d"), size)); + QSize size = d.iconSize(cmd.argument()); + setIconSize(size); + dr.setMessage(bformat(_("Icon size set to %1$dx%2$d."), + size.width(), size.height())); break; } -- 2.39.2