Add Bitmap.next_frame + Bitmap.previous_frame

This commit is contained in:
Struma 2021-05-02 21:53:55 -04:00 committed by Roza
parent 171147d4d0
commit 380bd1d249
3 changed files with 61 additions and 1 deletions

View file

@ -581,6 +581,30 @@ RB_METHOD(bitmapRemoveFrame){
return RUBY_Qnil;
}
RB_METHOD(bitmapNextFrame){
RB_UNUSED_PARAM;
rb_check_argc(argc, 0);
Bitmap *b = getPrivateData<Bitmap>(self);
b->nextFrame();
return INT2NUM(b->currentFrameI());
}
RB_METHOD(bitmapPreviousFrame){
RB_UNUSED_PARAM;
rb_check_argc(argc, 0);
Bitmap *b = getPrivateData<Bitmap>(self);
b->previousFrame();
return INT2NUM(b->currentFrameI());
}
RB_METHOD(bitmapSetFPS){
RB_UNUSED_PARAM;
@ -705,6 +729,8 @@ void bitmapBindingInit() {
_rb_define_method(klass, "current_frame", bitmapCurrentFrame);
_rb_define_method(klass, "add_frame", bitmapAddFrame);
_rb_define_method(klass, "remove_frame", bitmapRemoveFrame);
_rb_define_method(klass, "next_frame", bitmapNextFrame);
_rb_define_method(klass, "previous_frame", bitmapPreviousFrame);
_rb_define_method(klass, "frame_rate", bitmapGetFPS);
_rb_define_method(klass, "frame_rate=", bitmapSetFPS);
_rb_define_method(klass, "looping", bitmapGetLooping);

View file

@ -1883,6 +1883,38 @@ void Bitmap::removeFrame(int position) {
}
}
void Bitmap::nextFrame()
{
GUARD_UNANIMATED;
stop();
if (p->animation.lastFrame >= p->animation.frames.size() - 1) {
if (!p->animation.loop) return;
p->animation.lastFrame = 0;
return;
}
p->animation.lastFrame++;
}
void Bitmap::previousFrame()
{
GUARD_UNANIMATED;
stop();
if (p->animation.lastFrame <= 0) {
if (!p->animation.loop) {
p->animation.lastFrame = 0;
return;
}
p->animation.lastFrame = p->animation.frames.size() - 1;
return;
}
p->animation.lastFrame--;
}
void Bitmap::setAnimationFPS(float FPS)
{
GUARD_MEGA;

View file

@ -130,9 +130,11 @@ public:
int currentFrameI() const;
int addFrame(Bitmap &source, int position = -1);
void removeFrame(int position = -1);
void nextFrame();
void previousFrame();
void setAnimationFPS(float FPS);
float getAnimationFPS();