Skip to content

Support for AnimationTimer #7

@danielkroeni

Description

@danielkroeni

In order to use javafx.animation.AnimationTimer you have to subclass it and override its handle method. This is not an option if you want to use it directly from frege. So I implemented a 'builder' where you can just pass the function you want to be called on every frame:

data AnimationTimerBuilder = mutable native graphics.AnimationTimerBuilder where
   native from graphics.AnimationTimerBuilder.from :: (Long -> IO ()) -> IO AnimationTimer
import javafx.animation.AnimationTimer;
import frege.prelude.PreludeBase;
import frege.runtime.Lambda;

public class AnimationTimerBuilder {
  public static AnimationTimer from(Lambda handler) {
    return new AnimationTimer() {
      @Override
      public void handle(long arg0) {
        frege.runtime.Delayed.<java.lang.Void>forced(
          PreludeBase.TST.performUnsafe(handler.apply(arg0).result().forced())
        );
      }
    };
  }
}

Now you can use it like this:

do animTimer <- AnimationTimerBuilder.from $ \time -> do
  println "Hi" 
  println time

animTimer.start

If you could add something similar to your fx utils module, I could drop my version.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions