Skip to content

Commit df6ddc0

Browse files
committed
many fixes and improvements
1 parent 2b39e69 commit df6ddc0

File tree

14 files changed

+536
-138
lines changed

14 files changed

+536
-138
lines changed

changelog.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# 2.0.8
2+
- Rewrite hover logic (layering properly works now)
3+
- Add support for more sprite formats (GIF, JPEG XL, WebP, QOI) thanks to Prevter's ImagePlus.
4+
- Add scaling size modes
5+
- Fixed a potential crash when other mods do stupid *** like deleting a node manually right after autoreleasing.
6+
- Fix LoadingLayer not being modified
7+
18
# 2.0.7
29
- Fix a crash
310

mod.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"mac": "2.2074",
77
"ios": "2.2074"
88
},
9-
"version": "v2.0.7",
9+
"version": "v2.0.8",
1010
"id": "alphalaneous.happy_textures",
1111
"name": "Happy Textures :3",
1212
"developer": "Alphalaneous",
@@ -15,6 +15,7 @@
1515
"dependencies": {
1616
"geode.node-ids": ">=v1.15.0",
1717
"alphalaneous.alphas_geode_utils": ">=v1.1.8",
18+
"prevter.imageplus": ">=v1.0.0",
1819
"geode.texture-loader": {
1920
"importance": "suggested",
2021
"version": ">=v1.7.0"

src/LateQueue.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22

33
LateQueue* LateQueue::instance = nullptr;
44

5-
void LateQueue::queue(ScheduledFunction&& func) {
6-
m_mainThreadQueue.push_back(std::move(func));
5+
void LateQueue::queue(CCObject* node, ScheduledFunction&& func) {
6+
m_mainThreadQueue[node].push_back(std::move(func));
7+
}
8+
9+
void LateQueue::remove(CCObject* node) {
10+
m_mainThreadQueue.erase(node);
711
}
812

913
void LateQueue::executeQueue() {
10-
for (auto const& func : m_mainThreadQueue) {
11-
if (func) func();
14+
for (auto const& [k, v] : m_mainThreadQueue) {
15+
for (auto const& func : v) {
16+
if (func) func();
17+
}
1218
}
1319
m_mainThreadQueue.clear();
1420
}

src/LateQueue.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ class LateQueue {
99
protected:
1010
static LateQueue* instance;
1111
public:
12-
std::vector<ScheduledFunction> m_mainThreadQueue;
12+
std::unordered_map<CCObject*, std::vector<ScheduledFunction>> m_mainThreadQueue;
1313

14-
void queue(ScheduledFunction&& func);
14+
void queue(CCObject* node, ScheduledFunction&& func);
15+
void remove(CCObject* node);
1516
void executeQueue();
1617
static LateQueue* get();
1718
};

src/NodeModding.hpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <Geode/modify/CCDictionary.hpp>
77
#include "UIModding.hpp"
88
#include "nodes/CCNode.hpp"
9+
#include <alphalaneous.alphas_geode_utils/include/NodeModding.h>
910
#include "Utils.hpp"
1011
#include "Macros.hpp"
1112
#include "LateQueue.hpp"
@@ -36,16 +37,13 @@ class $modify(CCObject) {
3637

3738
if (MyCCNode* node = static_cast<MyCCNode*>(typeinfo_cast<CCNode*>(this))) {
3839
if (!node->isModified()) {
39-
const std::string& className = AlphaUtils::Cocos::getClassName(node, true);
40-
node->retain();
41-
LateQueue::get()->queue([modding, node, className] {
40+
LateQueue::get()->queue(node, [modding, node] {
41+
std::string className = AlphaUtils::Cocos::getClassName(node, true);
4242
modding->doUICheckForType(className, node);
4343
node->setModified();
44-
node->release();
4544
});
4645
}
4746
}
48-
4947
return CCObject::autorelease();
5048
}
5149
};
@@ -55,4 +53,10 @@ class $modify(CCPoolManager) {
5553
LateQueue::get()->executeQueue();
5654
CCPoolManager::pop();
5755
}
56+
57+
void removeObject(CCObject* pObject) {
58+
LateQueue::get()->remove(pObject);
59+
CCPoolManager::removeObject(pObject);
60+
}
61+
5862
};

0 commit comments

Comments
 (0)