{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RecursiveDo #-}
module Potato.Flow.Reflex.GoatWidget (
GoatWidgetConfig(..)
, emptyGoatWidgetConfig
, GoatWidget(..)
, holdGoatWidget
) where
import Relude
import Reflex
import Potato.Flow.BroadPhase
import Potato.Flow.Controller.Goat
import Potato.Flow.Controller.Handler
import Potato.Flow.Controller.Input
import Potato.Flow.Controller.OwlLayers
import Potato.Flow.Controller.Types
import Potato.Flow.Llama
import Potato.Flow.Math
import Potato.Flow.OwlState
import Potato.Flow.OwlWorkspace
import Potato.Flow.Render
import Potato.Flow.Types
import Control.Monad.Fix
data GoatWidgetConfig t = GoatWidgetConfig {
forall t. GoatWidgetConfig t -> (OwlPFState, ControllerMeta)
_goatWidgetConfig_initialState :: (OwlPFState, ControllerMeta)
, forall t. GoatWidgetConfig t -> Maybe UnicodeWidthFn
_goatWidgetConfig_unicodeWidthFn :: Maybe UnicodeWidthFn
, forall t. GoatWidgetConfig t -> Event t LMouseData
_goatWidgetConfig_mouse :: Event t LMouseData
, forall t. GoatWidgetConfig t -> Event t KeyboardData
_goatWidgetConfig_keyboard :: Event t KeyboardData
, forall t. GoatWidgetConfig t -> Event t XY
_goatWidgetConfig_canvasRegionDim :: Event t XY
, forall t. GoatWidgetConfig t -> Event t Tool
_goatWidgetConfig_selectTool :: Event t Tool
, forall t. GoatWidgetConfig t -> Event t EverythingLoadState
_goatWidgetConfig_load :: Event t EverythingLoadState
, forall t. GoatWidgetConfig t -> Event t Llama
_goatWidgetConfig_paramsEvent :: Event t Llama
, forall t. GoatWidgetConfig t -> Event t XY
_goatWidgetConfig_canvasSize :: Event t XY
, forall t. GoatWidgetConfig t -> Event t ()
_goatWidgetConfig_newFolder :: Event t ()
, forall t. GoatWidgetConfig t -> Event t SetPotatoDefaultParameters
_goatWidgetConfig_setPotatoDefaultParameters :: Event t SetPotatoDefaultParameters
, forall t. GoatWidgetConfig t -> Event t ()
_goatWidgetConfig_markSaved :: Event t ()
, forall t. GoatWidgetConfig t -> Event t GoatFocusedArea
_goatWidgetConfig_setFocusedArea :: Event t GoatFocusedArea
, forall t. GoatWidgetConfig t -> Event t Text
_goatWidgetConfig_setDebugLabel :: Event t Text
, forall t. GoatWidgetConfig t -> Event t WSEvent
_goatWidgetConfig_bypassEvent :: Event t WSEvent
}
emptyGoatWidgetConfig :: (Reflex t) => GoatWidgetConfig t
emptyGoatWidgetConfig :: forall t. Reflex t => GoatWidgetConfig t
emptyGoatWidgetConfig = GoatWidgetConfig {
_goatWidgetConfig_initialState :: (OwlPFState, ControllerMeta)
_goatWidgetConfig_initialState = (OwlPFState
emptyOwlPFState, ControllerMeta
emptyControllerMeta)
, _goatWidgetConfig_selectTool :: Event t Tool
_goatWidgetConfig_selectTool = Event t Tool
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_load :: Event t EverythingLoadState
_goatWidgetConfig_load = Event t EverythingLoadState
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_mouse :: Event t LMouseData
_goatWidgetConfig_mouse = Event t LMouseData
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_keyboard :: Event t KeyboardData
_goatWidgetConfig_keyboard = Event t KeyboardData
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_paramsEvent :: Event t Llama
_goatWidgetConfig_paramsEvent = Event t Llama
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_unicodeWidthFn :: Maybe UnicodeWidthFn
_goatWidgetConfig_unicodeWidthFn = Maybe UnicodeWidthFn
forall a. Maybe a
Nothing
, _goatWidgetConfig_canvasRegionDim :: Event t XY
_goatWidgetConfig_canvasRegionDim = Event t XY
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_canvasSize :: Event t XY
_goatWidgetConfig_canvasSize = Event t XY
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_newFolder :: Event t ()
_goatWidgetConfig_newFolder = Event t ()
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_setPotatoDefaultParameters :: Event t SetPotatoDefaultParameters
_goatWidgetConfig_setPotatoDefaultParameters = Event t SetPotatoDefaultParameters
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_markSaved :: Event t ()
_goatWidgetConfig_markSaved = Event t ()
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_setFocusedArea :: Event t GoatFocusedArea
_goatWidgetConfig_setFocusedArea = Event t GoatFocusedArea
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_setDebugLabel :: Event t Text
_goatWidgetConfig_setDebugLabel = Event t Text
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
, _goatWidgetConfig_bypassEvent :: Event t WSEvent
_goatWidgetConfig_bypassEvent = Event t WSEvent
forall a. Event t a
forall {k} (t :: k) a. Reflex t => Event t a
never
}
data GoatWidget t = GoatWidget {
forall t. GoatWidget t -> Dynamic t Tool
_goatWidget_tool :: Dynamic t Tool
, forall t. GoatWidget t -> Dynamic t Selection
_goatWidget_selection :: Dynamic t Selection
, forall t. GoatWidget t -> Dynamic t PotatoDefaultParameters
_goatWidget_potatoDefaultParameters :: Dynamic t PotatoDefaultParameters
, forall t. GoatWidget t -> Dynamic t LayersState
_goatWidget_layers :: Dynamic t LayersState
, forall t. GoatWidget t -> Dynamic t XY
_goatWidget_pan :: Dynamic t XY
, forall t. GoatWidget t -> Dynamic t BroadPhaseState
_goatWidget_broadPhase :: Dynamic t BroadPhaseState
, forall t. GoatWidget t -> Dynamic t HandlerRenderOutput
_goatWidget_handlerRenderOutput :: Dynamic t HandlerRenderOutput
, forall t. GoatWidget t -> Dynamic t LayersViewHandlerRenderOutput
_goatWidget_layersHandlerRenderOutput :: Dynamic t LayersViewHandlerRenderOutput
, forall t. GoatWidget t -> Dynamic t SCanvas
_goatWidget_canvas :: Dynamic t SCanvas
, forall t. GoatWidget t -> Dynamic t RenderedCanvasRegion
_goatWidget_renderedCanvas :: Dynamic t RenderedCanvasRegion
, forall t. GoatWidget t -> Dynamic t RenderedCanvasRegion
_goatWidget_renderedSelection :: Dynamic t RenderedCanvasRegion
, forall t. GoatWidget t -> Dynamic t Bool
_goatWidget_unsavedChanges :: Dynamic t Bool
, forall t. GoatWidget t -> Dynamic t GoatState
_goatWidget_DEBUG_goatState :: Dynamic t GoatState
}
holdGoatWidget :: forall t m. (Adjustable t m, MonadHold t m, MonadFix m)
=> GoatWidgetConfig t
-> m (GoatWidget t)
holdGoatWidget :: forall t (m :: * -> *).
(Adjustable t m, MonadHold t m, MonadFix m) =>
GoatWidgetConfig t -> m (GoatWidget t)
holdGoatWidget GoatWidgetConfig {Maybe UnicodeWidthFn
(OwlPFState, ControllerMeta)
Event t ()
Event t EverythingLoadState
Event t Text
Event t XY
Event t LMouseData
Event t KeyboardData
Event t Llama
Event t WSEvent
Event t SetPotatoDefaultParameters
Event t Tool
Event t GoatFocusedArea
_goatWidgetConfig_initialState :: forall t. GoatWidgetConfig t -> (OwlPFState, ControllerMeta)
_goatWidgetConfig_unicodeWidthFn :: forall t. GoatWidgetConfig t -> Maybe UnicodeWidthFn
_goatWidgetConfig_mouse :: forall t. GoatWidgetConfig t -> Event t LMouseData
_goatWidgetConfig_keyboard :: forall t. GoatWidgetConfig t -> Event t KeyboardData
_goatWidgetConfig_canvasRegionDim :: forall t. GoatWidgetConfig t -> Event t XY
_goatWidgetConfig_selectTool :: forall t. GoatWidgetConfig t -> Event t Tool
_goatWidgetConfig_load :: forall t. GoatWidgetConfig t -> Event t EverythingLoadState
_goatWidgetConfig_paramsEvent :: forall t. GoatWidgetConfig t -> Event t Llama
_goatWidgetConfig_canvasSize :: forall t. GoatWidgetConfig t -> Event t XY
_goatWidgetConfig_newFolder :: forall t. GoatWidgetConfig t -> Event t ()
_goatWidgetConfig_setPotatoDefaultParameters :: forall t. GoatWidgetConfig t -> Event t SetPotatoDefaultParameters
_goatWidgetConfig_markSaved :: forall t. GoatWidgetConfig t -> Event t ()
_goatWidgetConfig_setFocusedArea :: forall t. GoatWidgetConfig t -> Event t GoatFocusedArea
_goatWidgetConfig_setDebugLabel :: forall t. GoatWidgetConfig t -> Event t Text
_goatWidgetConfig_bypassEvent :: forall t. GoatWidgetConfig t -> Event t WSEvent
_goatWidgetConfig_initialState :: (OwlPFState, ControllerMeta)
_goatWidgetConfig_unicodeWidthFn :: Maybe UnicodeWidthFn
_goatWidgetConfig_mouse :: Event t LMouseData
_goatWidgetConfig_keyboard :: Event t KeyboardData
_goatWidgetConfig_canvasRegionDim :: Event t XY
_goatWidgetConfig_selectTool :: Event t Tool
_goatWidgetConfig_load :: Event t EverythingLoadState
_goatWidgetConfig_paramsEvent :: Event t Llama
_goatWidgetConfig_canvasSize :: Event t XY
_goatWidgetConfig_newFolder :: Event t ()
_goatWidgetConfig_setPotatoDefaultParameters :: Event t SetPotatoDefaultParameters
_goatWidgetConfig_markSaved :: Event t ()
_goatWidgetConfig_setFocusedArea :: Event t GoatFocusedArea
_goatWidgetConfig_setDebugLabel :: Event t Text
_goatWidgetConfig_bypassEvent :: Event t WSEvent
..} = mdo
let
initialscreensize :: XY
initialscreensize = XY
0
initialgoat :: GoatState
initialgoat = XY -> (OwlPFState, ControllerMeta) -> GoatState
makeGoatState XY
initialscreensize (OwlPFState, ControllerMeta)
_goatWidgetConfig_initialState
endoStyle :: [Event t (GoatState -> GoatState)]
endoStyle = [
(SetPotatoDefaultParameters -> GoatState -> GoatState)
-> Event t SetPotatoDefaultParameters
-> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SetPotatoDefaultParameters -> GoatState -> GoatState
endoGoatCmdSetDefaultParams Event t SetPotatoDefaultParameters
_goatWidgetConfig_setPotatoDefaultParameters
, (() -> GoatState -> GoatState)
-> Event t () -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap () -> GoatState -> GoatState
endoGoatCmdMarkSaved Event t ()
_goatWidgetConfig_markSaved
, (Tool -> GoatState -> GoatState)
-> Event t Tool -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tool -> GoatState -> GoatState
endoGoatCmdSetTool Event t Tool
_goatWidgetConfig_selectTool
, (Text -> GoatState -> GoatState)
-> Event t Text -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> GoatState -> GoatState
endoGoatCmdSetDebugLabel Event t Text
_goatWidgetConfig_setDebugLabel
, (XY -> GoatState -> GoatState)
-> Event t XY -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap XY -> GoatState -> GoatState
endoGoatCmdSetCanvasRegionDim Event t XY
_goatWidgetConfig_canvasRegionDim
, (EverythingLoadState -> GoatState -> GoatState)
-> Event t EverythingLoadState -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap EverythingLoadState -> GoatState -> GoatState
endoGoatCmdLoad Event t EverythingLoadState
_goatWidgetConfig_load
, (() -> GoatState -> GoatState)
-> Event t () -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\()
_ -> Text -> GoatState -> GoatState
endoGoatCmdNewFolder Text
"folder") Event t ()
_goatWidgetConfig_newFolder
, (WSEvent -> GoatState -> GoatState)
-> Event t WSEvent -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WSEvent -> GoatState -> GoatState
endoGoatCmdWSEvent Event t WSEvent
_goatWidgetConfig_bypassEvent
, (LMouseData -> GoatState -> GoatState)
-> Event t LMouseData -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap LMouseData -> GoatState -> GoatState
endoGoatCmdMouse Event t LMouseData
_goatWidgetConfig_mouse
, (KeyboardData -> GoatState -> GoatState)
-> Event t KeyboardData -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap KeyboardData -> GoatState -> GoatState
endoGoatCmdKeyboard Event t KeyboardData
_goatWidgetConfig_keyboard
, (GoatFocusedArea -> GoatState -> GoatState)
-> Event t GoatFocusedArea -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatFocusedArea -> GoatState -> GoatState
endoGoatCmdSetFocusedArea Event t GoatFocusedArea
_goatWidgetConfig_setFocusedArea
, (WSEvent -> GoatState -> GoatState)
-> Event t WSEvent -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WSEvent -> GoatState -> GoatState
endoGoatCmdWSEvent (Event t WSEvent -> Event t (GoatState -> GoatState))
-> Event t WSEvent -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> a -> b
$ Event t Llama -> (Llama -> WSEvent) -> Event t WSEvent
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
ffor Event t Llama
_goatWidgetConfig_paramsEvent ((Llama -> WSEvent) -> Event t WSEvent)
-> (Llama -> WSEvent) -> Event t WSEvent
forall a b. (a -> b) -> a -> b
$ \Llama
llama -> (Bool, Llama) -> WSEvent
WSEApplyLlama (Bool
False, Llama
llama)
, (WSEvent -> GoatState -> GoatState)
-> Event t WSEvent -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WSEvent -> GoatState -> GoatState
endoGoatCmdWSEvent (Event t WSEvent -> Event t (GoatState -> GoatState))
-> Event t WSEvent -> Event t (GoatState -> GoatState)
forall a b. (a -> b) -> a -> b
$ Event t XY -> (XY -> WSEvent) -> Event t WSEvent
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
ffor Event t XY
_goatWidgetConfig_canvasSize ((XY -> WSEvent) -> Event t WSEvent)
-> (XY -> WSEvent) -> Event t WSEvent
forall a b. (a -> b) -> a -> b
$ \XY
xy -> (Bool, Llama) -> WSEvent
WSEApplyLlama (Bool
False, OwlPFCmd -> Llama
makePFCLlama (OwlPFCmd -> Llama) -> OwlPFCmd -> Llama
forall a b. (a -> b) -> a -> b
$ DeltaLBox -> OwlPFCmd
OwlPFCResizeCanvas (XY -> XY -> DeltaLBox
DeltaLBox XY
0 XY
xy))
]
Dynamic t GoatState
goatDyn' :: Dynamic t GoatState
<- ((GoatState -> GoatState) -> GoatState -> GoatState)
-> GoatState
-> Event t (GoatState -> GoatState)
-> m (Dynamic t GoatState)
forall {k} (t :: k) (m :: * -> *) a b.
(Reflex t, MonadHold t m, MonadFix m) =>
(a -> b -> b) -> b -> Event t a -> m (Dynamic t b)
foldDyn (GoatState -> GoatState) -> GoatState -> GoatState
forall a b. (a -> b) -> a -> b
($) GoatState
initialgoat (Event t (GoatState -> GoatState) -> m (Dynamic t GoatState))
-> Event t (GoatState -> GoatState) -> m (Dynamic t GoatState)
forall a b. (a -> b) -> a -> b
$ ((GoatState -> GoatState)
-> (GoatState -> GoatState) -> GoatState -> GoatState)
-> [Event t (GoatState -> GoatState)]
-> Event t (GoatState -> GoatState)
forall {k} (t :: k) a.
Reflex t =>
(a -> a -> a) -> [Event t a] -> Event t a
mergeWith (GoatState -> GoatState)
-> (GoatState -> GoatState) -> GoatState -> GoatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) [Event t (GoatState -> GoatState)]
endoStyle
let goatDyn :: Dynamic t GoatState
goatDyn = (GoatState -> GoatState)
-> Dynamic t GoatState -> Dynamic t GoatState
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> GoatState
forall a. a -> a
id Dynamic t GoatState
goatDyn'
Dynamic t Tool
r_tool <- Dynamic t Tool -> m (Dynamic t Tool)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t Tool -> m (Dynamic t Tool))
-> Dynamic t Tool -> m (Dynamic t Tool)
forall a b. (a -> b) -> a -> b
$ (GoatState -> Tool) -> Dynamic t GoatState -> Dynamic t Tool
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> Tool
goatState_selectedTool Dynamic t GoatState
goatDyn
Dynamic t Selection
r_selection <- Dynamic t Selection -> m (Dynamic t Selection)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t Selection -> m (Dynamic t Selection))
-> Dynamic t Selection -> m (Dynamic t Selection)
forall a b. (a -> b) -> a -> b
$ (GoatState -> Selection)
-> Dynamic t GoatState -> Dynamic t Selection
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> Selection
_goatState_selection Dynamic t GoatState
goatDyn
Dynamic t PotatoDefaultParameters
r_potatoDefaultParams <- Dynamic t PotatoDefaultParameters
-> m (Dynamic t PotatoDefaultParameters)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t PotatoDefaultParameters
-> m (Dynamic t PotatoDefaultParameters))
-> Dynamic t PotatoDefaultParameters
-> m (Dynamic t PotatoDefaultParameters)
forall a b. (a -> b) -> a -> b
$ (GoatState -> PotatoDefaultParameters)
-> Dynamic t GoatState -> Dynamic t PotatoDefaultParameters
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> PotatoDefaultParameters
_goatState_potatoDefaultParameters Dynamic t GoatState
goatDyn
Dynamic t BroadPhaseState
r_broadphase <- Dynamic t BroadPhaseState -> m (Dynamic t BroadPhaseState)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t BroadPhaseState -> m (Dynamic t BroadPhaseState))
-> Dynamic t BroadPhaseState -> m (Dynamic t BroadPhaseState)
forall a b. (a -> b) -> a -> b
$ (GoatState -> BroadPhaseState)
-> Dynamic t GoatState -> Dynamic t BroadPhaseState
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> BroadPhaseState
_goatState_broadPhaseState Dynamic t GoatState
goatDyn
Dynamic t XY
r_pan <- Dynamic t XY -> m (Dynamic t XY)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t XY -> m (Dynamic t XY))
-> Dynamic t XY -> m (Dynamic t XY)
forall a b. (a -> b) -> a -> b
$ (GoatState -> XY) -> Dynamic t GoatState -> Dynamic t XY
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> XY
_goatState_pan Dynamic t GoatState
goatDyn
Dynamic t LayersState
r_layers <- Dynamic t LayersState -> m (Dynamic t LayersState)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t LayersState -> m (Dynamic t LayersState))
-> Dynamic t LayersState -> m (Dynamic t LayersState)
forall a b. (a -> b) -> a -> b
$ (GoatState -> LayersState)
-> Dynamic t GoatState -> Dynamic t LayersState
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> LayersState
_goatState_layersState Dynamic t GoatState
goatDyn
Dynamic t HandlerRenderOutput
r_handlerRenderOutput <- Dynamic t HandlerRenderOutput -> m (Dynamic t HandlerRenderOutput)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t HandlerRenderOutput
-> m (Dynamic t HandlerRenderOutput))
-> Dynamic t HandlerRenderOutput
-> m (Dynamic t HandlerRenderOutput)
forall a b. (a -> b) -> a -> b
$ (GoatState -> HandlerRenderOutput)
-> Dynamic t GoatState -> Dynamic t HandlerRenderOutput
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\GoatState
gs -> SomePotatoHandler -> PotatoHandlerInput -> HandlerRenderOutput
forall h.
PotatoHandler h =>
h -> PotatoHandlerInput -> HandlerRenderOutput
pRenderHandler (GoatState -> SomePotatoHandler
_goatState_handler GoatState
gs) (GoatState -> PotatoHandlerInput
potatoHandlerInputFromGoatState GoatState
gs)) Dynamic t GoatState
goatDyn
Dynamic t LayersViewHandlerRenderOutput
r_layersHandlerRenderOutput <- Dynamic t LayersViewHandlerRenderOutput
-> m (Dynamic t LayersViewHandlerRenderOutput)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t LayersViewHandlerRenderOutput
-> m (Dynamic t LayersViewHandlerRenderOutput))
-> Dynamic t LayersViewHandlerRenderOutput
-> m (Dynamic t LayersViewHandlerRenderOutput)
forall a b. (a -> b) -> a -> b
$ (GoatState -> LayersViewHandlerRenderOutput)
-> Dynamic t GoatState -> Dynamic t LayersViewHandlerRenderOutput
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\GoatState
gs -> SomePotatoHandler
-> PotatoHandlerInput -> LayersViewHandlerRenderOutput
forall h.
PotatoHandler h =>
h -> PotatoHandlerInput -> LayersViewHandlerRenderOutput
pRenderLayersHandler (GoatState -> SomePotatoHandler
_goatState_layersHandler GoatState
gs) (GoatState -> PotatoHandlerInput
potatoHandlerInputFromGoatState GoatState
gs)) Dynamic t GoatState
goatDyn
Dynamic t SCanvas
r_canvas <- Dynamic t SCanvas -> m (Dynamic t SCanvas)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t SCanvas -> m (Dynamic t SCanvas))
-> Dynamic t SCanvas -> m (Dynamic t SCanvas)
forall a b. (a -> b) -> a -> b
$ (GoatState -> SCanvas) -> Dynamic t GoatState -> Dynamic t SCanvas
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (OwlPFState -> SCanvas
_owlPFState_canvas (OwlPFState -> SCanvas)
-> (GoatState -> OwlPFState) -> GoatState -> SCanvas
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OwlPFWorkspace -> OwlPFState
_owlPFWorkspace_owlPFState (OwlPFWorkspace -> OwlPFState)
-> (GoatState -> OwlPFWorkspace) -> GoatState -> OwlPFState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GoatState -> OwlPFWorkspace
_goatState_workspace) Dynamic t GoatState
goatDyn
Dynamic t Bool
r_unsavedChanges <- Dynamic t Bool -> m (Dynamic t Bool)
forall {k} (t :: k) (m :: * -> *) a.
(Reflex t, MonadHold t m, MonadFix m, Eq a) =>
Dynamic t a -> m (Dynamic t a)
holdUniqDyn (Dynamic t Bool -> m (Dynamic t Bool))
-> Dynamic t Bool -> m (Dynamic t Bool)
forall a b. (a -> b) -> a -> b
$ (GoatState -> Bool) -> Dynamic t GoatState -> Dynamic t Bool
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (GoatState -> Bool
goatState_hasUnsavedChanges) Dynamic t GoatState
goatDyn
let
r_renderedCanvas :: Dynamic t RenderedCanvasRegion
r_renderedCanvas = (GoatState -> RenderedCanvasRegion)
-> Dynamic t GoatState -> Dynamic t RenderedCanvasRegion
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> RenderedCanvasRegion
_goatState_renderedCanvas Dynamic t GoatState
goatDyn
r_renderedSelection :: Dynamic t RenderedCanvasRegion
r_renderedSelection = (GoatState -> RenderedCanvasRegion)
-> Dynamic t GoatState -> Dynamic t RenderedCanvasRegion
forall a b. (a -> b) -> Dynamic t a -> Dynamic t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GoatState -> RenderedCanvasRegion
_goatState_renderedSelection Dynamic t GoatState
goatDyn
GoatWidget t -> m (GoatWidget t)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return GoatWidget
{
_goatWidget_tool :: Dynamic t Tool
_goatWidget_tool = Dynamic t Tool
r_tool
, _goatWidget_selection :: Dynamic t Selection
_goatWidget_selection = Dynamic t Selection
r_selection
, _goatWidget_potatoDefaultParameters :: Dynamic t PotatoDefaultParameters
_goatWidget_potatoDefaultParameters = Dynamic t PotatoDefaultParameters
r_potatoDefaultParams
, _goatWidget_layers :: Dynamic t LayersState
_goatWidget_layers = Dynamic t LayersState
r_layers
, _goatWidget_pan :: Dynamic t XY
_goatWidget_pan = Dynamic t XY
r_pan
, _goatWidget_broadPhase :: Dynamic t BroadPhaseState
_goatWidget_broadPhase = Dynamic t BroadPhaseState
r_broadphase
, _goatWidget_canvas :: Dynamic t SCanvas
_goatWidget_canvas = Dynamic t SCanvas
r_canvas
, _goatWidget_renderedCanvas :: Dynamic t RenderedCanvasRegion
_goatWidget_renderedCanvas = Dynamic t RenderedCanvasRegion
r_renderedCanvas
, _goatWidget_renderedSelection :: Dynamic t RenderedCanvasRegion
_goatWidget_renderedSelection = Dynamic t RenderedCanvasRegion
r_renderedSelection
, _goatWidget_handlerRenderOutput :: Dynamic t HandlerRenderOutput
_goatWidget_handlerRenderOutput = Dynamic t HandlerRenderOutput
r_handlerRenderOutput
, _goatWidget_layersHandlerRenderOutput :: Dynamic t LayersViewHandlerRenderOutput
_goatWidget_layersHandlerRenderOutput = Dynamic t LayersViewHandlerRenderOutput
r_layersHandlerRenderOutput
, _goatWidget_unsavedChanges :: Dynamic t Bool
_goatWidget_unsavedChanges = Dynamic t Bool
r_unsavedChanges
, _goatWidget_DEBUG_goatState :: Dynamic t GoatState
_goatWidget_DEBUG_goatState = Dynamic t GoatState
goatDyn
}