Minor fix in gif delay calculation.

This commit is contained in:
Martín Lucas Golini
2024-11-24 17:15:08 -03:00
parent a90af486d0
commit ca25c6e1a9
4 changed files with 23 additions and 3 deletions

View File

@@ -1092,6 +1092,14 @@ std::pair<std::vector<Image>, int> Image::loadGif( IOStream& stream ) {
}
auto delay = delays[0];
if ( delay == 0 ) {
for ( int i = 0; i < frames; i++ ) {
if ( delays[i] != 0 ) {
delay = delays[i];
break;
}
}
}
free( data );
free( delays );
return { std::move( gif ), delay ? delay : 100 };

View File

@@ -717,11 +717,15 @@ Sizef Sprite::setSize( const unsigned int& FrameNum, const unsigned int& SubFram
}
Sizef Sprite::getSize() {
return mFrames[mCurrentFrame].Spr[mCurrentSubFrame]->getSize();
return mCurrentFrame < mFrames.size() && mCurrentSubFrame < mFrames[mCurrentFrame].Spr.size()
? mFrames[mCurrentFrame].Spr[mCurrentSubFrame]->getSize()
: Sizef::Zero;
}
Sizef Sprite::getPixelsSize() {
return mFrames[mCurrentFrame].Spr[mCurrentSubFrame]->getPixelsSize();
return mCurrentFrame < mFrames.size() && mCurrentSubFrame < mFrames[mCurrentFrame].Spr.size()
? mFrames[mCurrentFrame].Spr[mCurrentSubFrame]->getPixelsSize()
: Sizef::Zero;
}
void Sprite::setRepetitions( const int& Repeations ) {

View File

@@ -980,6 +980,14 @@ std::pair<std::vector<Texture*>, int> Texture::loadGif( IOStream& stream ) {
}
auto delay = delays[0];
if ( delay == 0 ) {
for ( int i = 0; i < frames; i++ ) {
if ( delays[i] != 0 ) {
delay = delays[i];
break;
}
}
}
free( data );
free( delays );
return { std::move( gif ), delay ? delay : 100 };