[LyX/master] Get rid of Qt resources

Jean-Marc Lasgouttes lasgouttes at lyx.org
Sat Jun 6 22:52:43 UTC 2020


commit 2d48072e664099385b2442f7166b3c57129799bb
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Sun Jun 7 00:57:40 2020 +0200

    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 f487992..388b165 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 ba96453..2dca758 100644
--- a/src/frontends/qt/BulletsModule.cpp
+++ b/src/frontends/qt/BulletsModule.cpp
@@ -11,6 +11,7 @@
 #include <config.h>
 
 #include "BulletsModule.h"
+#include "GuiApplication.h"
 #include "qt_helpers.h"
 
 #include <QPixmap>
@@ -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 e9244e1..d2ff132 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<QString,bool> iconName(FuncRequest const & f, bool unknown, bool rtl)
 {
-	initializeResources();
 	QStringList names;
 	QString lfunname = toqstr(lyxaction.getActionName(f.action()));
 
@@ -538,36 +527,25 @@ pair<QString,bool> 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 74fe357..064049c 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 <QApplication>
 #include <QHeaderView>
 #include <QKeyEvent>
 #include <QPainter>
@@ -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 eb933c7..e01f8dd 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 "<!DOCTYPE RCC><RCC version='1.0'><qresource>" > $@ ; \
-	find $(top_srcdir)/lib/images -name '*.svgz' -o -name '*.png' -o -name '*.gif' \
-		| LC_ALL=C sort \
-		| sed -e 's:$(top_srcdir)/lib/\(.*\):<file alias="\1">&</file>:' \
-		>> $@ ;\
-	echo "</qresource></RCC>" >> $@
-
-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 db64a2d..b6fc541 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 907d7d4..44091f0 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<docstring> MathCompletionList::globals;


More information about the lyx-cvs mailing list