mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-22 15:37:53 -05:00
Merge branch 'main' of https://github.com/geode-sdk/geode into main
This commit is contained in:
commit
65a80c1057
3 changed files with 59 additions and 0 deletions
|
@ -401,6 +401,9 @@ namespace geode {
|
||||||
|
|
||||||
WeakRef(std::shared_ptr<WeakRefController> obj) : m_controller(obj) {}
|
WeakRef(std::shared_ptr<WeakRefController> obj) : m_controller(obj) {}
|
||||||
|
|
||||||
|
friend class std::hash<WeakRef<T>>;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Construct a WeakRef of an object. A weak reference is one that will
|
* Construct a WeakRef of an object. A weak reference is one that will
|
||||||
|
@ -713,6 +716,24 @@ namespace geode::cocos {
|
||||||
*/
|
*/
|
||||||
GEODE_DLL void limitNodeSize(cocos2d::CCNode* node, cocos2d::CCSize const& size, float def, float min);
|
GEODE_DLL void limitNodeSize(cocos2d::CCNode* node, cocos2d::CCSize const& size, float def, float min);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rescale node to fit inside given width
|
||||||
|
* @param node Node to rescale
|
||||||
|
* @param width Width to fit inside
|
||||||
|
* @param def Default scale
|
||||||
|
* @param min Minimum scale
|
||||||
|
*/
|
||||||
|
GEODE_DLL void limitNodeWidth(cocos2d::CCNode* node, float width, float def, float min);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rescale node to fit inside given height
|
||||||
|
* @param node Node to rescale
|
||||||
|
* @param height Height to fit inside
|
||||||
|
* @param def Default scale
|
||||||
|
* @param min Minimum scale
|
||||||
|
*/
|
||||||
|
GEODE_DLL void limitNodeHeight(cocos2d::CCNode* node, float height, float def, float min);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a node is visible (recursively
|
* Checks if a node is visible (recursively
|
||||||
* checks parent visibility)
|
* checks parent visibility)
|
||||||
|
@ -972,6 +993,13 @@ namespace std {
|
||||||
return std::hash<T*>()(ref.data());
|
return std::hash<T*>()(ref.data());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct std::hash<geode::WeakRef<T>> {
|
||||||
|
size_t operator()(geode::WeakRef<T> const& ref) const {
|
||||||
|
return hash{}(ref.m_controller);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// more utils
|
// more utils
|
||||||
|
|
|
@ -334,6 +334,8 @@ struct MDParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
float spriteScale = 1.0f;
|
float spriteScale = 1.0f;
|
||||||
|
float spriteWidth = 0.0f;
|
||||||
|
float spriteHeight = 0.0f;
|
||||||
|
|
||||||
for (auto [key, value] : imgArguments) {
|
for (auto [key, value] : imgArguments) {
|
||||||
if (key == "scale") {
|
if (key == "scale") {
|
||||||
|
@ -342,6 +344,18 @@ struct MDParser {
|
||||||
spriteScale = *scaleRes;
|
spriteScale = *scaleRes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (key == "width") {
|
||||||
|
auto widthRes = utils::numFromString<float>(value);
|
||||||
|
if (widthRes) {
|
||||||
|
spriteWidth = *widthRes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (key == "height") {
|
||||||
|
auto heightRes = utils::numFromString<float>(value);
|
||||||
|
if (heightRes) {
|
||||||
|
spriteHeight = *heightRes;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (utils::string::startsWith(s_lastImage, "frame:")) {
|
if (utils::string::startsWith(s_lastImage, "frame:")) {
|
||||||
|
@ -357,6 +371,15 @@ struct MDParser {
|
||||||
}
|
}
|
||||||
if (spr && spr->getUserObject("geode.texture-loader/fallback") == nullptr) {
|
if (spr && spr->getUserObject("geode.texture-loader/fallback") == nullptr) {
|
||||||
spr->setScale(spriteScale);
|
spr->setScale(spriteScale);
|
||||||
|
if (spriteWidth > 0.0f && spriteHeight <= 0.0f) {
|
||||||
|
limitNodeWidth(spr, spriteWidth, 999.f, .1f);
|
||||||
|
}
|
||||||
|
else if (spriteHeight > 0.0f && spriteWidth <= 0.0f) {
|
||||||
|
limitNodeHeight(spr, spriteHeight, 999.f, .1f);
|
||||||
|
}
|
||||||
|
else if (spriteWidth > 0.0f && spriteHeight > 0.0f) {
|
||||||
|
limitNodeSize(spr, { spriteWidth, spriteHeight }, 999.f, .1f);
|
||||||
|
}
|
||||||
renderer->renderNode(spr);
|
renderer->renderNode(spr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -455,6 +455,14 @@ void geode::cocos::limitNodeSize(CCNode* spr, CCSize const& size, float def, flo
|
||||||
spr->setScale(clamp(std::min(size.height / spr->getContentHeight(), size.width / spr->getContentWidth()), min, def));
|
spr->setScale(clamp(std::min(size.height / spr->getContentHeight(), size.width / spr->getContentWidth()), min, def));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void geode::cocos::limitNodeWidth(CCNode* spr, float width, float def, float min) {
|
||||||
|
spr->setScale(clamp(width / spr->getContentSize().width, min, def));
|
||||||
|
}
|
||||||
|
|
||||||
|
void geode::cocos::limitNodeHeight(CCNode* spr, float height, float def, float min) {
|
||||||
|
spr->setScale(clamp(height / spr->getContentSize().height, min, def));
|
||||||
|
}
|
||||||
|
|
||||||
bool geode::cocos::nodeIsVisible(CCNode* node) {
|
bool geode::cocos::nodeIsVisible(CCNode* node) {
|
||||||
if (!node->isVisible()) {
|
if (!node->isVisible()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue