@@ -23,65 +23,31 @@ bool GYScreenshotPopup::setup(int const& layer) {
2323
2424 std::string URL = fmt::format (" https://raw.githubusercontent.com/OmgRod/Geodify/master/previews/{}Preview.png" , layerName);
2525
26- auto req = web::WebRequest ();
27- m_downloadListener.bind ([this ](web::WebTask::Event* e) {
28- if (auto res = e->getValue ()) {
29- if (!res->ok ()) {
30- log::error (" Failed to download image from URL." );
31- onDownloadFail ();
32- } else {
33- auto data = res->data ();
34- std::thread imageThread = std::thread ([data, this ]() {
35- m_image = new CCImage ();
36- m_image->autorelease ();
37- m_image->initWithImageData (const_cast <uint8_t *>(data.data ()), data.size ());
38- geode::Loader::get ()->queueInMainThread ([this ]() {
39- imageCreationFinished (m_image);
40- });
41- });
42- imageThread.detach ();
43- }
26+ CCSize spriteTargetSize{
27+ m_mainLayer->getContentSize ().width * 0 .75f ,
28+ m_mainLayer->getContentSize ().height * 0 .75f
29+ };
30+
31+ m_sprite = LazySprite::create (spriteTargetSize);
32+ m_sprite->setAutoResize (true );
33+ m_sprite->setLoadCallback ([this ](Result<> res) {
34+ if (!res) {
35+ log::error (" Failed to load image: {}" , res.unwrapErr ());
36+ onDownloadFail ();
4437 }
4538 });
46- m_downloadListener.setFilter (req.get (URL));
4739
48- return true ;
49- }
50-
51- void GYScreenshotPopup::imageCreationFinished (CCImage* image) {
52- CCTexture2D* texture = new CCTexture2D ();
53- texture->autorelease ();
54- texture->initWithImage (image);
55-
56- m_sprite = CCSprite::createWithTexture (texture);
57- if (m_sprite) {
58- auto maxWidth = m_mainLayer->getContentSize ().width * 0 .75f ;
59- auto maxHeight = m_mainLayer->getContentSize ().height * 0 .75f ;
60-
61- auto spriteWidth = m_sprite->getContentSize ().width ;
62- auto spriteHeight = m_sprite->getContentSize ().height ;
63-
64- float scale = std::min (maxWidth / spriteWidth, maxHeight / spriteHeight);
65- m_sprite->setScale (scale);
40+ m_sprite->loadFromUrl (URL);
41+ m_mainLayer->addChildAtPosition (m_sprite, Anchor::Center);
6642
67- m_mainLayer->addChildAtPosition (m_sprite, Anchor::Center);
68- }
43+ return true ;
6944}
7045
7146void GYScreenshotPopup::onDownloadFail () {
72- CCSprite* fallbackSprite = CCSprite::create (" noPreview.png" _spr);
73- if (fallbackSprite) {
74- auto maxWidth = m_mainLayer->getContentSize ().width * 0 .75f ;
75- auto maxHeight = m_mainLayer->getContentSize ().height * 0 .75f ;
76-
77- auto spriteWidth = fallbackSprite->getContentSize ().width ;
78- auto spriteHeight = fallbackSprite->getContentSize ().height ;
47+ if (!m_sprite) return ;
7948
80- float scale = std::min (maxWidth / spriteWidth, maxHeight / spriteHeight);
81- fallbackSprite->setScale (scale);
82-
83- m_mainLayer->addChildAtPosition (fallbackSprite, Anchor::Center);
84- }
49+ m_sprite->initWithSpriteFrameName (" noPreview.png" _spr);
50+ m_sprite->setScale (1 .0f );
8551}
8652
8753std::string GYScreenshotPopup::extractLastSegment (const std::string& input) {
@@ -102,4 +68,4 @@ GYScreenshotPopup* GYScreenshotPopup::create(int const& text) {
10268
10369 delete ret;
10470 return nullptr ;
105- }
71+ }
0 commit comments