diff options
author | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-02-17 15:37:53 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-02-21 15:47:08 +0100 |
commit | 6e0681392282cce5fd1009d88b4a248e7f545f4c (patch) | |
tree | 757bd9d145bc4565310d2574caeb558258f5f626 | |
parent | 0d47dfbb0f7425db9ec8d10f9d4efbbd7daa9f24 (diff) | |
download | mana-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.cpp | 14 | ||||
-rw-r--r-- | src/gui/widgets/emoteshortcutcontainer.cpp | 17 | ||||
-rw-r--r-- | src/imagesprite.h | 5 | ||||
-rw-r--r-- | src/resources/emotedb.cpp | 16 | ||||
-rw-r--r-- | src/resources/emotedb.h | 9 |
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; }; /** |