summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-02-17 15:37:53 +0100
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-02-21 15:47:08 +0100
commit6e0681392282cce5fd1009d88b4a248e7f545f4c (patch)
tree757bd9d145bc4565310d2574caeb558258f5f626
parent0d47dfbb0f7425db9ec8d10f9d4efbbd7daa9f24 (diff)
downloadmana-6e0681392282cce5fd1009d88b4a248e7f545f4c.tar.gz
mana-6e0681392282cce5fd1009d88b4a248e7f545f4c.tar.bz2
mana-6e0681392282cce5fd1009d88b4a248e7f545f4c.tar.xz
mana-6e0681392282cce5fd1009d88b4a248e7f545f4c.zip
Replaced ImageSprite in Emote by plain Image
Emotes just need an image to be represented in the UI, so we don't need to use ImageSprite.
-rw-r--r--src/gui/emotepopup.cpp14
-rw-r--r--src/gui/widgets/emoteshortcutcontainer.cpp17
-rw-r--r--src/imagesprite.h5
-rw-r--r--src/resources/emotedb.cpp16
-rw-r--r--src/resources/emotedb.h9
5 files changed, 29 insertions, 32 deletions
diff --git a/src/gui/emotepopup.cpp b/src/gui/emotepopup.cpp
index 589d5087..a906eb7e 100644
--- a/src/gui/emotepopup.cpp
+++ b/src/gui/emotepopup.cpp
@@ -25,7 +25,6 @@
#include "configuration.h"
#include "emoteshortcut.h"
#include "graphics.h"
-#include "imagesprite.h"
#include "log.h"
#include "resources/emotedb.h"
@@ -60,6 +59,8 @@ EmotePopup::~EmotePopup()
void EmotePopup::draw(gcn::Graphics *graphics)
{
+ auto *g = static_cast<Graphics*>(graphics);
+
Popup::draw(graphics);
const int emoteCount = EmoteDB::getEmoteCount();
@@ -81,13 +82,14 @@ void EmotePopup::draw(gcn::Graphics *graphics)
// Draw selection image below hovered item
if (i == mHoveredEmoteIndex)
- {
- static_cast<Graphics*>(graphics)->drawImage(
- mSelectionImage, emoteX, emoteY + 4);
- }
+ g->drawImage(mSelectionImage, emoteX, emoteY + 4);
// Draw emote icon
- EmoteDB::getByIndex(i).sprite->draw(static_cast<Graphics*>(graphics), emoteX, emoteY);
+ if (auto image = EmoteDB::getByIndex(i).image)
+ {
+ image->setAlpha(1.0f);
+ g->drawImage(image, emoteX, emoteY);
+ }
}
}
diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp
index 8ecbc9bf..d80cbb53 100644
--- a/src/gui/widgets/emoteshortcutcontainer.cpp
+++ b/src/gui/widgets/emoteshortcutcontainer.cpp
@@ -82,19 +82,26 @@ void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
int emoteId = emoteShortcut->getEmote(i);
if (emoteId != -1)
{
- EmoteDB::get(emoteId).sprite->draw(g, emoteX + 2, emoteY + 10);
+ if (auto image = EmoteDB::get(emoteId).image)
+ {
+ image->setAlpha(1.0f);
+ g->drawImage(image, emoteX + 2, emoteY + 10);
+ }
}
}
if (mEmoteMoved != -1)
{
// Draw the emote image being dragged by the cursor.
- const ImageSprite *sprite = EmoteDB::get(mEmoteMoved).sprite.get();
+ if (auto image = EmoteDB::get(mEmoteMoved).image)
+ {
+ image->setAlpha(1.0f);
- const int tPosX = mCursorPosX - (sprite->getWidth() / 2);
- const int tPosY = mCursorPosY - (sprite->getHeight() / 2);
+ const int tPosX = mCursorPosX - (image->getWidth() / 2);
+ const int tPosY = mCursorPosY - (image->getHeight() / 2);
- sprite->draw(g, tPosX, tPosY);
+ g->drawImage(image, tPosX, tPosY);
+ }
}
}
diff --git a/src/imagesprite.h b/src/imagesprite.h
index ce2bb366..f66628ce 100644
--- a/src/imagesprite.h
+++ b/src/imagesprite.h
@@ -59,11 +59,6 @@ public:
int getDuration() const override
{ return 0; }
- // Hack to allow the ImageSprite to be used with SubImage instances, which
- // are not reference counted.
- void releaseImageRef()
- { mImage.release(); }
-
private:
ResourceRef<Image> mImage;
};
diff --git a/src/resources/emotedb.cpp b/src/resources/emotedb.cpp
index 6f1ec6e4..53038e12 100644
--- a/src/resources/emotedb.cpp
+++ b/src/resources/emotedb.cpp
@@ -22,10 +22,9 @@
#include "resources/emotedb.h"
#include "log.h"
-#include "imagesprite.h"
-#include "resources/resourcemanager.h"
#include "resources/imageset.h"
+#include "resources/resourcemanager.h"
#include <algorithm>
#include <vector>
@@ -44,8 +43,7 @@ void EmoteDB::init()
mUnknown.name = "unknown";
mUnknown.effectId = -1;
- mUnknown.sprite = std::make_unique<ImageSprite>(
- ResourceManager::getInstance()->getImageRef("graphics/sprites/error.png"));
+ mUnknown.image = ResourceManager::getInstance()->getImageRef("graphics/sprites/error.png");
}
void EmoteDB::readEmoteNode(XML::Node node, const std::string &filename)
@@ -94,7 +92,7 @@ void EmoteDB::readEmoteNode(XML::Node node, const std::string &filename)
}
// For now we just use the first image in the animation
- emote.sprite = std::make_unique<ImageSprite>(emote.is->get(0));
+ emote.image = emote.is->get(0);
mEmotes.push_back(std::move(emote));
}
@@ -106,14 +104,12 @@ void EmoteDB::checkStatus()
void EmoteDB::unload()
{
+ // These images are owned by the ImageSet
for (auto &emote : mEmotes)
- emote.sprite->releaseImageRef();
+ emote.image.release();
mEmotes.clear();
-
- if (mUnknown.sprite)
- mUnknown.sprite->releaseImageRef();
-
+ mUnknown.image = nullptr;
mLoaded = false;
}
diff --git a/src/resources/emotedb.h b/src/resources/emotedb.h
index 0abb62e4..b722c88b 100644
--- a/src/resources/emotedb.h
+++ b/src/resources/emotedb.h
@@ -21,23 +21,20 @@
#pragma once
-#include <memory>
#include <string>
-#include "resources/resource.h"
+#include "resources/image.h"
+#include "resources/imageset.h"
#include "utils/xml.h"
-class ImageSet;
-class ImageSprite;
-
struct Emote
{
int id;
int effectId;
std::string name;
ResourceRef<ImageSet> is;
- std::unique_ptr<ImageSprite> sprite;
+ ResourceRef<Image> image;
};
/**