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.
This commit is contained in:
Jean-Marc Lasgouttes 2020-06-07 00:57:40 +02:00
parent 6b221751c1
commit 2d48072e66
7 changed files with 26 additions and 78 deletions

View File

@ -1,5 +1,3 @@
Resources.cpp
Resources.qrc
liblyxqt.a liblyxqt.a
ui_*.h ui_*.h
moc_*.cpp moc_*.cpp

View File

@ -11,6 +11,7 @@
#include <config.h> #include <config.h>
#include "BulletsModule.h" #include "BulletsModule.h"
#include "GuiApplication.h"
#include "qt_helpers.h" #include "qt_helpers.h"
#include <QPixmap> #include <QPixmap>
@ -64,7 +65,7 @@ void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname,
bulletpaneCO->addItem(panelname); bulletpaneCO->addItem(panelname);
// get pixmap with bullets // 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 w = pixmap.width() / 6;
int const h = pixmap.height() / 6; int const h = pixmap.height() / 6;

View File

@ -157,16 +157,6 @@ using namespace std;
using namespace lyx::support; using namespace lyx::support;
static void initializeResources()
{
static bool initialized = false;
if (!initialized) {
Q_INIT_RESOURCE(Resources);
initialized = true;
}
}
namespace lyx { namespace lyx {
frontend::Application * createApplication(int & argc, char * argv[]) 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 // the returned bool is true if the icon needs to be flipped
pair<QString,bool> iconName(FuncRequest const & f, bool unknown, bool rtl) pair<QString,bool> iconName(FuncRequest const & f, bool unknown, bool rtl)
{ {
initializeResources();
QStringList names; QStringList names;
QString lfunname = toqstr(lyxaction.getActionName(f.action())); QString lfunname = toqstr(lyxaction.getActionName(f.action()));
@ -538,34 +527,23 @@ pair<QString,bool> iconName(FuncRequest const & f, bool unknown, bool rtl)
names << "unknown"; names << "unknown";
search_mode const mode = theGuiApp()->imageSearchMode(); search_mode const mode = theGuiApp()->imageSearchMode();
// The folders where icons are searched for
QStringList imagedirs; QStringList imagedirs;
imagedirs << "images/" << "images/ipa/"; imagedirs << "images/" << "images/ipa/";
// This is used to search for rtl version of icons which have the +rrtl suffix.
QStringList suffixes; QStringList suffixes;
if (rtl) if (rtl)
suffixes << "+rtl"; suffixes << "+rtl";
suffixes << QString(); suffixes << QString();
for (QString const & imagedir : imagedirs) for (QString const & imagedir : imagedirs)
for (QString const & name : names) for (QString const & name : names)
for (QString const & suffix : suffixes) { for (QString const & suffix : suffixes) {
QString id = imagedir; QString id = imagedir;
FileName fname = imageLibFileSearch(id, name + suffix, "svgz,png", mode); FileName fname = imageLibFileSearch(id, name + suffix, "svgz,png", mode);
if (fname.exists()) 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 \"" LYXERR(Debug::GUI, "Cannot find icon for command \""
@ -583,22 +561,13 @@ QPixmap getPixmap(QString const & path, QString const & name, QString const & ex
QString fpath = toqstr(fname.absFileName()); QString fpath = toqstr(fname.absFileName());
QPixmap pixmap = QPixmap(); QPixmap pixmap = QPixmap();
if (pixmap.load(fpath)) { if (pixmap.load(fpath))
return pixmap; 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(","); bool const list = ext.contains(",");
LYXERR0("Cannot load pixmap \"" LYXERR(Debug::GUI, "Cannot load pixmap \""
<< path << name << "." << (list ? "{" : "") << ext << path << "/" << name << "." << (list ? "{" : "") << ext
<< (list ? "}" : "") << "\", please verify resource system!"); << (list ? "}" : "") << "\".");
return QPixmap(); return QPixmap();
} }
@ -630,7 +599,7 @@ QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl)
//LYXERR(Debug::GUI, "Found icon: " << icon); //LYXERR(Debug::GUI, "Found icon: " << icon);
QPixmap pixmap = QPixmap(); QPixmap pixmap = QPixmap();
if (!pixmap.load(icon)) { if (!pixmap.load(icon)) {
LYXERR0("Cannot load icon " << icon << " please verify resource system!"); LYXERR0("Cannot load icon " << icon << ".");
return QIcon(); return QIcon();
} }

View File

@ -12,24 +12,26 @@
#include "GuiCompleter.h" #include "GuiCompleter.h"
#include "GuiApplication.h"
#include "GuiWorkArea.h"
#include "GuiView.h"
#include "qt_helpers.h"
#include "Buffer.h" #include "Buffer.h"
#include "BufferView.h" #include "BufferView.h"
#include "CompletionList.h" #include "CompletionList.h"
#include "Cursor.h" #include "Cursor.h"
#include "Dimension.h" #include "Dimension.h"
#include "GuiWorkArea.h"
#include "GuiView.h"
#include "LyX.h" #include "LyX.h"
#include "LyXRC.h" #include "LyXRC.h"
#include "Paragraph.h" #include "Paragraph.h"
#include "qt_helpers.h"
#include "version.h" #include "version.h"
#include "support/debug.h"
#include "support/lassert.h" #include "support/lassert.h"
#include "support/lstrings.h" #include "support/lstrings.h"
#include "support/debug.h" #include "support/qstring_helpers.h"
#include <QApplication>
#include <QHeaderView> #include <QHeaderView>
#include <QKeyEvent> #include <QKeyEvent>
#include <QPainter> #include <QPainter>
@ -137,18 +139,18 @@ public:
// get icon from cache // get icon from cache
QPixmap scaled; QPixmap scaled;
QString const name = ":" + toqstr(list_->icon(index.row())); QString const name = toqstr(list_->icon(index.row()));
if (name == ":") if (name.isEmpty())
return scaled; return scaled;
if (!QPixmapCache::find("completion" + name, &scaled)) { if (!QPixmapCache::find("completion:" + name, &scaled)) {
// load icon from disk // load icon from disk
QPixmap p = QPixmap(name); QPixmap p = getPixmap("images", name, "svgz,png");
if (!p.isNull()) { if (!p.isNull()) {
// scale it to 16x16 or smaller // scale it to 16x16 or smaller
scaled = p.scaled(min(16, p.width()), min(16, p.height()), scaled = p.scaled(min(16, p.width()), min(16, p.height()),
Qt::KeepAspectRatio, Qt::SmoothTransformation); Qt::KeepAspectRatio, Qt::SmoothTransformation);
} }
QPixmapCache::insert("completion" + name, scaled); QPixmapCache::insert("completion:" + name, scaled);
} }
return scaled; return scaled;
} }

View File

@ -2,7 +2,6 @@ include $(top_srcdir)/config/common.am
BUILT_SOURCES = $(UIFILES:%.ui=ui_%.h) BUILT_SOURCES = $(UIFILES:%.ui=ui_%.h)
BUILT_SOURCES += $(MOCEDFILES) BUILT_SOURCES += $(MOCEDFILES)
BUILT_SOURCES += Resources.cpp Resources.qrc
CLEANFILES = $(BUILT_SOURCES) CLEANFILES = $(BUILT_SOURCES)
@ -23,17 +22,6 @@ QT_VERSION = $(shell IFS=.; set -- `echo $(QTLIB_VERSION)`; \
moc_%.cpp: %.h moc_%.cpp: %.h
$(AM_V_GEN)$(QT_MOC) -DQT_VERSION=$(QT_VERSION) -o $@ $< $(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 ############################# ######################### LIBRARIES #############################
@ -367,8 +355,6 @@ UIFILES = \
WorkAreaUi.ui \ WorkAreaUi.ui \
WrapUi.ui WrapUi.ui
nodist_liblyxqt_a_SOURCES = Resources.cpp
liblyxqt_a_SOURCES = \ liblyxqt_a_SOURCES = \
$(SOURCEFILES) \ $(SOURCEFILES) \
$(MOCHEADER) \ $(MOCHEADER) \

View File

@ -1037,14 +1037,6 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
initialized_ = true; initialized_ = true;
FuncRequest func = lyxaction.lookupFunc(params_.name); FuncRequest func = lyxaction.lookupFunc(params_.name);
docstring icon_name = frontend::Application::iconName(func, true); 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)); FileName file(to_utf8(icon_name));
if (file.onlyFileNameWithoutExt() == "unknown") { if (file.onlyFileNameWithoutExt() == "unknown") {
string dir = "images"; string dir = "images";

View File

@ -2180,11 +2180,11 @@ std::string MathCompletionList::icon(size_t idx) const
else else
cmd = locals[idx]; 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)); docstring icon_name = frontend::Application::mathIcon(cmd.substr(1));
if (icon_name.empty()) if (icon_name.empty())
return std::string(); return std::string();
return "images/math/" + to_utf8(icon_name); return "math/" + to_utf8(icon_name);
} }
std::vector<docstring> MathCompletionList::globals; std::vector<docstring> MathCompletionList::globals;