Search code examples
haskellsdlreactive-banana

Full Click/KeyPress Event with Reactive-banana and SDL


A full click event is a button down and up, without mouse motion, as far as I know. SDL only gives me Button Up and Down events.

Does reactive-banana have any way to express "key down and then key up"?

Incidentally, if I want to have an event that says "key still down", I have to enable SDL's enableKeyRepeat so the keyDown event is fired again. How would that be expressed correctly in FRP?


Solution

  • I'd try something like this:

    Define a utility function (untested):

    successive :: (a -> a -> Maybe b) -> Event t a -> Event t b
    successive f e = filterJust (b <@> e)
      where b = stepper (const Nothing) (f <$> e)
    

    and then use something like

    successive (\previous current -> if previous == buttonDown && current == buttonUp
                                       then Just ()
                                       else Nothing)
               buttonEvents
    

    (pseudo-code because I'm not familiar with SDL).

    This should work because behaviours update fractionally after events fire.