diff --git a/include/scripting.h b/include/scripting.h index d5d04c28..9d12a805 100644 --- a/include/scripting.h +++ b/include/scripting.h @@ -25,6 +25,7 @@ public: static Tile toTile(QJSValue obj); static QJSValue dimensions(int width, int height); static QJSEngine *getEngine(); + static QImage getImage(QString filepath); static void init(MainWindow *mainWindow); static void registerAction(QString functionName, QString actionName); static int numRegisteredActions(); @@ -41,6 +42,7 @@ private: QStringList filepaths; QList modules; QMap registeredActions; + QMap imageCache; void loadModules(QStringList moduleFiles); void invokeCallback(CallbackType type, QJSValueList args); diff --git a/src/scripting.cpp b/src/scripting.cpp index 042ee157..ce820fc8 100644 --- a/src/scripting.cpp +++ b/src/scripting.cpp @@ -193,3 +193,12 @@ QJSValue Scripting::fromTile(Tile tile) { QJSEngine *Scripting::getEngine() { return instance->engine; } + +QImage Scripting::getImage(QString filepath) { + const QImage * image = instance->imageCache.value(filepath, nullptr); + if (!image) { + image = new QImage(filepath); + instance->imageCache.insert(filepath, image); + } + return QImage(*image); +} diff --git a/src/ui/overlay.cpp b/src/ui/overlay.cpp index 058624a8..0318b5e9 100644 --- a/src/ui/overlay.cpp +++ b/src/ui/overlay.cpp @@ -1,4 +1,5 @@ #include "overlay.h" +#include "scripting.h" #include "log.h" void OverlayText::render(QPainter *painter) { @@ -53,7 +54,7 @@ void Overlay::addRect(int x, int y, int width, int height, QString color, bool f } bool Overlay::addImage(int x, int y, QString filepath, int width, int height, unsigned offset, bool hflip, bool vflip, bool setTransparency) { - QImage image = QImage(filepath); + QImage image = Scripting::getImage(filepath); if (image.isNull()) { logError(QString("Failed to load image '%1'").arg(filepath)); return false;