mirror of
https://github.com/unisonweb/unison.git
synced 2024-09-27 02:07:14 +03:00
Using common movement manipulation functions
This commit is contained in:
parent
26b66e9752
commit
66602c9dd7
@ -123,6 +123,9 @@ toggle s =
|
||||
let t = lift (always True) s
|
||||
in xor <~ t ~ delay False t
|
||||
|
||||
tuple2 : Signal a -> Signal b -> Signal (a,b)
|
||||
tuple2 s s2 = (,) <~ s ~ s2
|
||||
|
||||
{-| Spikes `False` for one tick when `a` event fires, otherwise is `True`. -}
|
||||
unchanged : Signal a -> Signal Bool
|
||||
unchanged a = lift not (changed a)
|
||||
|
@ -72,20 +72,12 @@ full = E.Lit (E.Distance (Distance.Fraction 1.0))
|
||||
|
||||
resolvedPath : Signal E.Term -> Signal (Maybe Path) -> Signal (Maybe Scope)
|
||||
resolvedPath e pathUnderPtr =
|
||||
let nonzero {x,y} = x /= 0 || y /= 0
|
||||
edit {x,y} e =
|
||||
(if y == 1 then Scope.up else identity) >>
|
||||
(if y == -1 then Scope.down e else identity) >>
|
||||
(if x == 1 then Scope.right e else identity) >>
|
||||
(if x == -1 then Scope.left e else identity)
|
||||
edits = edit <~ Signals.repeatAfterIf (300*millisecond) 20 nonzero Keyboard.arrows ~ e
|
||||
defaultScope = lift (Maybe.map Scope.scope) pathUnderPtr
|
||||
shifted = Signals.foldpBetween'
|
||||
Mouse.position
|
||||
(\edit p -> Maybe.map edit p)
|
||||
defaultScope
|
||||
edits
|
||||
in Signals.fromMaybe defaultScope shifted
|
||||
let defaultScope = lift (Maybe.map Scope.scope) pathUnderPtr
|
||||
shifted = Movement.moveD2 Scope.movements
|
||||
Mouse.position
|
||||
(Signals.tuple2 e defaultScope)
|
||||
(Movement.repeatD2 (Movement.d2' Keyboard.arrows))
|
||||
in Signals.fromMaybe defaultScope (Maybe.map snd <~ shifted)
|
||||
|
||||
terms : Signal E.Term
|
||||
terms = constant expr
|
||||
|
@ -1,5 +1,6 @@
|
||||
module Unison.Scope where
|
||||
|
||||
import Maybe
|
||||
import Unison.Path as Path
|
||||
|
||||
import Unison.Term (Term)
|
||||
@ -36,3 +37,13 @@ right e {focus,ups,downs} =
|
||||
let p = Term.siblingR e focus
|
||||
in if p == focus then Scope focus ups downs
|
||||
else Scope p [] []
|
||||
|
||||
movements : { up : (Term, Maybe Scope) -> (Term, Maybe Scope)
|
||||
, down : (Term, Maybe Scope) -> (Term, Maybe Scope)
|
||||
, left : (Term, Maybe Scope) -> (Term, Maybe Scope)
|
||||
, right : (Term, Maybe Scope) -> (Term, Maybe Scope) }
|
||||
movements =
|
||||
{ up (e,s) = (e, Maybe.map up s)
|
||||
, down (e,s) = (e, Maybe.map (down e) s)
|
||||
, left (e,s) = (e, Maybe.map (left e) s)
|
||||
, right (e,s) = (e, Maybe.map (right e) s) }
|
||||
|
Loading…
Reference in New Issue
Block a user