From 2d48072e664099385b2442f7166b3c57129799bb Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sun, 7 Jun 2020 00:57:40 +0200 Subject: [PATCH] Get rid of Qt resources It turns out that the resources were mostly not used anyway. Removing them shrinks LyX binary by ~6MB. Only autotools have been adapted. cmake will require the same simplification. --- src/frontends/qt/.gitignore | 2 -- src/frontends/qt/BulletsModule.cpp | 3 +- src/frontends/qt/GuiApplication.cpp | 51 ++++++----------------------- src/frontends/qt/GuiCompleter.cpp | 22 +++++++------ src/frontends/qt/Makefile.am | 14 -------- src/insets/InsetInfo.cpp | 8 ----- src/mathed/InsetMathNest.cpp | 4 +-- 7 files changed, 26 insertions(+), 78 deletions(-) diff --git a/src/frontends/qt/.gitignore b/src/frontends/qt/.gitignore index f487992aaa..388b16574c 100644 --- a/src/frontends/qt/.gitignore +++ b/src/frontends/qt/.gitignore @@ -1,5 +1,3 @@ -Resources.cpp -Resources.qrc liblyxqt.a ui_*.h moc_*.cpp diff --git a/src/frontends/qt/BulletsModule.cpp b/src/frontends/qt/BulletsModule.cpp index ba96453eb6..2dca758d12 100644 --- a/src/frontends/qt/BulletsModule.cpp +++ b/src/frontends/qt/BulletsModule.cpp @@ -11,6 +11,7 @@ #include #include "BulletsModule.h" +#include "GuiApplication.h" #include "qt_helpers.h" #include @@ -64,7 +65,7 @@ void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname, bulletpaneCO->addItem(panelname); // get pixmap with bullets - QPixmap pixmap(":/images/" + toqstr(fname) + ".png"); + QPixmap pixmap = getPixmap("images", toqstr(fname), ".png"); int const w = pixmap.width() / 6; int const h = pixmap.height() / 6; diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp index e9244e1a78..d2ff132bc1 100644 --- a/src/frontends/qt/GuiApplication.cpp +++ b/src/frontends/qt/GuiApplication.cpp @@ -157,16 +157,6 @@ using namespace std; using namespace lyx::support; -static void initializeResources() -{ - static bool initialized = false; - if (!initialized) { - Q_INIT_RESOURCE(Resources); - initialized = true; - } -} - - namespace lyx { frontend::Application * createApplication(int & argc, char * argv[]) @@ -490,7 +480,6 @@ QString themeIconName(QString const & action) // the returned bool is true if the icon needs to be flipped pair iconName(FuncRequest const & f, bool unknown, bool rtl) { - initializeResources(); QStringList names; QString lfunname = toqstr(lyxaction.getActionName(f.action())); @@ -538,36 +527,25 @@ pair iconName(FuncRequest const & f, bool unknown, bool rtl) names << "unknown"; search_mode const mode = theGuiApp()->imageSearchMode(); + // The folders where icons are searched for QStringList imagedirs; imagedirs << "images/" << "images/ipa/"; + // This is used to search for rtl version of icons which have the +rrtl suffix. QStringList suffixes; if (rtl) suffixes << "+rtl"; suffixes << QString(); + for (QString const & imagedir : imagedirs) for (QString const & name : names) for (QString const & suffix : suffixes) { QString id = imagedir; FileName fname = imageLibFileSearch(id, name + suffix, "svgz,png", mode); if (fname.exists()) - return make_pair(toqstr(fname.absFileName()), rtl && suffix.isEmpty()); + return make_pair(toqstr(fname.absFileName()), + rtl && suffix.isEmpty()); } - QString const resdir(":/images/"); - QDir res(resdir); - if (!res.exists()) { - LYXERR0("Directory :/images/ not found in resource!"); - return make_pair(QString(), false); - } - - for (QString const & name : names) - for (QString const & suffix : suffixes) { - if (res.exists(name + suffix + ".svgz")) - return make_pair(resdir + name + ".svgz", rtl && suffix.isEmpty()); - if (res.exists(name + suffix + ".png")) - return make_pair(resdir + name + ".png", rtl && suffix.isEmpty()); - } - LYXERR(Debug::GUI, "Cannot find icon for command \"" << lyxaction.getActionName(f.action()) << '(' << to_utf8(f.argument()) << ")\""); @@ -583,22 +561,13 @@ QPixmap getPixmap(QString const & path, QString const & name, QString const & ex QString fpath = toqstr(fname.absFileName()); QPixmap pixmap = QPixmap(); - if (pixmap.load(fpath)) { + if (pixmap.load(fpath)) return pixmap; - } - - QStringList exts = ext.split(","); - fpath = ":/" + path + name + "."; - for (int i = 0; i < exts.size(); ++i) { - if (pixmap.load(fpath + exts.at(i))) { - return pixmap; - } - } bool const list = ext.contains(","); - LYXERR0("Cannot load pixmap \"" - << path << name << "." << (list ? "{" : "") << ext - << (list ? "}" : "") << "\", please verify resource system!"); + LYXERR(Debug::GUI, "Cannot load pixmap \"" + << path << "/" << name << "." << (list ? "{" : "") << ext + << (list ? "}" : "") << "\"."); return QPixmap(); } @@ -630,7 +599,7 @@ QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl) //LYXERR(Debug::GUI, "Found icon: " << icon); QPixmap pixmap = QPixmap(); if (!pixmap.load(icon)) { - LYXERR0("Cannot load icon " << icon << " please verify resource system!"); + LYXERR0("Cannot load icon " << icon << "."); return QIcon(); } diff --git a/src/frontends/qt/GuiCompleter.cpp b/src/frontends/qt/GuiCompleter.cpp index 74fe357971..064049c60b 100644 --- a/src/frontends/qt/GuiCompleter.cpp +++ b/src/frontends/qt/GuiCompleter.cpp @@ -12,24 +12,26 @@ #include "GuiCompleter.h" +#include "GuiApplication.h" +#include "GuiWorkArea.h" +#include "GuiView.h" +#include "qt_helpers.h" + #include "Buffer.h" #include "BufferView.h" #include "CompletionList.h" #include "Cursor.h" #include "Dimension.h" -#include "GuiWorkArea.h" -#include "GuiView.h" #include "LyX.h" #include "LyXRC.h" #include "Paragraph.h" -#include "qt_helpers.h" #include "version.h" +#include "support/debug.h" #include "support/lassert.h" #include "support/lstrings.h" -#include "support/debug.h" +#include "support/qstring_helpers.h" -#include #include #include #include @@ -137,18 +139,18 @@ public: // get icon from cache QPixmap scaled; - QString const name = ":" + toqstr(list_->icon(index.row())); - if (name == ":") + QString const name = toqstr(list_->icon(index.row())); + if (name.isEmpty()) return scaled; - if (!QPixmapCache::find("completion" + name, &scaled)) { + if (!QPixmapCache::find("completion:" + name, &scaled)) { // load icon from disk - QPixmap p = QPixmap(name); + QPixmap p = getPixmap("images", name, "svgz,png"); if (!p.isNull()) { // scale it to 16x16 or smaller scaled = p.scaled(min(16, p.width()), min(16, p.height()), Qt::KeepAspectRatio, Qt::SmoothTransformation); } - QPixmapCache::insert("completion" + name, scaled); + QPixmapCache::insert("completion:" + name, scaled); } return scaled; } diff --git a/src/frontends/qt/Makefile.am b/src/frontends/qt/Makefile.am index eb933c7173..e01f8ddba8 100644 --- a/src/frontends/qt/Makefile.am +++ b/src/frontends/qt/Makefile.am @@ -2,7 +2,6 @@ include $(top_srcdir)/config/common.am BUILT_SOURCES = $(UIFILES:%.ui=ui_%.h) BUILT_SOURCES += $(MOCEDFILES) -BUILT_SOURCES += Resources.cpp Resources.qrc CLEANFILES = $(BUILT_SOURCES) @@ -23,17 +22,6 @@ QT_VERSION = $(shell IFS=.; set -- `echo $(QTLIB_VERSION)`; \ moc_%.cpp: %.h $(AM_V_GEN)$(QT_MOC) -DQT_VERSION=$(QT_VERSION) -o $@ $< -Resources.qrc: Makefile - $(AM_V_GEN)echo "" > $@ ; \ - find $(top_srcdir)/lib/images -name '*.svgz' -o -name '*.png' -o -name '*.gif' \ - | LC_ALL=C sort \ - | sed -e 's:$(top_srcdir)/lib/\(.*\):&:' \ - >> $@ ;\ - echo "" >> $@ - -Resources.cpp: Resources.qrc - $(AM_V_GEN)$(QT_RCC) $< -name Resources -o $@ - ######################### LIBRARIES ############################# @@ -367,8 +355,6 @@ UIFILES = \ WorkAreaUi.ui \ WrapUi.ui -nodist_liblyxqt_a_SOURCES = Resources.cpp - liblyxqt_a_SOURCES = \ $(SOURCEFILES) \ $(MOCHEADER) \ diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index db64a2d366..b6fc541793 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -1037,14 +1037,6 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons initialized_ = true; FuncRequest func = lyxaction.lookupFunc(params_.name); docstring icon_name = frontend::Application::iconName(func, true); - // FIXME: We should use the icon directly instead of - // going through FileName. The code below won't work - // if the icon is embedded in the executable through - // the Qt resource system. - // This is only a negligible performance problem: - // If the installed icon differs from the resource icon the - // installed one is preferred anyway, and all icons that are - // embedded in the resources are installed as well. FileName file(to_utf8(icon_name)); if (file.onlyFileNameWithoutExt() == "unknown") { string dir = "images"; diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index 907d7d4608..44091f0320 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -2180,11 +2180,11 @@ std::string MathCompletionList::icon(size_t idx) const else cmd = locals[idx]; - // get the icon resource name by stripping the backslash + // get the icon name by stripping the backslash docstring icon_name = frontend::Application::mathIcon(cmd.substr(1)); if (icon_name.empty()) return std::string(); - return "images/math/" + to_utf8(icon_name); + return "math/" + to_utf8(icon_name); } std::vector MathCompletionList::globals; -- 2.39.5