mirror of
https://github.com/fjvallarino/monomer.git
synced 2024-09-20 00:09:02 +03:00
Handle scrolling based on offset instead of resize of children nodes
This commit is contained in:
parent
5a23225670
commit
99d6856ac3
10
app/Main.hs
10
app/Main.hs
@ -133,7 +133,7 @@ handleAppEvent wenv node model evt = case evt of
|
|||||||
_ -> []
|
_ -> []
|
||||||
|
|
||||||
buildUI :: WidgetEnv App AppEvent -> App -> WidgetNode App AppEvent
|
buildUI :: WidgetEnv App AppEvent -> App -> WidgetNode App AppEvent
|
||||||
buildUI wenv model = traceShow "Creating UI" widgetLV where
|
buildUI wenv model = traceShow "Creating UI" widgetTree where
|
||||||
widgetThemeSwitch = hstack [
|
widgetThemeSwitch = hstack [
|
||||||
label "Test",
|
label "Test",
|
||||||
themeSwitch (darkTheme & L.basic . L.labelStyle . L.bgColor ?~ red) (label "Test")
|
themeSwitch (darkTheme & L.basic . L.labelStyle . L.bgColor ?~ red) (label "Test")
|
||||||
@ -234,8 +234,8 @@ buildUI wenv model = traceShow "Creating UI" widgetLV where
|
|||||||
widgetLV = vstack [
|
widgetLV = vstack [
|
||||||
-- scroll $ vstack $ (\i -> box $ label ("Label: " <> showt i)) <$> [0..1000::Int]
|
-- scroll $ vstack $ (\i -> box $ label ("Label: " <> showt i)) <$> [0..1000::Int]
|
||||||
label "aaa"
|
label "aaa"
|
||||||
-- , listView dropdown1 items label
|
, listView dropdown1 items label `style` [height 300]
|
||||||
, scroll $ image "assets/images/pecans.jpg"
|
-- , scroll $ image "assets/images/pecans.jpg"
|
||||||
-- , dropdown_ dropdown1 items label label [maxHeight 200]
|
-- , dropdown_ dropdown1 items label label [maxHeight 200]
|
||||||
]
|
]
|
||||||
widgetWindow = vstack [
|
widgetWindow = vstack [
|
||||||
@ -377,12 +377,12 @@ buildUI wenv model = traceShow "Creating UI" widgetLV where
|
|||||||
label "Label 1234" `style` [bgColor darkGray]
|
label "Label 1234" `style` [bgColor darkGray]
|
||||||
] `style` [bgColor blue]
|
] `style` [bgColor blue]
|
||||||
] `style` [bgColor green],
|
] `style` [bgColor green],
|
||||||
label (model ^. dropdown1) `style` [bgColor lightBlue, textLeft],
|
|
||||||
textField textField1 `style` [bgColor lightBlue, textLeft],
|
|
||||||
hgrid [
|
hgrid [
|
||||||
label_ "This is a really long label used to check what I did works fine" [textMultiLine, textEllipsis],
|
label_ "This is a really long label used to check what I did works fine" [textMultiLine, textEllipsis],
|
||||||
label "Jj label" `hover` [textSize 40]
|
label "Jj label" `hover` [textSize 40]
|
||||||
] `hover` [bgColor red],
|
] `hover` [bgColor red],
|
||||||
|
label (model ^. dropdown1) `style` [bgColor lightBlue, textLeft],
|
||||||
|
textField textField1 `style` [bgColor lightBlue, textLeft],
|
||||||
hstack [
|
hstack [
|
||||||
scroll_ [] $ image_ "assets/images/pecans.jpg" [fitFill],
|
scroll_ [] $ image_ "assets/images/pecans.jpg" [fitFill],
|
||||||
scroll_ [] $ image_ "assets/images/pecans.jpg" [fitFill],
|
scroll_ [] $ image_ "assets/images/pecans.jpg" [fitFill],
|
||||||
|
@ -97,7 +97,7 @@ data AppEvent
|
|||||||
| InitApp
|
| InitApp
|
||||||
| DisposeApp
|
| DisposeApp
|
||||||
| ExitApp
|
| ExitApp
|
||||||
| ResizeApp (Rect, Rect)
|
| ResizeApp Rect
|
||||||
| CancelExitApp
|
| CancelExitApp
|
||||||
| MaxWindow
|
| MaxWindow
|
||||||
| MinWindow
|
| MinWindow
|
||||||
|
@ -29,7 +29,6 @@ nodeDesc level node = infoDesc (_wnInfo node) where
|
|||||||
infoDesc info =
|
infoDesc info =
|
||||||
spaces ++ "type: " ++ unWidgetType (_wniWidgetType info) ++ "\n" ++
|
spaces ++ "type: " ++ unWidgetType (_wniWidgetType info) ++ "\n" ++
|
||||||
spaces ++ "path: " ++ show (_wniPath info) ++ "\n" ++
|
spaces ++ "path: " ++ show (_wniPath info) ++ "\n" ++
|
||||||
spaces ++ "vp: " ++ rectDesc (_wniViewport info) ++ "\n" ++
|
|
||||||
spaces ++ "ra: " ++ rectDesc (_wniRenderArea info) ++ "\n" ++
|
spaces ++ "ra: " ++ rectDesc (_wniRenderArea info) ++ "\n" ++
|
||||||
spaces ++ "req: " ++ show (_wniSizeReqW info, _wniSizeReqH info) ++ "\n"
|
spaces ++ "req: " ++ show (_wniSizeReqW info, _wniSizeReqH info) ++ "\n"
|
||||||
rectDesc r = show (_rX r, _rY r, _rW r, _rH r)
|
rectDesc r = show (_rX r, _rY r, _rW r, _rH r)
|
||||||
@ -45,7 +44,6 @@ nodeInstDesc level node = infoDesc (_winInfo node) where
|
|||||||
infoDesc info =
|
infoDesc info =
|
||||||
spaces ++ "type: " ++ unWidgetType (_wniWidgetType info) ++ "\n" ++
|
spaces ++ "type: " ++ unWidgetType (_wniWidgetType info) ++ "\n" ++
|
||||||
spaces ++ "path: " ++ show (_wniPath info) ++ "\n" ++
|
spaces ++ "path: " ++ show (_wniPath info) ++ "\n" ++
|
||||||
spaces ++ "vp: " ++ rectDesc (_wniViewport info) ++ "\n" ++
|
|
||||||
spaces ++ "ra: " ++ rectDesc (_wniRenderArea info) ++ "\n" ++
|
spaces ++ "ra: " ++ rectDesc (_wniRenderArea info) ++ "\n" ++
|
||||||
spaces ++ "req: " ++ show (_wniSizeReqW info, _wniSizeReqH info) ++ "\n"
|
spaces ++ "req: " ++ show (_wniSizeReqW info, _wniSizeReqH info) ++ "\n"
|
||||||
rectDesc r = show (_rX r, _rY r, _rW r, _rH r)
|
rectDesc r = show (_rX r, _rY r, _rW r, _rH r)
|
||||||
|
@ -200,11 +200,7 @@ data WidgetNodeInfo =
|
|||||||
_wniVisible :: !Bool,
|
_wniVisible :: !Bool,
|
||||||
-- | Indicates whether the widget can receive focus
|
-- | Indicates whether the widget can receive focus
|
||||||
_wniFocusable :: !Bool,
|
_wniFocusable :: !Bool,
|
||||||
-- | The visible area of the screen assigned to the widget
|
|
||||||
_wniViewport :: !Rect,
|
|
||||||
-- | The area of the screen where the widget can draw
|
-- | The area of the screen where the widget can draw
|
||||||
-- | Usually equal to _wniViewport, but may be larger if the widget is
|
|
||||||
-- | wrapped in a scrollable container
|
|
||||||
_wniRenderArea :: !Rect,
|
_wniRenderArea :: !Rect,
|
||||||
-- | Style attributes of the widget instance
|
-- | Style attributes of the widget instance
|
||||||
_wniStyle :: Style
|
_wniStyle :: Style
|
||||||
@ -221,7 +217,6 @@ instance Default WidgetNodeInfo where
|
|||||||
_wniEnabled = True,
|
_wniEnabled = True,
|
||||||
_wniVisible = True,
|
_wniVisible = True,
|
||||||
_wniFocusable = False,
|
_wniFocusable = False,
|
||||||
_wniViewport = def,
|
|
||||||
_wniRenderArea = def,
|
_wniRenderArea = def,
|
||||||
_wniStyle = def
|
_wniStyle = def
|
||||||
}
|
}
|
||||||
@ -336,7 +331,6 @@ data Widget s e =
|
|||||||
widgetResize
|
widgetResize
|
||||||
:: WidgetEnv s e
|
:: WidgetEnv s e
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetResult s e,
|
-> WidgetResult s e,
|
||||||
-- | Renders the widget
|
-- | Renders the widget
|
||||||
|
@ -115,7 +115,7 @@ data AppConfig e = AppConfig {
|
|||||||
_apcInitEvent :: [e],
|
_apcInitEvent :: [e],
|
||||||
_apcDisposeEvent :: [e],
|
_apcDisposeEvent :: [e],
|
||||||
_apcExitEvent :: [e],
|
_apcExitEvent :: [e],
|
||||||
_apcResizeEvent :: [(Rect, Rect) -> e],
|
_apcResizeEvent :: [Rect -> e],
|
||||||
_apcMainButton :: Maybe Button,
|
_apcMainButton :: Maybe Button,
|
||||||
_apcStateFileMain :: Maybe String
|
_apcStateFileMain :: Maybe String
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ appExitEvent evt = def {
|
|||||||
_apcExitEvent = [evt]
|
_apcExitEvent = [evt]
|
||||||
}
|
}
|
||||||
|
|
||||||
appResizeEvent :: ((Rect, Rect) -> e) -> AppConfig e
|
appResizeEvent :: (Rect -> e) -> AppConfig e
|
||||||
appResizeEvent evt = def {
|
appResizeEvent evt = def {
|
||||||
_apcResizeEvent = [evt]
|
_apcResizeEvent = [evt]
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ resizeRoot wenv windowSize widgetRoot = result where
|
|||||||
Size w h = windowSize
|
Size w h = windowSize
|
||||||
assigned = Rect 0 0 w h
|
assigned = Rect 0 0 w h
|
||||||
widget = widgetRoot ^. L.widget
|
widget = widgetRoot ^. L.widget
|
||||||
result = widgetResize widget wenv assigned assigned widgetRoot
|
result = widgetResize widget wenv assigned widgetRoot
|
||||||
|
|
||||||
setWidgetIdPath :: (MonomerM s m) => WidgetId -> Path -> m ()
|
setWidgetIdPath :: (MonomerM s m) => WidgetId -> Path -> m ()
|
||||||
setWidgetIdPath widgetId path =
|
setWidgetIdPath widgetId path =
|
||||||
|
@ -167,7 +167,7 @@ makeBox config = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
Rect cx cy cw ch = contentArea
|
Rect cx cy cw ch = contentArea
|
||||||
@ -177,13 +177,11 @@ makeBox config = widget where
|
|||||||
raChild = Rect cx cy (min cw contentW) (min ch contentH)
|
raChild = Rect cx cy (min cw contentW) (min ch contentH)
|
||||||
ah = fromMaybe ACenter (_boxAlignH config)
|
ah = fromMaybe ACenter (_boxAlignH config)
|
||||||
av = fromMaybe AMiddle (_boxAlignV config)
|
av = fromMaybe AMiddle (_boxAlignV config)
|
||||||
vpContent = fromMaybe def (intersectRects viewport contentArea)
|
|
||||||
raAligned = alignInRect ah av contentArea raChild
|
raAligned = alignInRect ah av contentArea raChild
|
||||||
vpAligned = fromMaybe def (intersectRects viewport raAligned)
|
|
||||||
expand = fromMaybe False (_boxExpandContent config)
|
expand = fromMaybe False (_boxExpandContent config)
|
||||||
resized
|
resized
|
||||||
| expand = (resultWidget node, Seq.singleton (vpContent, contentArea))
|
| expand = (resultWidget node, Seq.singleton contentArea)
|
||||||
| otherwise = (resultWidget node, Seq.singleton (vpAligned, raAligned))
|
| otherwise = (resultWidget node, Seq.singleton raAligned)
|
||||||
|
|
||||||
alignInRect :: AlignH -> AlignV -> Rect -> Rect -> Rect
|
alignInRect :: AlignH -> AlignV -> Rect -> Rect -> Rect
|
||||||
alignInRect ah av parent child = newRect where
|
alignInRect ah av parent child = newRect where
|
||||||
|
@ -243,7 +243,7 @@ makeButton config state = widget where
|
|||||||
| abs factorH < 0.01 = FixedSize h
|
| abs factorH < 0.01 = FixedSize h
|
||||||
| otherwise = FlexSize h factorH
|
| otherwise = FlexSize h factorH
|
||||||
|
|
||||||
resize wenv viewport renderArea node = resultWidget newNode where
|
resize wenv renderArea node = resultWidget newNode where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
rect = fromMaybe def (removeOuterBounds style renderArea)
|
rect = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
newTextStyle = style ^. L.text
|
newTextStyle = style ^. L.text
|
||||||
|
@ -70,7 +70,7 @@ data CompositeCfg s e sp ep = CompositeCfg {
|
|||||||
_cmcMergeRequired :: Maybe (MergeRequired s),
|
_cmcMergeRequired :: Maybe (MergeRequired s),
|
||||||
_cmcOnInit :: [e],
|
_cmcOnInit :: [e],
|
||||||
_cmcOnDispose :: [e],
|
_cmcOnDispose :: [e],
|
||||||
_cmcOnResize :: [(Rect, Rect) -> e],
|
_cmcOnResize :: [Rect -> e],
|
||||||
_cmcOnChange :: [s -> ep],
|
_cmcOnChange :: [s -> ep],
|
||||||
_cmcOnChangeReq :: [WidgetRequest sp],
|
_cmcOnChangeReq :: [WidgetRequest sp],
|
||||||
_cmcOnEnabledChange :: [e],
|
_cmcOnEnabledChange :: [e],
|
||||||
@ -119,7 +119,7 @@ instance CmbOnDispose (CompositeCfg s e sp ep) e where
|
|||||||
_cmcOnDispose = [fn]
|
_cmcOnDispose = [fn]
|
||||||
}
|
}
|
||||||
|
|
||||||
instance CmbOnResize (CompositeCfg s e sp ep) (Rect, Rect) e where
|
instance CmbOnResize (CompositeCfg s e sp ep) Rect e where
|
||||||
onResize fn = def {
|
onResize fn = def {
|
||||||
_cmcOnResize = [fn]
|
_cmcOnResize = [fn]
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ data Composite s e sp ep = Composite {
|
|||||||
_cmpMergeRequired :: MergeRequired s,
|
_cmpMergeRequired :: MergeRequired s,
|
||||||
_cmpOnInit :: [e],
|
_cmpOnInit :: [e],
|
||||||
_cmpOnDispose :: [e],
|
_cmpOnDispose :: [e],
|
||||||
_cmpOnResize :: [(Rect, Rect) -> e],
|
_cmpOnResize :: [Rect -> e],
|
||||||
_cmpOnChange :: [s -> ep],
|
_cmpOnChange :: [s -> ep],
|
||||||
_cmpOnChangeReq :: [WidgetRequest sp],
|
_cmpOnChangeReq :: [WidgetRequest sp],
|
||||||
_cmpOnEnabledChange :: [e],
|
_cmpOnEnabledChange :: [e],
|
||||||
@ -370,7 +370,6 @@ compositeMerge comp state wenv oldComp newComp = newResult where
|
|||||||
getBaseStyle wenv node = Nothing
|
getBaseStyle wenv node = Nothing
|
||||||
styledComp = initNodeStyle getBaseStyle wenv newComp
|
styledComp = initNodeStyle getBaseStyle wenv newComp
|
||||||
& L.info . L.widgetId .~ oldComp ^. L.info . L.widgetId
|
& L.info . L.widgetId .~ oldComp ^. L.info . L.widgetId
|
||||||
& L.info . L.viewport .~ oldComp ^. L.info . L.viewport
|
|
||||||
& L.info . L.renderArea .~ oldComp ^. L.info . L.renderArea
|
& L.info . L.renderArea .~ oldComp ^. L.info . L.renderArea
|
||||||
& L.info . L.sizeReqW .~ oldComp ^. L.info . L.sizeReqW
|
& L.info . L.sizeReqW .~ oldComp ^. L.info . L.sizeReqW
|
||||||
& L.info . L.sizeReqH .~ oldComp ^. L.info . L.sizeReqH
|
& L.info . L.sizeReqH .~ oldComp ^. L.info . L.sizeReqH
|
||||||
@ -454,7 +453,6 @@ compositeRestore comp state wenv win newComp = result where
|
|||||||
result
|
result
|
||||||
| valid = reducedResult
|
| valid = reducedResult
|
||||||
& L.node . L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
& L.node . L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
||||||
& L.node . L.info . L.viewport .~ oldInfo ^. L.viewport
|
|
||||||
& L.node . L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
& L.node . L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
||||||
& L.node . L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
& L.node . L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
||||||
& L.node . L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
& L.node . L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
||||||
@ -572,30 +570,26 @@ compositeResize
|
|||||||
-> CompositeState s e
|
-> CompositeState s e
|
||||||
-> WidgetEnv sp ep
|
-> WidgetEnv sp ep
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> WidgetNode sp ep
|
-> WidgetNode sp ep
|
||||||
-> WidgetResult sp ep
|
-> WidgetResult sp ep
|
||||||
compositeResize comp state wenv viewport renderArea widgetComp = resized where
|
compositeResize comp state wenv renderArea widgetComp = resized where
|
||||||
CompositeState{..} = state
|
CompositeState{..} = state
|
||||||
style = activeStyle wenv widgetComp
|
style = activeStyle wenv widgetComp
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
widget = _cpsRoot ^. L.widget
|
widget = _cpsRoot ^. L.widget
|
||||||
model = getModel comp wenv
|
model = getModel comp wenv
|
||||||
cwenv = convertWidgetEnv wenv _cpsGlobalKeys model
|
cwenv = convertWidgetEnv wenv _cpsGlobalKeys model
|
||||||
tmpRes = widgetResize widget cwenv viewport contentArea _cpsRoot
|
tmpRes = widgetResize widget cwenv contentArea _cpsRoot
|
||||||
oldVp = widgetComp ^. L.info . L.viewport
|
|
||||||
oldRa = widgetComp ^. L.info . L.renderArea
|
oldRa = widgetComp ^. L.info . L.renderArea
|
||||||
sizeChanged = viewport /= oldVp || renderArea /= oldRa
|
sizeChanged = renderArea /= oldRa
|
||||||
resizeEvts = fmap ($ (viewport, renderArea)) (_cmpOnResize comp)
|
resizeEvts = fmap ($ renderArea) (_cmpOnResize comp)
|
||||||
newEvts
|
newEvts
|
||||||
| sizeChanged = Seq.fromList resizeEvts
|
| sizeChanged = Seq.fromList resizeEvts
|
||||||
| otherwise = Empty
|
| otherwise = Empty
|
||||||
newRes = reduceResult comp state wenv widgetComp $ tmpRes
|
newRes = reduceResult comp state wenv widgetComp $ tmpRes
|
||||||
& L.node . L.info . L.viewport .~ viewport
|
|
||||||
& L.node . L.info . L.renderArea .~ contentArea
|
& L.node . L.info . L.renderArea .~ contentArea
|
||||||
& L.events .~ tmpRes ^. L.events <> newEvts
|
& L.events .~ tmpRes ^. L.events <> newEvts
|
||||||
resized = newRes
|
resized = newRes
|
||||||
& L.node . L.info . L.viewport .~ viewport
|
|
||||||
& L.node . L.info . L.renderArea .~ renderArea
|
& L.node . L.info . L.renderArea .~ renderArea
|
||||||
|
|
||||||
-- Render
|
-- Render
|
||||||
|
@ -156,10 +156,9 @@ type ContainerGetSizeReqHandler s e a
|
|||||||
type ContainerResizeHandler s e
|
type ContainerResizeHandler s e
|
||||||
= WidgetEnv s e
|
= WidgetEnv s e
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> Seq (WidgetNode s e)
|
-> Seq (WidgetNode s e)
|
||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> (WidgetResult s e, Seq (Rect, Rect))
|
-> (WidgetResult s e, Seq Rect)
|
||||||
|
|
||||||
type ContainerRenderHandler s e
|
type ContainerRenderHandler s e
|
||||||
= Renderer
|
= Renderer
|
||||||
@ -168,6 +167,7 @@ type ContainerRenderHandler s e
|
|||||||
-> IO ()
|
-> IO ()
|
||||||
|
|
||||||
data Container s e a = Container {
|
data Container s e a = Container {
|
||||||
|
containerChildrenOffset :: Maybe Point,
|
||||||
containerIgnoreEmptyArea :: Bool,
|
containerIgnoreEmptyArea :: Bool,
|
||||||
containerResizeRequired :: Bool,
|
containerResizeRequired :: Bool,
|
||||||
containerStyleChangeCfg :: StyleChangeCfg,
|
containerStyleChangeCfg :: StyleChangeCfg,
|
||||||
@ -186,7 +186,6 @@ data Container s e a = Container {
|
|||||||
containerDispose :: ContainerDisposeHandler s e,
|
containerDispose :: ContainerDisposeHandler s e,
|
||||||
containerFindNextFocus :: ContainerFindNextFocusHandler s e,
|
containerFindNextFocus :: ContainerFindNextFocusHandler s e,
|
||||||
containerFindByPoint :: ContainerFindByPointHandler s e,
|
containerFindByPoint :: ContainerFindByPointHandler s e,
|
||||||
containerUpdateEvent :: ContainerUpdateEventHandler s e,
|
|
||||||
containerHandleEvent :: ContainerEventHandler s e,
|
containerHandleEvent :: ContainerEventHandler s e,
|
||||||
containerHandleMessage :: ContainerMessageHandler s e,
|
containerHandleMessage :: ContainerMessageHandler s e,
|
||||||
containerGetSizeReq :: ContainerGetSizeReqHandler s e a,
|
containerGetSizeReq :: ContainerGetSizeReqHandler s e a,
|
||||||
@ -197,6 +196,7 @@ data Container s e a = Container {
|
|||||||
|
|
||||||
instance Default (Container s e a) where
|
instance Default (Container s e a) where
|
||||||
def = Container {
|
def = Container {
|
||||||
|
containerChildrenOffset = Nothing,
|
||||||
containerIgnoreEmptyArea = False,
|
containerIgnoreEmptyArea = False,
|
||||||
containerResizeRequired = True,
|
containerResizeRequired = True,
|
||||||
containerStyleChangeCfg = def,
|
containerStyleChangeCfg = def,
|
||||||
@ -215,7 +215,6 @@ instance Default (Container s e a) where
|
|||||||
containerDispose = defaultDispose,
|
containerDispose = defaultDispose,
|
||||||
containerFindNextFocus = defaultFindNextFocus,
|
containerFindNextFocus = defaultFindNextFocus,
|
||||||
containerFindByPoint = defaultFindByPoint,
|
containerFindByPoint = defaultFindByPoint,
|
||||||
containerUpdateEvent = defaultUpdateEvent,
|
|
||||||
containerHandleEvent = defaultHandleEvent,
|
containerHandleEvent = defaultHandleEvent,
|
||||||
containerHandleMessage = defaultHandleMessage,
|
containerHandleMessage = defaultHandleMessage,
|
||||||
containerGetSizeReq = defaultGetSizeReq,
|
containerGetSizeReq = defaultGetSizeReq,
|
||||||
@ -254,6 +253,28 @@ defaultGetActiveStyle wenv node = activeStyle wenv node
|
|||||||
defaultUpdateCWenv :: ContainerUpdateCWenvHandler s e
|
defaultUpdateCWenv :: ContainerUpdateCWenvHandler s e
|
||||||
defaultUpdateCWenv wenv cidx cnode node = wenv
|
defaultUpdateCWenv wenv cidx cnode node = wenv
|
||||||
|
|
||||||
|
getUpdateCWenv
|
||||||
|
:: Container s e a
|
||||||
|
-> WidgetEnv s e
|
||||||
|
-> Int
|
||||||
|
-> WidgetNode s e
|
||||||
|
-> WidgetNode s e
|
||||||
|
-> WidgetEnv s e
|
||||||
|
getUpdateCWenv container wenv cidx cnode node = newWenv where
|
||||||
|
cOffset = containerChildrenOffset container
|
||||||
|
updateCWenv = containerUpdateCWenv container
|
||||||
|
offset = fromMaybe def cOffset
|
||||||
|
accumOffset = wenv ^. L.offset
|
||||||
|
renderArea = node ^. L.info . L.renderArea
|
||||||
|
tmpWenv = wenv
|
||||||
|
& L.viewport .~ moveRect (negPoint accumOffset) renderArea
|
||||||
|
& L.inputStatus . L.mousePos %~ addPoint (negPoint offset)
|
||||||
|
& L.inputStatus . L.mousePosPrev %~ addPoint (negPoint offset)
|
||||||
|
& L.offset %~ addPoint offset
|
||||||
|
newWenv
|
||||||
|
| isJust cOffset = updateCWenv tmpWenv cidx cnode node
|
||||||
|
| otherwise = updateCWenv wenv cidx cnode node
|
||||||
|
|
||||||
-- | Init handler
|
-- | Init handler
|
||||||
defaultInit :: ContainerInitHandler s e
|
defaultInit :: ContainerInitHandler s e
|
||||||
defaultInit wenv node = resultWidget node
|
defaultInit wenv node = resultWidget node
|
||||||
@ -267,7 +288,7 @@ initWrapper
|
|||||||
initWrapper container wenv node = result where
|
initWrapper container wenv node = result where
|
||||||
initHandler = containerInit container
|
initHandler = containerInit container
|
||||||
getBaseStyle = containerGetBaseStyle container
|
getBaseStyle = containerGetBaseStyle container
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
styledNode = initNodeStyle getBaseStyle wenv node
|
styledNode = initNodeStyle getBaseStyle wenv node
|
||||||
WidgetResult tempNode reqs events = initHandler wenv styledNode
|
WidgetResult tempNode reqs events = initHandler wenv styledNode
|
||||||
children = tempNode ^. L.children
|
children = tempNode ^. L.children
|
||||||
@ -309,7 +330,7 @@ mergeWrapper
|
|||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
mergeWrapper container wenv oldNode newNode = newResult where
|
mergeWrapper container wenv oldNode newNode = newResult where
|
||||||
getBaseStyle = containerGetBaseStyle container
|
getBaseStyle = containerGetBaseStyle container
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
cWenvHelper idx child = updateCWenv wenv idx child newNode
|
cWenvHelper idx child = updateCWenv wenv idx child newNode
|
||||||
mergeRequiredHandler = containerMergeChildrenReq container
|
mergeRequiredHandler = containerMergeChildrenReq container
|
||||||
mergeHandler = case containerMerge container of
|
mergeHandler = case containerMerge container of
|
||||||
@ -351,7 +372,6 @@ mergeParent mergeHandler wenv oldState oldNode newNode = result where
|
|||||||
oldInfo = oldNode ^. L.info
|
oldInfo = oldNode ^. L.info
|
||||||
tempNode = newNode
|
tempNode = newNode
|
||||||
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
||||||
& L.info . L.viewport .~ oldInfo ^. L.viewport
|
|
||||||
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
||||||
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
||||||
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
||||||
@ -454,7 +474,7 @@ saveWrapper
|
|||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetInstanceNode
|
-> WidgetInstanceNode
|
||||||
saveWrapper container wenv node = instNode where
|
saveWrapper container wenv node = instNode where
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
instNode = WidgetInstanceNode {
|
instNode = WidgetInstanceNode {
|
||||||
_winInfo = node ^. L.info,
|
_winInfo = node ^. L.info,
|
||||||
_winState = widgetGetState (node ^. L.widget) wenv,
|
_winState = widgetGetState (node ^. L.widget) wenv,
|
||||||
@ -478,13 +498,12 @@ restoreWrapper
|
|||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
restoreWrapper container wenv win newNode = newResult where
|
restoreWrapper container wenv win newNode = newResult where
|
||||||
getBaseStyle = containerGetBaseStyle container
|
getBaseStyle = containerGetBaseStyle container
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
restoreHandler = containerRestore container
|
restoreHandler = containerRestore container
|
||||||
restorePostHandler = containerRestorePost container
|
restorePostHandler = containerRestorePost container
|
||||||
oldInfo = win ^. L.info
|
oldInfo = win ^. L.info
|
||||||
tempNode = newNode
|
tempNode = newNode
|
||||||
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
||||||
& L.info . L.viewport .~ oldInfo ^. L.viewport
|
|
||||||
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
||||||
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
||||||
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
||||||
@ -527,7 +546,7 @@ disposeWrapper
|
|||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
disposeWrapper container wenv node = result where
|
disposeWrapper container wenv node = result where
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
disposeHandler = containerDispose container
|
disposeHandler = containerDispose container
|
||||||
WidgetResult tempNode reqs events = disposeHandler wenv node
|
WidgetResult tempNode reqs events = disposeHandler wenv node
|
||||||
children = tempNode ^. L.children
|
children = tempNode ^. L.children
|
||||||
@ -572,7 +591,7 @@ findFocusCandidate
|
|||||||
-> Maybe Path
|
-> Maybe Path
|
||||||
findFocusCandidate _ _ _ _ _ Empty = Nothing
|
findFocusCandidate _ _ _ _ _ Empty = Nothing
|
||||||
findFocusCandidate container wenv dir start node (ch :<| chs) = result where
|
findFocusCandidate container wenv dir start node (ch :<| chs) = result where
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
path = node ^. L.info . L.path
|
path = node ^. L.info . L.path
|
||||||
idx = fromMaybe 0 (Seq.lookup (length path - 1) path)
|
idx = fromMaybe 0 (Seq.lookup (length path - 1) path)
|
||||||
cwenv = updateCWenv wenv idx ch node
|
cwenv = updateCWenv wenv idx ch node
|
||||||
@ -588,7 +607,7 @@ findFocusCandidate container wenv dir start node (ch :<| chs) = result where
|
|||||||
defaultFindByPoint :: ContainerFindByPointHandler s e
|
defaultFindByPoint :: ContainerFindByPointHandler s e
|
||||||
defaultFindByPoint wenv startPath point node = result where
|
defaultFindByPoint wenv startPath point node = result where
|
||||||
children = node ^. L.children
|
children = node ^. L.children
|
||||||
pointInWidget wi = wi ^. L.visible && pointInRect point (wi ^. L.viewport)
|
pointInWidget wi = wi ^. L.visible && pointInRect point (wi ^. L.renderArea)
|
||||||
result = Seq.findIndexL (pointInWidget . _wnInfo) children
|
result = Seq.findIndexL (pointInWidget . _wnInfo) children
|
||||||
|
|
||||||
findByPointWrapper
|
findByPointWrapper
|
||||||
@ -599,16 +618,18 @@ findByPointWrapper
|
|||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> Maybe Path
|
-> Maybe Path
|
||||||
findByPointWrapper container wenv start point node = result where
|
findByPointWrapper container wenv start point node = result where
|
||||||
updateCWenv = containerUpdateCWenv container
|
offset = fromMaybe def (containerChildrenOffset container)
|
||||||
|
updateCWenv = getUpdateCWenv container
|
||||||
ignoreEmpty = containerIgnoreEmptyArea container
|
ignoreEmpty = containerIgnoreEmptyArea container
|
||||||
handler = containerFindByPoint container
|
handler = containerFindByPoint container
|
||||||
isVisible = node ^. L.info . L.visible
|
isVisible = node ^. L.info . L.visible
|
||||||
inVp = isPointInNodeVp point node
|
inVp = isPointInNodeVp point node
|
||||||
|
cpoint = addPoint (negPoint offset) point
|
||||||
path = node ^. L.info . L.path
|
path = node ^. L.info . L.path
|
||||||
children = node ^. L.children
|
children = node ^. L.children
|
||||||
newStartPath = Seq.drop 1 start
|
newStartPath = Seq.drop 1 start
|
||||||
childIdx = case newStartPath of
|
childIdx = case newStartPath of
|
||||||
Empty -> handler wenv start point node
|
Empty -> handler wenv start cpoint node
|
||||||
p :<| ps -> Just p
|
p :<| ps -> Just p
|
||||||
validateIdx p
|
validateIdx p
|
||||||
| Seq.length children > p = Just p
|
| Seq.length children > p = Just p
|
||||||
@ -616,7 +637,7 @@ findByPointWrapper container wenv start point node = result where
|
|||||||
resultPath = case childIdx >>= validateIdx of
|
resultPath = case childIdx >>= validateIdx of
|
||||||
Just idx -> childPath where
|
Just idx -> childPath where
|
||||||
cwenv = updateCWenv wenv idx child node
|
cwenv = updateCWenv wenv idx child node
|
||||||
childPath = widgetFindByPoint childWidget cwenv newStartPath point child
|
childPath = widgetFindByPoint childWidget cwenv newStartPath cpoint child
|
||||||
child = Seq.index children idx
|
child = Seq.index children idx
|
||||||
childWidget = child ^. L.widget
|
childWidget = child ^. L.widget
|
||||||
Nothing
|
Nothing
|
||||||
@ -627,9 +648,6 @@ findByPointWrapper container wenv start point node = result where
|
|||||||
| otherwise = Nothing
|
| otherwise = Nothing
|
||||||
|
|
||||||
-- | Event Handling
|
-- | Event Handling
|
||||||
defaultUpdateEvent :: ContainerUpdateEventHandler s e
|
|
||||||
defaultUpdateEvent wenv evt node = evt
|
|
||||||
|
|
||||||
defaultHandleEvent :: ContainerEventHandler s e
|
defaultHandleEvent :: ContainerEventHandler s e
|
||||||
defaultHandleEvent wenv target evt node = Nothing
|
defaultHandleEvent wenv target evt node = Nothing
|
||||||
|
|
||||||
@ -650,10 +668,10 @@ handleEventWrapper container wenv target evt node
|
|||||||
-- _wiChildren, but may still be valid in the receiving widget
|
-- _wiChildren, but may still be valid in the receiving widget
|
||||||
-- For example, Composite has its own tree of child widgets with (possibly)
|
-- For example, Composite has its own tree of child widgets with (possibly)
|
||||||
-- different types for Model and Events, and is candidate for the next step
|
-- different types for Model and Events, and is candidate for the next step
|
||||||
|
offset = fromMaybe def (containerChildrenOffset container)
|
||||||
style = containerGetActiveStyle container wenv node
|
style = containerGetActiveStyle container wenv node
|
||||||
styleCfg = containerStyleChangeCfg container
|
styleCfg = containerStyleChangeCfg container
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
updateEvt = containerUpdateEvent container
|
|
||||||
handler = containerHandleEvent container
|
handler = containerHandleEvent container
|
||||||
targetReached = isTargetReached target node
|
targetReached = isTargetReached target node
|
||||||
targetValid = isTargetValid target node
|
targetValid = isTargetValid target node
|
||||||
@ -662,7 +680,7 @@ handleEventWrapper container wenv target evt node
|
|||||||
child = Seq.index children childIdx
|
child = Seq.index children childIdx
|
||||||
childWidget = child ^. L.widget
|
childWidget = child ^. L.widget
|
||||||
cwenv = updateCWenv wenv childIdx child node
|
cwenv = updateCWenv wenv childIdx child node
|
||||||
cevt = updateEvt wenv evt node
|
cevt = translateEvent (negPoint offset) evt
|
||||||
-- Event targeted at parent
|
-- Event targeted at parent
|
||||||
pResponse = handler wenv target evt node
|
pResponse = handler wenv target evt node
|
||||||
pResultStyled = handleStyleChange wenv target style styleCfg node evt
|
pResultStyled = handleStyleChange wenv target style styleCfg node evt
|
||||||
@ -673,8 +691,8 @@ handleEventWrapper container wenv target evt node
|
|||||||
| childrenIgnored || not (child ^. L.info . L.enabled) = Nothing
|
| childrenIgnored || not (child ^. L.info . L.enabled) = Nothing
|
||||||
| otherwise = widgetHandleEvent childWidget cwenv target cevt child
|
| otherwise = widgetHandleEvent childWidget cwenv target cevt child
|
||||||
cResult = mergeParentChildEvts node pResponse cResponse childIdx
|
cResult = mergeParentChildEvts node pResponse cResponse childIdx
|
||||||
cResultStyled = handleStyleChange wenv target style styleCfg node cevt
|
cResultStyled = handleStyleChange cwenv target style styleCfg node cevt
|
||||||
$ handleSizeReqChange container wenv node (Just cevt) cResult
|
$ handleSizeReqChange container cwenv node (Just cevt) cResult
|
||||||
|
|
||||||
mergeParentChildEvts
|
mergeParentChildEvts
|
||||||
:: WidgetNode s e
|
:: WidgetNode s e
|
||||||
@ -717,7 +735,7 @@ handleMessageWrapper container wenv target arg node
|
|||||||
| not targetReached && not targetValid = Nothing
|
| not targetReached && not targetValid = Nothing
|
||||||
| otherwise = handleSizeReqChange container wenv node Nothing result
|
| otherwise = handleSizeReqChange container wenv node Nothing result
|
||||||
where
|
where
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
handler = containerHandleMessage container
|
handler = containerHandleMessage container
|
||||||
targetReached = isTargetReached target node
|
targetReached = isTargetReached target node
|
||||||
targetValid = isTargetValid target node
|
targetValid = isTargetValid target node
|
||||||
@ -777,7 +795,7 @@ handleSizeReqChange container wenv node evt mResult = result where
|
|||||||
|
|
||||||
-- | Resize
|
-- | Resize
|
||||||
defaultResize :: ContainerResizeHandler s e
|
defaultResize :: ContainerResizeHandler s e
|
||||||
defaultResize wenv viewport renderArea children node = newSize where
|
defaultResize wenv renderArea children node = newSize where
|
||||||
childrenSizes = Seq.replicate (Seq.length children) def
|
childrenSizes = Seq.replicate (Seq.length children) def
|
||||||
newSize = (resultWidget node, childrenSizes)
|
newSize = (resultWidget node, childrenSizes)
|
||||||
|
|
||||||
@ -785,44 +803,34 @@ resizeWrapper
|
|||||||
:: Container s e a
|
:: Container s e a
|
||||||
-> WidgetEnv s e
|
-> WidgetEnv s e
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
resizeWrapper container wenv viewport renderArea node = result where
|
resizeWrapper container wenv renderArea node = result where
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
resizeRequired = containerResizeRequired container
|
resizeRequired = containerResizeRequired container
|
||||||
useCustomSize = containerUseCustomSize container
|
useCustomSize = containerUseCustomSize container
|
||||||
useChildSize = containerUseChildrenSizes container
|
useChildSize = containerUseChildrenSizes container
|
||||||
handler = containerResize container
|
handler = containerResize container
|
||||||
lensVp = L.info . L.viewport
|
|
||||||
lensRa = L.info . L.renderArea
|
lensRa = L.info . L.renderArea
|
||||||
vpChanged = viewport /= node ^. lensVp
|
|
||||||
raChanged = renderArea /= node ^. lensRa
|
raChanged = renderArea /= node ^. lensRa
|
||||||
children = node ^. L.children
|
children = node ^. L.children
|
||||||
(tempRes, assigned) = handler wenv viewport renderArea children node
|
(tempRes, assigned) = handler wenv renderArea children node
|
||||||
resize idx (child, (vp, ra)) = newChildRes where
|
resize idx (child, ra) = newChildRes where
|
||||||
cwenv = updateCWenv wenv idx child node
|
cwenv = updateCWenv wenv idx child node
|
||||||
tempChildRes = widgetResize (child ^. L.widget) cwenv vp ra child
|
tempChildRes = widgetResize (child ^. L.widget) cwenv ra child
|
||||||
cvp = tempChildRes ^. L.node . L.info . L.viewport
|
|
||||||
cra = tempChildRes ^. L.node . L.info . L.renderArea
|
cra = tempChildRes ^. L.node . L.info . L.renderArea
|
||||||
icvp = fromMaybe vp (intersectRects vp cvp)
|
|
||||||
icra = fromMaybe ra (intersectRects ra cra)
|
icra = fromMaybe ra (intersectRects ra cra)
|
||||||
newChildRes = tempChildRes
|
newChildRes = tempChildRes
|
||||||
& L.node . L.info . L.viewport .~ (if useChildSize then icvp else vp)
|
|
||||||
& L.node . L.info . L.renderArea .~ (if useChildSize then icra else ra)
|
& L.node . L.info . L.renderArea .~ (if useChildSize then icra else ra)
|
||||||
newChildrenRes = Seq.mapWithIndex resize (Seq.zip children assigned)
|
newChildrenRes = Seq.mapWithIndex resize (Seq.zip children assigned)
|
||||||
newChildren = fmap _wrNode newChildrenRes
|
newChildren = fmap _wrNode newChildrenRes
|
||||||
newChildrenReqs = foldMap _wrRequests newChildrenRes
|
newChildrenReqs = foldMap _wrRequests newChildrenRes
|
||||||
newChildrenEvts = foldMap _wrEvents newChildrenRes
|
newChildrenEvts = foldMap _wrEvents newChildrenRes
|
||||||
newVp
|
|
||||||
| useCustomSize = tempRes ^. L.node . lensVp
|
|
||||||
| otherwise = viewport
|
|
||||||
newRa
|
newRa
|
||||||
| useCustomSize = tempRes ^. L.node . lensRa
|
| useCustomSize = tempRes ^. L.node . lensRa
|
||||||
| otherwise = renderArea
|
| otherwise = renderArea
|
||||||
result
|
result
|
||||||
| resizeRequired || vpChanged || raChanged = tempRes
|
| resizeRequired || raChanged = tempRes
|
||||||
& L.node . L.info . L.viewport .~ newVp
|
|
||||||
& L.node . L.info . L.renderArea .~ newRa
|
& L.node . L.info . L.renderArea .~ newRa
|
||||||
& L.node . L.children .~ newChildren
|
& L.node . L.children .~ newChildren
|
||||||
& L.requests <>~ newChildrenReqs
|
& L.requests <>~ newChildrenReqs
|
||||||
@ -840,22 +848,30 @@ renderWrapper
|
|||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> IO ()
|
-> IO ()
|
||||||
renderWrapper container renderer wenv node =
|
renderWrapper container renderer wenv node =
|
||||||
drawInScissor renderer useScissor viewport $
|
drawInScissor renderer useScissor renderArea $
|
||||||
drawStyledAction renderer renderArea style $ \_ -> do
|
drawStyledAction renderer renderArea style $ \_ -> do
|
||||||
renderBefore renderer wenv node
|
renderBefore renderer wenv node
|
||||||
|
|
||||||
forM_ pairs $ \(idx, child) -> when (isWidgetVisible child viewport) $
|
when (isJust offset) $ do
|
||||||
widgetRender (child ^. L.widget) renderer (cwenv idx child) child
|
saveContext renderer
|
||||||
|
setTranslation renderer (fromJust offset)
|
||||||
|
|
||||||
|
forM_ pairs $ \(idx, child) ->
|
||||||
|
when (isWidgetVisible (cwenv idx child) child) $
|
||||||
|
widgetRender (child ^. L.widget) renderer (cwenv idx child) child
|
||||||
|
|
||||||
|
when (isJust offset) $
|
||||||
|
restoreContext renderer
|
||||||
|
|
||||||
renderAfter renderer wenv node
|
renderAfter renderer wenv node
|
||||||
where
|
where
|
||||||
style = containerGetActiveStyle container wenv node
|
style = containerGetActiveStyle container wenv node
|
||||||
updateCWenv = containerUpdateCWenv container
|
updateCWenv = getUpdateCWenv container
|
||||||
useScissor = containerUseScissor container
|
useScissor = containerUseScissor container
|
||||||
|
offset = containerChildrenOffset container
|
||||||
renderBefore = containerRender container
|
renderBefore = containerRender container
|
||||||
renderAfter = containerRenderAfter container
|
renderAfter = containerRenderAfter container
|
||||||
children = node ^. L.children
|
children = node ^. L.children
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
renderArea = node ^. L.info . L.renderArea
|
renderArea = node ^. L.info . L.renderArea
|
||||||
pairs = Seq.mapWithIndex (,) children
|
pairs = Seq.mapWithIndex (,) children
|
||||||
cwenv idx child = updateCWenv wenv idx child node
|
cwenv idx child = updateCWenv wenv idx child node
|
||||||
|
@ -114,10 +114,10 @@ makeDraggable msg config = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
resized = (resultWidget node, Seq.singleton (contentArea, contentArea))
|
resized = (resultWidget node, Seq.singleton contentArea)
|
||||||
|
|
||||||
defaultRender renderer wenv node =
|
defaultRender renderer wenv node =
|
||||||
drawStyledAction renderer draggedRect style $ \_ -> do
|
drawStyledAction renderer draggedRect style $ \_ -> do
|
||||||
@ -131,7 +131,7 @@ makeDraggable msg config = widget where
|
|||||||
style = fromMaybe def (_dgcDragStyle config)
|
style = fromMaybe def (_dgcDragStyle config)
|
||||||
transparency = fromMaybe 1 (_dgcTransparency config)
|
transparency = fromMaybe 1 (_dgcTransparency config)
|
||||||
cnode = Seq.index (_wnChildren node) 0
|
cnode = Seq.index (_wnChildren node) 0
|
||||||
Rect cx cy cw ch = cnode ^. L.info . L.viewport
|
Rect cx cy cw ch = cnode ^. L.info . L.renderArea
|
||||||
Point mx my = wenv ^. L.inputStatus . L.mousePos
|
Point mx my = wenv ^. L.inputStatus . L.mousePos
|
||||||
Point px py = wenv ^?! L.mainBtnPress . _Just . _2
|
Point px py = wenv ^?! L.mainBtnPress . _Just . _2
|
||||||
dim = fromMaybe (max cw ch) (_dgcMaxDim config)
|
dim = fromMaybe (max cw ch) (_dgcMaxDim config)
|
||||||
|
@ -92,10 +92,10 @@ makeDropTarget dropEvt config = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
resized = (resultWidget node, Seq.singleton (contentArea, contentArea))
|
resized = (resultWidget node, Seq.singleton contentArea)
|
||||||
|
|
||||||
isDropTarget wenv node = case wenv ^. L.dragStatus of
|
isDropTarget wenv node = case wenv ^. L.dragStatus of
|
||||||
Just (path, msg) -> not (isNodeParentOfPath path node) && isValidMsg msg
|
Just (path, msg) -> not (isNodeParentOfPath path node) && isValidMsg msg
|
||||||
|
@ -309,12 +309,12 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
|||||||
path = node ^. L.info . L.path
|
path = node ^. L.info . L.path
|
||||||
focusedPath = wenv ^. L.focusedPath
|
focusedPath = wenv ^. L.focusedPath
|
||||||
|
|
||||||
openRequired point node = not isOpen && inViewport where
|
openRequired point node = not isOpen && inRenderArea where
|
||||||
inViewport = pointInRect point (node ^. L.info . L.viewport)
|
inRenderArea = pointInRect point (node ^. L.info . L.renderArea)
|
||||||
|
|
||||||
closeRequired point node = isOpen && not inOverlay where
|
closeRequired point node = isOpen && not inOverlay where
|
||||||
inOverlay = case Seq.lookup listIdx (node ^. L.children) of
|
inOverlay = case Seq.lookup listIdx (node ^. L.children) of
|
||||||
Just node -> pointInRect point (node ^. L.info . L.viewport)
|
Just node -> pointInRect point (node ^. L.info . L.renderArea)
|
||||||
Nothing -> False
|
Nothing -> False
|
||||||
|
|
||||||
openDropdown wenv node = resultReqs newNode requests where
|
openDropdown wenv node = resultReqs newNode requests where
|
||||||
@ -367,7 +367,7 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
|||||||
newReqW = sizeReqMergeMax mainReqW listReqW
|
newReqW = sizeReqMergeMax mainReqW listReqW
|
||||||
newReqH = mainReqH
|
newReqH = mainReqH
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
Size winW winH = _weWindowSize wenv
|
Size winW winH = _weWindowSize wenv
|
||||||
Rect rx ry rw rh = renderArea
|
Rect rx ry rw rh = renderArea
|
||||||
theme = activeTheme wenv node
|
theme = activeTheme wenv node
|
||||||
@ -376,7 +376,7 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
|||||||
| ry - dh >= 0 = ry - dh
|
| ry - dh >= 0 = ry - dh
|
||||||
| otherwise = 0
|
| otherwise = 0
|
||||||
!listArea = case Seq.lookup 1 children of
|
!listArea = case Seq.lookup 1 children of
|
||||||
Just child -> (oViewport, oRenderArea) where
|
Just child -> oRenderArea where
|
||||||
maxHeightTheme = theme ^. L.dropdownMaxHeight
|
maxHeightTheme = theme ^. L.dropdownMaxHeight
|
||||||
cfgMaxHeight = _ddcMaxHeight config
|
cfgMaxHeight = _ddcMaxHeight config
|
||||||
-- Avoid having an invisible list if style/theme as not set
|
-- Avoid having an invisible list if style/theme as not set
|
||||||
@ -385,21 +385,17 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
|||||||
maxHeight = min winH (min reqHeight maxHeightStyle)
|
maxHeight = min winH (min reqHeight maxHeightStyle)
|
||||||
dy = dropdownY maxHeight
|
dy = dropdownY maxHeight
|
||||||
dh = maxHeight
|
dh = maxHeight
|
||||||
!oViewport = viewport {
|
|
||||||
_rY = dy,
|
|
||||||
_rH = dh
|
|
||||||
}
|
|
||||||
!oRenderArea = renderArea {
|
!oRenderArea = renderArea {
|
||||||
_rY = dy,
|
_rY = dy,
|
||||||
_rH = dh
|
_rH = dh
|
||||||
}
|
}
|
||||||
Nothing -> (viewport, renderArea)
|
Nothing -> renderArea
|
||||||
!mainArea = (viewport, renderArea)
|
!mainArea = renderArea
|
||||||
assignedAreas = Seq.fromList [mainArea, listArea]
|
assignedAreas = Seq.fromList [mainArea, listArea]
|
||||||
resized = (resultWidget node, assignedAreas)
|
resized = (resultWidget node, assignedAreas)
|
||||||
|
|
||||||
render renderer wenv node = do
|
render renderer wenv node = do
|
||||||
drawInScissor renderer True viewport $
|
drawInScissor renderer True renderArea $
|
||||||
drawStyledAction renderer renderArea style $ \contentArea -> do
|
drawStyledAction renderer renderArea style $ \contentArea -> do
|
||||||
widgetRender (mainNode ^. L.widget) renderer wenv mainNode
|
widgetRender (mainNode ^. L.widget) renderer wenv mainNode
|
||||||
renderArrow renderer style contentArea
|
renderArrow renderer style contentArea
|
||||||
@ -409,7 +405,6 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
|||||||
renderOverlay renderer wenv (fromJust listViewOverlay)
|
renderOverlay renderer wenv (fromJust listViewOverlay)
|
||||||
where
|
where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
renderArea = node ^. L.info . L.renderArea
|
renderArea = node ^. L.info . L.renderArea
|
||||||
mainNode = Seq.index (node ^. L.children) mainIdx
|
mainNode = Seq.index (node ^. L.children) mainIdx
|
||||||
listViewOverlay = Seq.lookup listIdx (node ^. L.children)
|
listViewOverlay = Seq.lookup listIdx (node ^. L.children)
|
||||||
|
@ -48,7 +48,7 @@ makeFixedGrid isHorizontal = widget where
|
|||||||
nreqs = Seq.length vreqs
|
nreqs = Seq.length vreqs
|
||||||
maxSize = foldl1 sizeReqMergeMax vreqs
|
maxSize = foldl1 sizeReqMergeMax vreqs
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
Rect l t w h = contentArea
|
Rect l t w h = contentArea
|
||||||
@ -64,11 +64,11 @@ makeFixedGrid isHorizontal = widget where
|
|||||||
| cols > 0 = t + fromIntegral (i `div` cols) * ch
|
| cols > 0 = t + fromIntegral (i `div` cols) * ch
|
||||||
| otherwise = 0
|
| otherwise = 0
|
||||||
foldHelper (currAreas, index) child = (newAreas, newIndex) where
|
foldHelper (currAreas, index) child = (newAreas, newIndex) where
|
||||||
(newIndex, newViewport)
|
(newIndex, newRenderArea)
|
||||||
| child ^. L.info . L.visible = (index + 1, calcViewport index)
|
| child ^. L.info . L.visible = (index + 1, calcRenderArea index)
|
||||||
| otherwise = (index, def)
|
| otherwise = (index, def)
|
||||||
newArea = (newViewport, newViewport)
|
newArea = newRenderArea
|
||||||
newAreas = currAreas |> newArea
|
newAreas = currAreas |> newArea
|
||||||
calcViewport i = Rect (cx i) (cy i) cw ch
|
calcRenderArea i = Rect (cx i) (cy i) cw ch
|
||||||
assignedAreas = fst $ foldl' foldHelper (Seq.empty, 0) children
|
assignedAreas = fst $ foldl' foldHelper (Seq.empty, 0) children
|
||||||
resized = (resultWidget node, assignedAreas)
|
resized = (resultWidget node, assignedAreas)
|
||||||
|
@ -82,9 +82,9 @@ centeredSquare (Rect x y w h) = Rect newX newY dim dim where
|
|||||||
newY = y + (h - dim) / 2
|
newY = y + (h - dim) / 2
|
||||||
|
|
||||||
drawIcon :: Renderer -> StyleState -> IconType -> Rect -> Double -> IO ()
|
drawIcon :: Renderer -> StyleState -> IconType -> Rect -> Double -> IO ()
|
||||||
drawIcon renderer style iconType viewport lw = case iconType of
|
drawIcon renderer style iconType renderArea lw = case iconType of
|
||||||
IconClose ->
|
IconClose ->
|
||||||
drawTimesX renderer viewport lw (Just fgColor)
|
drawTimesX renderer renderArea lw (Just fgColor)
|
||||||
IconPlus -> do
|
IconPlus -> do
|
||||||
beginPath renderer
|
beginPath renderer
|
||||||
setFillColor renderer fgColor
|
setFillColor renderer fgColor
|
||||||
@ -97,7 +97,7 @@ drawIcon renderer style iconType viewport lw = case iconType of
|
|||||||
renderRect renderer (Rect x (cy - hw) w lw)
|
renderRect renderer (Rect x (cy - hw) w lw)
|
||||||
fill renderer
|
fill renderer
|
||||||
where
|
where
|
||||||
Rect x y w h = viewport
|
Rect x y w h = renderArea
|
||||||
fgColor = fromMaybe (rgb 0 0 0) (style ^. L.fgColor)
|
fgColor = fromMaybe (rgb 0 0 0) (style ^. L.fgColor)
|
||||||
hw = lw / 2
|
hw = lw / 2
|
||||||
cx = x + w / 2
|
cx = x + w / 2
|
||||||
|
@ -420,7 +420,7 @@ makeInputField config state = widget where
|
|||||||
newState = tmpState { _ifsDragSelActive = True }
|
newState = tmpState { _ifsDragSelActive = True }
|
||||||
newNode = node
|
newNode = node
|
||||||
& L.widget .~ makeInputField config newState
|
& L.widget .~ makeInputField config newState
|
||||||
reqs = [RenderEvery widgetId caretMs Nothing, StartTextInput viewport]
|
reqs = [RenderEvery widgetId caretMs Nothing, StartTextInput renderArea]
|
||||||
newResult = resultReqs newNode reqs
|
newResult = resultReqs newNode reqs
|
||||||
focusResult = handleFocusChange _ifcOnFocus _ifcOnFocusReq config newNode
|
focusResult = handleFocusChange _ifcOnFocus _ifcOnFocusReq config newNode
|
||||||
result = maybe newResult (newResult <>) focusResult
|
result = maybe newResult (newResult <>) focusResult
|
||||||
@ -438,7 +438,7 @@ makeInputField config state = widget where
|
|||||||
where
|
where
|
||||||
path = node ^. L.info . L.path
|
path = node ^. L.info . L.path
|
||||||
widgetId = node ^. L.info . L.widgetId
|
widgetId = node ^. L.info . L.widgetId
|
||||||
viewport = node ^. L.info . L.viewport
|
renderArea = node ^. L.info . L.renderArea
|
||||||
focused = isNodeFocused wenv node
|
focused = isNodeFocused wenv node
|
||||||
dragSelectText btn
|
dragSelectText btn
|
||||||
= wenv ^. L.mainButton == btn
|
= wenv ^. L.mainButton == btn
|
||||||
@ -509,10 +509,9 @@ makeInputField config state = widget where
|
|||||||
factor = 1
|
factor = 1
|
||||||
sizeReq = (FlexSize targetW factor, FixedSize h)
|
sizeReq = (FlexSize targetW factor, FixedSize h)
|
||||||
|
|
||||||
resize wenv viewport renderArea node = resultWidget newNode where
|
resize wenv renderArea node = resultWidget newNode where
|
||||||
-- newTextState depends on having correct viewport/renderArea in the node
|
-- newTextState depends on having correct renderArea in the node
|
||||||
tempNode = node
|
tempNode = node
|
||||||
& L.info . L.viewport .~ viewport
|
|
||||||
& L.info . L.renderArea .~ renderArea
|
& L.info . L.renderArea .~ renderArea
|
||||||
newState = newTextState wenv tempNode state currVal currText currPos currSel
|
newState = newTextState wenv tempNode state currVal currText currPos currSel
|
||||||
newNode = tempNode
|
newNode = tempNode
|
||||||
|
@ -113,10 +113,10 @@ makeKeystroke bindings config = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
resized = (resultWidget node, Seq.singleton (contentArea, contentArea))
|
resized = (resultWidget node, Seq.singleton contentArea)
|
||||||
|
|
||||||
keyStrokeActive :: WidgetEnv s e -> KeyCode -> KeyStroke -> Bool
|
keyStrokeActive :: WidgetEnv s e -> KeyCode -> KeyStroke -> Bool
|
||||||
keyStrokeActive wenv code ks = currValid && allPressed && validMods where
|
keyStrokeActive wenv code ks = currValid && allPressed && validMods where
|
||||||
|
@ -149,7 +149,7 @@ makeLabel config state = widget where
|
|||||||
| abs factorH < 0.01 = FixedSize h
|
| abs factorH < 0.01 = FixedSize h
|
||||||
| otherwise = FlexSize h factorH
|
| otherwise = FlexSize h factorH
|
||||||
|
|
||||||
resize wenv viewport renderArea node = resultWidget newNode where
|
resize wenv renderArea node = resultWidget newNode where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
rect = fromMaybe def (removeOuterBounds style renderArea)
|
rect = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
newTextStyle = style ^. L.text
|
newTextStyle = style ^. L.text
|
||||||
|
@ -398,11 +398,11 @@ makeListView widgetData items makeRow config state = widget where
|
|||||||
newSizeReqW = _wniSizeReqW . _wnInfo $ child
|
newSizeReqW = _wniSizeReqW . _wnInfo $ child
|
||||||
newSizeReqH = _wniSizeReqH . _wnInfo $ child
|
newSizeReqH = _wniSizeReqH . _wnInfo $ child
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
newState = state { _resizeReq = False }
|
newState = state { _resizeReq = False }
|
||||||
newNode = node
|
newNode = node
|
||||||
& L.widget .~ makeListView widgetData items makeRow config newState
|
& L.widget .~ makeListView widgetData items makeRow config newState
|
||||||
assignedArea = Seq.singleton (viewport, renderArea)
|
assignedArea = Seq.singleton renderArea
|
||||||
resized = (resultWidget newNode, assignedArea)
|
resized = (resultWidget newNode, assignedArea)
|
||||||
|
|
||||||
updateStyles
|
updateStyles
|
||||||
|
@ -205,42 +205,29 @@ makeNode widget managedWidget = defaultWidgetNode "scroll" widget
|
|||||||
|
|
||||||
makeScroll :: ScrollCfg -> ScrollState -> Widget s e
|
makeScroll :: ScrollCfg -> ScrollState -> Widget s e
|
||||||
makeScroll config state = widget where
|
makeScroll config state = widget where
|
||||||
baseWidget = createContainer state def {
|
widget = createContainer state def {
|
||||||
|
containerChildrenOffset = Just offset,
|
||||||
|
containerUseScissor = True,
|
||||||
containerGetBaseStyle = getBaseStyle,
|
containerGetBaseStyle = getBaseStyle,
|
||||||
containerUpdateCWenv = updateCWenv,
|
|
||||||
containerRestore = restore,
|
containerRestore = restore,
|
||||||
containerUpdateEvent = updateEvent,
|
|
||||||
containerHandleEvent = handleEvent,
|
containerHandleEvent = handleEvent,
|
||||||
containerHandleMessage = handleMessage,
|
containerHandleMessage = handleMessage,
|
||||||
containerGetSizeReq = getSizeReq,
|
containerGetSizeReq = getSizeReq,
|
||||||
containerResize = resize
|
containerResize = resize,
|
||||||
}
|
containerRenderAfter = renderAfter
|
||||||
widget = baseWidget {
|
|
||||||
widgetRender = render
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollState dragging dx dy cs = state
|
ScrollState dragging dx dy cs = state
|
||||||
Size childWidth childHeight = cs
|
Size childWidth childHeight = cs
|
||||||
|
offset = Point dx dy
|
||||||
|
|
||||||
getBaseStyle wenv node = _scStyle config >>= handler where
|
getBaseStyle wenv node = _scStyle config >>= handler where
|
||||||
handler lstyle = Just $ collectTheme wenv (cloneLens lstyle)
|
handler lstyle = Just $ collectTheme wenv (cloneLens lstyle)
|
||||||
|
|
||||||
updateCWenv wenv cidx cnode node = newWenv where
|
|
||||||
offset = Point dx dy
|
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
newWenv = wenv
|
|
||||||
& L.viewport .~ moveRect (negPoint offset) viewport
|
|
||||||
& L.inputStatus . L.mousePos %~ addPoint (negPoint offset)
|
|
||||||
& L.inputStatus . L.mousePosPrev %~ addPoint (negPoint offset)
|
|
||||||
& L.offset .~ offset
|
|
||||||
|
|
||||||
restore wenv oldState oldNode node = resultWidget newNode where
|
restore wenv oldState oldNode node = resultWidget newNode where
|
||||||
newNode = node
|
newNode = node
|
||||||
& L.widget .~ makeScroll config oldState
|
& L.widget .~ makeScroll config oldState
|
||||||
|
|
||||||
updateEvent wenv evt node = translateEvent (negPoint offset) evt where
|
|
||||||
offset = Point dx dy
|
|
||||||
|
|
||||||
handleEvent wenv target evt node = case evt of
|
handleEvent wenv target evt node = case evt of
|
||||||
ButtonAction point btn status _ -> result where
|
ButtonAction point btn status _ -> result where
|
||||||
leftPressed = status == PressedBtn && btn == wenv ^. L.mainButton
|
leftPressed = status == PressedBtn && btn == wenv ^. L.mainButton
|
||||||
@ -311,9 +298,10 @@ makeScroll config state = widget where
|
|||||||
handleScrollMessage (ScrollTo rect) = scrollTo wenv node rect
|
handleScrollMessage (ScrollTo rect) = scrollTo wenv node rect
|
||||||
result = cast message >>= handleScrollMessage
|
result = cast message >>= handleScrollMessage
|
||||||
|
|
||||||
scrollTo wenv node rect = result where
|
scrollTo wenv node targetRect = result where
|
||||||
style = scrollActiveStyle wenv node
|
style = scrollActiveStyle wenv node
|
||||||
contentArea = getContentArea style node
|
contentArea = getContentArea style node
|
||||||
|
rect = moveRect offset targetRect
|
||||||
Rect rx ry rw rh = rect
|
Rect rx ry rw rh = rect
|
||||||
Rect cx cy cw ch = contentArea
|
Rect cx cy cw ch = contentArea
|
||||||
diffL = cx - rx
|
diffL = cx - rx
|
||||||
@ -356,13 +344,8 @@ makeScroll config state = widget where
|
|||||||
}
|
}
|
||||||
|
|
||||||
rebuildWidget wenv newState node = result where
|
rebuildWidget wenv newState node = result where
|
||||||
ScrollState _ dx dy _ = newState
|
|
||||||
offset = Point dx dy
|
|
||||||
pviewport = node ^. L.info . L.viewport
|
|
||||||
cviewport = moveRect (negPoint offset) pviewport
|
|
||||||
newNode = node
|
newNode = node
|
||||||
& L.widget .~ makeScroll config newState
|
& L.widget .~ makeScroll config newState
|
||||||
& L.children . ix 0 . L.info . L.viewport .~ cviewport
|
|
||||||
result = resultWidget newNode
|
result = resultWidget newNode
|
||||||
|
|
||||||
getSizeReq :: ContainerGetSizeReqHandler s e a
|
getSizeReq :: ContainerGetSizeReqHandler s e a
|
||||||
@ -377,7 +360,7 @@ makeScroll config state = widget where
|
|||||||
sizeReq = (FlexSize w factor, FlexSize h factor)
|
sizeReq = (FlexSize w factor, FlexSize h factor)
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = result where
|
resize wenv renderArea children node = result where
|
||||||
style = scrollActiveStyle wenv node
|
style = scrollActiveStyle wenv node
|
||||||
scrollType = fromMaybe ScrollBoth (_scScrollType config)
|
scrollType = fromMaybe ScrollBoth (_scScrollType config)
|
||||||
|
|
||||||
@ -398,7 +381,6 @@ makeScroll config state = widget where
|
|||||||
newDx = scrollAxis dx areaW cw
|
newDx = scrollAxis dx areaW cw
|
||||||
newDy = scrollAxis dy areaH ch
|
newDy = scrollAxis dy areaH ch
|
||||||
cRenderArea = Rect cl ct areaW areaH
|
cRenderArea = Rect cl ct areaW areaH
|
||||||
cViewport = fromMaybe def (intersectRects viewport cRenderArea)
|
|
||||||
newState = state {
|
newState = state {
|
||||||
_sstDeltaX = newDx,
|
_sstDeltaX = newDx,
|
||||||
_sstDeltaY = newDy,
|
_sstDeltaY = newDy,
|
||||||
@ -406,21 +388,7 @@ makeScroll config state = widget where
|
|||||||
}
|
}
|
||||||
newNode = resultWidget $ node
|
newNode = resultWidget $ node
|
||||||
& L.widget .~ makeScroll config newState
|
& L.widget .~ makeScroll config newState
|
||||||
result = (newNode, Seq.singleton (cViewport, cRenderArea))
|
result = (newNode, Seq.singleton cRenderArea)
|
||||||
|
|
||||||
render renderer wenv node =
|
|
||||||
drawInScissor renderer True viewport $
|
|
||||||
drawStyledAction renderer renderArea style $ \_ -> do
|
|
||||||
drawInTranslation renderer offset $
|
|
||||||
widgetRender (child ^. L.widget) renderer cwenv child
|
|
||||||
renderAfter renderer wenv node
|
|
||||||
where
|
|
||||||
style = scrollActiveStyle wenv node
|
|
||||||
child = node ^. L.children ^?! ix 0
|
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
renderArea = node ^. L.info . L.renderArea
|
|
||||||
cwenv = updateCWenv wenv 0 child node
|
|
||||||
offset = Point dx dy
|
|
||||||
|
|
||||||
renderAfter renderer wenv node = do
|
renderAfter renderer wenv node = do
|
||||||
when hScrollRequired $
|
when hScrollRequired $
|
||||||
|
@ -100,7 +100,6 @@ type SingleGetSizeReqHandler s e a
|
|||||||
type SingleResizeHandler s e
|
type SingleResizeHandler s e
|
||||||
= WidgetEnv s e
|
= WidgetEnv s e
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
|
|
||||||
@ -271,7 +270,6 @@ loadStateHandler single wenv oldInfo newNode nodeHandler = newResult where
|
|||||||
getBaseStyle = singleGetBaseStyle single
|
getBaseStyle = singleGetBaseStyle single
|
||||||
tempNode = newNode
|
tempNode = newNode
|
||||||
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
& L.info . L.widgetId .~ oldInfo ^. L.widgetId
|
||||||
& L.info . L.viewport .~ oldInfo ^. L.viewport
|
|
||||||
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
& L.info . L.renderArea .~ oldInfo ^. L.renderArea
|
||||||
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
& L.info . L.sizeReqW .~ oldInfo ^. L.sizeReqW
|
||||||
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
& L.info . L.sizeReqH .~ oldInfo ^. L.sizeReqH
|
||||||
@ -404,29 +402,23 @@ handleSizeReqChange single wenv node evt mResult = result where
|
|||||||
| otherwise = mResult
|
| otherwise = mResult
|
||||||
|
|
||||||
defaultResize :: SingleResizeHandler s e
|
defaultResize :: SingleResizeHandler s e
|
||||||
defaultResize wenv viewport renderArea node = resultWidget node
|
defaultResize wenv renderArea node = resultWidget node
|
||||||
|
|
||||||
resizeHandlerWrapper
|
resizeHandlerWrapper
|
||||||
:: Single s e a
|
:: Single s e a
|
||||||
-> WidgetEnv s e
|
-> WidgetEnv s e
|
||||||
-> Rect
|
-> Rect
|
||||||
-> Rect
|
|
||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> WidgetResult s e
|
-> WidgetResult s e
|
||||||
resizeHandlerWrapper single wenv viewport renderArea node = result where
|
resizeHandlerWrapper single wenv renderArea node = result where
|
||||||
useCustomSize = singleUseCustomSize single
|
useCustomSize = singleUseCustomSize single
|
||||||
handler = singleResize single
|
handler = singleResize single
|
||||||
tmpRes = handler wenv viewport renderArea node
|
tmpRes = handler wenv renderArea node
|
||||||
lensVp = L.info . L.viewport
|
|
||||||
lensRa = L.info . L.renderArea
|
lensRa = L.info . L.renderArea
|
||||||
newVp
|
|
||||||
| useCustomSize = tmpRes ^. L.node . lensVp
|
|
||||||
| otherwise = viewport
|
|
||||||
newRa
|
newRa
|
||||||
| useCustomSize = tmpRes ^. L.node . lensRa
|
| useCustomSize = tmpRes ^. L.node . lensRa
|
||||||
| otherwise = renderArea
|
| otherwise = renderArea
|
||||||
result = tmpRes
|
result = tmpRes
|
||||||
& L.node . L.info . L.viewport .~ newVp
|
|
||||||
& L.node . L.info . L.renderArea .~ newRa
|
& L.node . L.info . L.renderArea .~ newRa
|
||||||
|
|
||||||
defaultRender :: SingleRenderHandler s e
|
defaultRender :: SingleRenderHandler s e
|
||||||
@ -439,12 +431,11 @@ renderWrapper
|
|||||||
-> WidgetNode s e
|
-> WidgetNode s e
|
||||||
-> IO ()
|
-> IO ()
|
||||||
renderWrapper single renderer wenv node =
|
renderWrapper single renderer wenv node =
|
||||||
drawInScissor renderer useScissor viewport $
|
drawInScissor renderer useScissor renderArea $
|
||||||
drawStyledAction renderer renderArea style $ \_ ->
|
drawStyledAction renderer renderArea style $ \_ ->
|
||||||
handler renderer wenv node
|
handler renderer wenv node
|
||||||
where
|
where
|
||||||
handler = singleRender single
|
handler = singleRender single
|
||||||
useScissor = singleUseScissor single
|
useScissor = singleUseScissor single
|
||||||
style = singleGetActiveStyle single wenv node
|
style = singleGetActiveStyle single wenv node
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
renderArea = node ^. L.info . L.renderArea
|
renderArea = node ^. L.info . L.renderArea
|
||||||
|
@ -177,7 +177,7 @@ makeSplit isHorizontal config state = widget where
|
|||||||
}
|
}
|
||||||
tmpNode = node
|
tmpNode = node
|
||||||
& L.widget .~ makeSplit isHorizontal config newState
|
& L.widget .~ makeSplit isHorizontal config newState
|
||||||
newNode = widgetResize (tmpNode ^. L.widget) wenv vp ra tmpNode
|
newNode = widgetResize (tmpNode ^. L.widget) wenv ra tmpNode
|
||||||
resultDrag
|
resultDrag
|
||||||
| handlePos /= newHandlePos = newNode
|
| handlePos /= newHandlePos = newNode
|
||||||
& L.requests <>~ Seq.fromList [cursorIconReq, RenderOnce]
|
& L.requests <>~ Seq.fromList [cursorIconReq, RenderOnce]
|
||||||
@ -188,7 +188,6 @@ makeSplit isHorizontal config state = widget where
|
|||||||
maxSize = _spsMaxSize state
|
maxSize = _spsMaxSize state
|
||||||
handlePos = _spsHandlePos state
|
handlePos = _spsHandlePos state
|
||||||
handleRect = _spsHandleRect state
|
handleRect = _spsHandleRect state
|
||||||
vp = node ^. L.info . L.viewport
|
|
||||||
ra = node ^. L.info . L.renderArea
|
ra = node ^. L.info . L.renderArea
|
||||||
children = node ^. L.children
|
children = node ^. L.children
|
||||||
isTarget = target == node ^. L.info . L.path
|
isTarget = target == node ^. L.info . L.path
|
||||||
@ -214,7 +213,7 @@ makeSplit isHorizontal config state = widget where
|
|||||||
| isHorizontal = foldl1 sizeReqMergeMax [reqH1, reqH2]
|
| isHorizontal = foldl1 sizeReqMergeMax [reqH1, reqH2]
|
||||||
| otherwise = foldl1 sizeReqMergeSum [reqWS, reqH1, reqH2]
|
| otherwise = foldl1 sizeReqMergeSum [reqWS, reqH1, reqH2]
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
Rect rx ry rw rh = contentArea
|
Rect rx ry rw rh = contentArea
|
||||||
@ -260,8 +259,7 @@ makeSplit isHorizontal config state = widget where
|
|||||||
& L.events .~ Seq.fromList events
|
& L.events .~ Seq.fromList events
|
||||||
& L.requests .~ Seq.fromList (requestPos ++ reqOnChange)
|
& L.requests .~ Seq.fromList (requestPos ++ reqOnChange)
|
||||||
newRas = Seq.fromList [rect1, rect2]
|
newRas = Seq.fromList [rect1, rect2]
|
||||||
assignedArea = Seq.zip newRas newRas
|
resized = (result, newRas)
|
||||||
resized = (result, assignedArea)
|
|
||||||
|
|
||||||
getValidHandlePos maxDim rect point children = addPoint origin newPoint where
|
getValidHandlePos maxDim rect point children = addPoint origin newPoint where
|
||||||
Rect rx ry _ _ = rect
|
Rect rx ry _ _ = rect
|
||||||
|
@ -91,19 +91,17 @@ makeStack isHorizontal config = widget where
|
|||||||
where
|
where
|
||||||
vreqs = accesor <$> vchildren
|
vreqs = accesor <$> vchildren
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
(newViewports, newDim) = assignStackAreas isHorizontal contentArea children
|
(newRas, newDim) = assignStackAreas isHorizontal contentArea children
|
||||||
newCa
|
newCa
|
||||||
| isHorizontal = contentArea & L.w .~ newDim
|
| isHorizontal = contentArea & L.w .~ newDim
|
||||||
| otherwise = contentArea & L.h .~ newDim
|
| otherwise = contentArea & L.h .~ newDim
|
||||||
newRa = fromMaybe newCa (addOuterBounds style newCa)
|
newRenderArea = fromMaybe newCa (addOuterBounds style newCa)
|
||||||
newNode = node
|
newNode = node
|
||||||
& L.info . L.viewport .~ newRa
|
& L.info . L.renderArea .~ newRenderArea
|
||||||
& L.info . L.renderArea .~ newRa
|
resized = (resultWidget newNode, newRas)
|
||||||
assignedArea = Seq.zip newViewports newViewports
|
|
||||||
resized = (resultWidget newNode, assignedArea)
|
|
||||||
|
|
||||||
assignStackAreas :: Bool -> Rect -> Seq (WidgetNode s e) -> (Seq Rect, Double)
|
assignStackAreas :: Bool -> Rect -> Seq (WidgetNode s e) -> (Seq Rect, Double)
|
||||||
assignStackAreas isHorizontal contentArea children = result where
|
assignStackAreas isHorizontal contentArea children = result where
|
||||||
|
@ -41,7 +41,7 @@ makeTheme theme = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
contentArea = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
resized = (resultWidget node, Seq.singleton (contentArea, contentArea))
|
resized = (resultWidget node, Seq.singleton contentArea)
|
||||||
|
@ -145,8 +145,8 @@ makeTooltip caption config state = widget where
|
|||||||
newReqH = child ^. L.info . L.sizeReqH
|
newReqH = child ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
resize :: ContainerResizeHandler s e
|
resize :: ContainerResizeHandler s e
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
resized = (resultWidget node, Seq.singleton (renderArea, renderArea))
|
resized = (resultWidget node, Seq.singleton renderArea)
|
||||||
|
|
||||||
render renderer wenv node = do
|
render renderer wenv node = do
|
||||||
forM_ children $ \child ->
|
forM_ children $ \child ->
|
||||||
@ -187,7 +187,7 @@ makeTooltip caption config state = widget where
|
|||||||
tooltipDisplayed wenv node = displayed where
|
tooltipDisplayed wenv node = displayed where
|
||||||
TooltipState lastPos lastPosTs = state
|
TooltipState lastPos lastPosTs = state
|
||||||
ts = wenv ^. L.timestamp
|
ts = wenv ^. L.timestamp
|
||||||
viewport = node ^. L.info . L.viewport
|
renderArea = node ^. L.info . L.renderArea
|
||||||
inViewport = pointInRect lastPos viewport
|
inRenderArea = pointInRect lastPos renderArea
|
||||||
delayEllapsed = ts - lastPosTs >= delay
|
delayEllapsed = ts - lastPosTs >= delay
|
||||||
displayed = inViewport && delayEllapsed
|
displayed = inRenderArea && delayEllapsed
|
||||||
|
@ -24,16 +24,16 @@ import Monomer.Graphics.Types
|
|||||||
import qualified Monomer.Lens as L
|
import qualified Monomer.Lens as L
|
||||||
|
|
||||||
isPointInNodeVp :: Point -> WidgetNode s e -> Bool
|
isPointInNodeVp :: Point -> WidgetNode s e -> Bool
|
||||||
isPointInNodeVp p node = pointInRect p (node ^. L.info . L.viewport)
|
isPointInNodeVp p node = pointInRect p (node ^. L.info . L.renderArea)
|
||||||
|
|
||||||
isPointInNodeEllipse :: Point -> WidgetNode s e -> Bool
|
isPointInNodeEllipse :: Point -> WidgetNode s e -> Bool
|
||||||
isPointInNodeEllipse p node = pointInEllipse p (node ^. L.info . L.viewport)
|
isPointInNodeEllipse p node = pointInEllipse p (node ^. L.info . L.renderArea)
|
||||||
|
|
||||||
isNodeActive :: WidgetEnv s e -> WidgetNode s e -> Bool
|
isNodeActive :: WidgetEnv s e -> WidgetNode s e -> Bool
|
||||||
isNodeActive wenv node = validPos && pressed where
|
isNodeActive wenv node = validPos && pressed where
|
||||||
viewport = node ^. L.info . L.viewport
|
renderArea = node ^. L.info . L.renderArea
|
||||||
mousePos = wenv ^. L.inputStatus . L.mousePos
|
mousePos = wenv ^. L.inputStatus . L.mousePos
|
||||||
validPos = pointInRect mousePos viewport
|
validPos = pointInRect mousePos renderArea
|
||||||
pressed = isNodePressed wenv node
|
pressed = isNodePressed wenv node
|
||||||
|
|
||||||
isNodePressed :: WidgetEnv s e -> WidgetNode s e -> Bool
|
isNodePressed :: WidgetEnv s e -> WidgetNode s e -> Bool
|
||||||
@ -49,9 +49,9 @@ isNodeDragged wenv node = mainPressed && draggedPath == Just nodePath where
|
|||||||
|
|
||||||
isNodeHovered :: WidgetEnv s e -> WidgetNode s e -> Bool
|
isNodeHovered :: WidgetEnv s e -> WidgetNode s e -> Bool
|
||||||
isNodeHovered wenv node = validPos && validPress && topLevel where
|
isNodeHovered wenv node = validPos && validPress && topLevel where
|
||||||
viewport = node ^. L.info . L.viewport
|
renderArea = node ^. L.info . L.renderArea
|
||||||
mousePos = wenv ^. L.inputStatus . L.mousePos
|
mousePos = wenv ^. L.inputStatus . L.mousePos
|
||||||
validPos = pointInRect mousePos viewport
|
validPos = pointInRect mousePos renderArea
|
||||||
pressed = wenv ^. L.mainBtnPress ^? _Just . _1
|
pressed = wenv ^. L.mainBtnPress ^? _Just . _1
|
||||||
validPress = isNothing pressed || isNodePressed wenv node
|
validPress = isNothing pressed || isNodePressed wenv node
|
||||||
topLevel = isNodeTopLevel wenv node
|
topLevel = isNodeTopLevel wenv node
|
||||||
|
@ -46,11 +46,12 @@ defaultWidgetNode widgetType widget = WidgetNode {
|
|||||||
_wnChildren = Seq.empty
|
_wnChildren = Seq.empty
|
||||||
}
|
}
|
||||||
|
|
||||||
isWidgetVisible :: WidgetNode s e -> Rect -> Bool
|
isWidgetVisible :: WidgetEnv s e -> WidgetNode s e -> Bool
|
||||||
isWidgetVisible node vp = isVisible && isOverlapped where
|
isWidgetVisible wenv node = isVisible && isOverlapped where
|
||||||
info = node ^. L.info
|
info = node ^. L.info
|
||||||
isVisible = info ^. L.visible
|
isVisible = info ^. L.visible
|
||||||
isOverlapped = rectsOverlap vp (info ^. L.viewport)
|
viewport = wenv ^. L.viewport
|
||||||
|
isOverlapped = rectsOverlap viewport (info ^. L.renderArea)
|
||||||
|
|
||||||
visibleChildrenChanged :: WidgetNode s e -> WidgetNode s e -> Bool
|
visibleChildrenChanged :: WidgetNode s e -> WidgetNode s e -> Bool
|
||||||
visibleChildrenChanged oldNode newNode = oldVisible /= newVisible where
|
visibleChildrenChanged oldNode newNode = oldVisible /= newVisible where
|
||||||
|
@ -144,21 +144,19 @@ makeZStack config state = widget where
|
|||||||
where
|
where
|
||||||
vreqs = accesor <$> vchildren
|
vreqs = accesor <$> vchildren
|
||||||
|
|
||||||
resize wenv viewport renderArea children node = resized where
|
resize wenv renderArea children node = resized where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
raChild = fromMaybe def (removeOuterBounds style renderArea)
|
raChild = fromMaybe def (removeOuterBounds style renderArea)
|
||||||
vpChild = fromMaybe def (intersectRects viewport raChild)
|
assignedAreas = fmap (const raChild) children
|
||||||
assignedAreas = fmap (const (vpChild, raChild)) children
|
|
||||||
resized = (resultWidget node, assignedAreas)
|
resized = (resultWidget node, assignedAreas)
|
||||||
|
|
||||||
render renderer wenv node =
|
render renderer wenv node =
|
||||||
drawInScissor renderer True viewport $
|
drawInScissor renderer True renderArea $
|
||||||
drawStyledAction renderer renderArea style $ \_ ->
|
drawStyledAction renderer renderArea style $ \_ ->
|
||||||
void $ Seq.traverseWithIndex renderChild children
|
void $ Seq.traverseWithIndex renderChild children
|
||||||
where
|
where
|
||||||
style = activeStyle wenv node
|
style = activeStyle wenv node
|
||||||
children = Seq.reverse $ node ^. L.children
|
children = Seq.reverse $ node ^. L.children
|
||||||
viewport = node ^. L.info . L.viewport
|
|
||||||
renderArea = node ^. L.info . L.renderArea
|
renderArea = node ^. L.info . L.renderArea
|
||||||
isVisible c = c ^. L.info . L.visible
|
isVisible c = c ^. L.info . L.visible
|
||||||
topVisibleIdx = fromMaybe 0 (Seq.findIndexR (_wniVisible . _wnInfo) children)
|
topVisibleIdx = fromMaybe 0 (Seq.findIndexR (_wniVisible . _wnInfo) children)
|
||||||
|
@ -132,7 +132,9 @@ mockWenv model = WidgetEnv {
|
|||||||
_weModel = model,
|
_weModel = model,
|
||||||
_weInputStatus = def,
|
_weInputStatus = def,
|
||||||
_weTimestamp = 0,
|
_weTimestamp = 0,
|
||||||
_weInTopLayer = const True
|
_weInTopLayer = const True,
|
||||||
|
_weViewport = Rect 0 0 testW testH,
|
||||||
|
_weOffset = def
|
||||||
}
|
}
|
||||||
|
|
||||||
mockWenvEvtUnit :: s -> WidgetEnv s ()
|
mockWenvEvtUnit :: s -> WidgetEnv s ()
|
||||||
@ -153,9 +155,9 @@ nodeGetSizeReq wenv node = (sizeReqW, sizeReqH) where
|
|||||||
sizeReqH = node2 ^. L.info . L.sizeReqH
|
sizeReqH = node2 ^. L.info . L.sizeReqH
|
||||||
|
|
||||||
nodeResize :: WidgetEnv s e -> Rect -> WidgetNode s e -> WidgetNode s e
|
nodeResize :: WidgetEnv s e -> Rect -> WidgetNode s e -> WidgetNode s e
|
||||||
nodeResize wenv viewport node = result ^. L.node where
|
nodeResize wenv renderArea node = result ^. L.node where
|
||||||
widget = node ^. L.widget
|
widget = node ^. L.widget
|
||||||
result = widgetResize widget wenv viewport viewport node
|
result = widgetResize widget wenv renderArea node
|
||||||
|
|
||||||
nodeHandleEventCtx
|
nodeHandleEventCtx
|
||||||
:: (Eq s)
|
:: (Eq s)
|
||||||
|
@ -98,14 +98,14 @@ resize = describe "resize" $ do
|
|||||||
|
|
||||||
resizeDefault :: Spec
|
resizeDefault :: Spec
|
||||||
resizeDefault = describe "default" $ do
|
resizeDefault = describe "default" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should have one child" $
|
it "should have one child" $
|
||||||
children `shouldSatisfy` (== 1) . Seq.length
|
children `shouldSatisfy` (== 1) . Seq.length
|
||||||
|
|
||||||
it "should have its children assigned a viewport" $
|
it "should have its children assigned a renderArea" $
|
||||||
cViewport `shouldBe` cvp
|
cRenderArea `shouldBe` cvp
|
||||||
|
|
||||||
where
|
where
|
||||||
wenv = mockWenv ()
|
wenv = mockWenv ()
|
||||||
@ -114,38 +114,38 @@ resizeDefault = describe "default" $ do
|
|||||||
boxNode = box (label "Label")
|
boxNode = box (label "Label")
|
||||||
newNode = nodeInit wenv boxNode
|
newNode = nodeInit wenv boxNode
|
||||||
children = newNode ^. L.children
|
children = newNode ^. L.children
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
cViewport = getChildVp wenv []
|
cRenderArea = getChildRa wenv []
|
||||||
|
|
||||||
resizeExpand :: Spec
|
resizeExpand :: Spec
|
||||||
resizeExpand = describe "expand" $
|
resizeExpand = describe "expand" $
|
||||||
it "should have its children assigned a viewport" $
|
it "should have its children assigned a valid renderArea" $
|
||||||
cViewport `shouldBe` vp
|
cRenderArea `shouldBe` vp
|
||||||
|
|
||||||
where
|
where
|
||||||
wenv = mockWenv ()
|
wenv = mockWenv ()
|
||||||
vp = Rect 0 0 640 480
|
vp = Rect 0 0 640 480
|
||||||
cViewport = getChildVp wenv [expandContent]
|
cRenderArea = getChildRa wenv [expandContent]
|
||||||
|
|
||||||
resizeAlign :: Spec
|
resizeAlign :: Spec
|
||||||
resizeAlign = describe "align" $ do
|
resizeAlign = describe "align" $ do
|
||||||
it "should align its child left" $
|
it "should align its child left" $
|
||||||
childVpL `shouldBe` cvpl
|
childRaL `shouldBe` cvpl
|
||||||
|
|
||||||
it "should align its child right" $
|
it "should align its child right" $
|
||||||
childVpR `shouldBe` cvpr
|
childRaR `shouldBe` cvpr
|
||||||
|
|
||||||
it "should align its child top" $
|
it "should align its child top" $
|
||||||
childVpT `shouldBe` cvpt
|
childRaT `shouldBe` cvpt
|
||||||
|
|
||||||
it "should align its child bottom" $
|
it "should align its child bottom" $
|
||||||
childVpB `shouldBe` cvpb
|
childRaB `shouldBe` cvpb
|
||||||
|
|
||||||
it "should align its child top-left" $
|
it "should align its child top-left" $
|
||||||
childVpTL `shouldBe` cvplt
|
childRaTL `shouldBe` cvplt
|
||||||
|
|
||||||
it "should align its child bottom-right" $
|
it "should align its child bottom-right" $
|
||||||
childVpBR `shouldBe` cvpbr
|
childRaBR `shouldBe` cvpbr
|
||||||
|
|
||||||
where
|
where
|
||||||
wenv = mockWenv ()
|
wenv = mockWenv ()
|
||||||
@ -155,15 +155,15 @@ resizeAlign = describe "align" $ do
|
|||||||
cvpb = Rect 295 460 50 20
|
cvpb = Rect 295 460 50 20
|
||||||
cvplt = Rect 0 0 50 20
|
cvplt = Rect 0 0 50 20
|
||||||
cvpbr = Rect 590 460 50 20
|
cvpbr = Rect 590 460 50 20
|
||||||
childVpL = getChildVp wenv [alignLeft]
|
childRaL = getChildRa wenv [alignLeft]
|
||||||
childVpR = getChildVp wenv [alignRight]
|
childRaR = getChildRa wenv [alignRight]
|
||||||
childVpT = getChildVp wenv [alignTop]
|
childRaT = getChildRa wenv [alignTop]
|
||||||
childVpB = getChildVp wenv [alignBottom]
|
childRaB = getChildRa wenv [alignBottom]
|
||||||
childVpTL = getChildVp wenv [alignTop, alignLeft]
|
childRaTL = getChildRa wenv [alignTop, alignLeft]
|
||||||
childVpBR = getChildVp wenv [alignBottom, alignRight]
|
childRaBR = getChildRa wenv [alignBottom, alignRight]
|
||||||
|
|
||||||
getChildVp :: Eq s => WidgetEnv s e -> [BoxCfg s e] -> Rect
|
getChildRa :: Eq s => WidgetEnv s e -> [BoxCfg s e] -> Rect
|
||||||
getChildVp wenv cfgs = childLC ^. L.info . L.viewport where
|
getChildRa wenv cfgs = childLC ^. L.info . L.renderArea where
|
||||||
lblNode = label "Label"
|
lblNode = label "Label"
|
||||||
boxNodeLC = nodeInit wenv (box_ cfgs lblNode)
|
boxNodeLC = nodeInit wenv (box_ cfgs lblNode)
|
||||||
childLC = Seq.index (boxNodeLC ^. L.children) 0
|
childLC = Seq.index (boxNodeLC ^. L.children) 0
|
||||||
|
@ -38,7 +38,7 @@ import qualified Monomer.Widgets.Single as SG
|
|||||||
data MainEvt
|
data MainEvt
|
||||||
= MainBtnClicked
|
= MainBtnClicked
|
||||||
| ChildClicked
|
| ChildClicked
|
||||||
| MainResize (Rect, Rect)
|
| MainResize Rect
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
data ChildEvt
|
data ChildEvt
|
||||||
@ -112,7 +112,7 @@ handleEventBasic = describe "handleEventBasic" $ do
|
|||||||
model [evtClick (Point 10 10)] ^. clicks `shouldBe` 1
|
model [evtClick (Point 10 10)] ^. clicks `shouldBe` 1
|
||||||
|
|
||||||
it "should generate a resize event on init" $
|
it "should generate a resize event on init" $
|
||||||
events [] `shouldBe` Seq.fromList [MainResize (vp, vp)]
|
events [] `shouldBe` Seq.fromList [MainResize vp]
|
||||||
|
|
||||||
where
|
where
|
||||||
wenv = mockWenv def
|
wenv = mockWenv def
|
||||||
@ -317,11 +317,8 @@ getSizeReq = describe "getSizeReq" $ do
|
|||||||
|
|
||||||
resize :: Spec
|
resize :: Spec
|
||||||
resize = describe "resize" $ do
|
resize = describe "resize" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign the same viewport size to its child" $
|
|
||||||
childrenVp `shouldBe` Seq.singleton cvp1
|
|
||||||
|
|
||||||
it "should assign the same renderArea size to its child" $
|
it "should assign the same renderArea size to its child" $
|
||||||
childrenRa `shouldBe` Seq.singleton cvp1
|
childrenRa `shouldBe` Seq.singleton cvp1
|
||||||
@ -336,6 +333,5 @@ resize = describe "resize" $ do
|
|||||||
cmpNode = composite "main" id buildUI handleEvent
|
cmpNode = composite "main" id buildUI handleEvent
|
||||||
tmpNode = nodeInit wenv cmpNode
|
tmpNode = nodeInit wenv cmpNode
|
||||||
newNode = widgetSave (tmpNode ^. L.widget) wenv tmpNode
|
newNode = widgetSave (tmpNode ^. L.widget) wenv tmpNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
@ -118,8 +118,8 @@ resize = describe "resize" $ do
|
|||||||
|
|
||||||
resizeEmpty :: Spec
|
resizeEmpty :: Spec
|
||||||
resizeEmpty = describe "empty" $ do
|
resizeEmpty = describe "empty" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should not have children" $
|
it "should not have children" $
|
||||||
children `shouldSatisfy` Seq.null
|
children `shouldSatisfy` Seq.null
|
||||||
@ -129,16 +129,13 @@ resizeEmpty = describe "empty" $ do
|
|||||||
vp = Rect 0 0 640 480
|
vp = Rect 0 0 640 480
|
||||||
gridNode = vgrid []
|
gridNode = vgrid []
|
||||||
newNode = nodeInit wenv gridNode
|
newNode = nodeInit wenv gridNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
children = newNode ^. L.children
|
children = newNode ^. L.children
|
||||||
|
|
||||||
resizeItemsH :: Spec
|
resizeItemsH :: Spec
|
||||||
resizeItemsH = describe "several items, horizontal" $ do
|
resizeItemsH = describe "several items, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign the same viewport size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign the same renderArea size to each children" $
|
it "should assign the same renderArea size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -155,17 +152,13 @@ resizeItemsH = describe "several items, horizontal" $ do
|
|||||||
label "Label 3"
|
label "Label 3"
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv gridNode
|
newNode = nodeInit wenv gridNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeItemsV :: Spec
|
resizeItemsV :: Spec
|
||||||
resizeItemsV = describe "several items, vertical, one not visible" $ do
|
resizeItemsV = describe "several items, vertical, one not visible" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign the same viewport size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4]
|
|
||||||
|
|
||||||
it "should assign the same renderArea size to each children" $
|
it "should assign the same renderArea size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4]
|
||||||
@ -184,6 +177,5 @@ resizeItemsV = describe "several items, vertical, one not visible" $ do
|
|||||||
label "Label 3"
|
label "Label 3"
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv gridNode
|
newNode = nodeInit wenv gridNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
@ -21,11 +21,8 @@ spec = describe "Scroll"
|
|||||||
|
|
||||||
resize :: Spec
|
resize :: Spec
|
||||||
resize = describe "resize" $ do
|
resize = describe "resize" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign the same viewport scroll has" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1]
|
|
||||||
|
|
||||||
it "should assign all the requested space" $
|
it "should assign all the requested space" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cra1]
|
childrenRa `shouldBe` Seq.fromList [cra1]
|
||||||
@ -37,6 +34,5 @@ resize = describe "resize" $ do
|
|||||||
cra1 = Rect 0 0 3000 2000
|
cra1 = Rect 0 0 3000 2000
|
||||||
scrollNode = scroll (label "" `style` [width 3000, height 2000])
|
scrollNode = scroll (label "" `style` [width 3000, height 2000])
|
||||||
newNode = nodeInit wenv scrollNode
|
newNode = nodeInit wenv scrollNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
@ -73,8 +73,8 @@ resize = describe "resize" $ do
|
|||||||
|
|
||||||
resizeEmpty :: Spec
|
resizeEmpty :: Spec
|
||||||
resizeEmpty = describe "empty" $ do
|
resizeEmpty = describe "empty" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should not have children" $
|
it "should not have children" $
|
||||||
children `shouldSatisfy` Seq.null
|
children `shouldSatisfy` Seq.null
|
||||||
@ -85,16 +85,13 @@ resizeEmpty = describe "empty" $ do
|
|||||||
vp = Rect 0 0 640 0
|
vp = Rect 0 0 640 0
|
||||||
vstackNode = vstack []
|
vstackNode = vstack []
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
children = newNode ^. L.children
|
children = newNode ^. L.children
|
||||||
|
|
||||||
resizeFlexibleH :: Spec
|
resizeFlexibleH :: Spec
|
||||||
resizeFlexibleH = describe "flexible items, horizontal" $ do
|
resizeFlexibleH = describe "flexible items, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -111,17 +108,13 @@ resizeFlexibleH = describe "flexible items, horizontal" $ do
|
|||||||
label "Label 3"
|
label "Label 3"
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv hstackNode
|
newNode = nodeInit wenv hstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeFlexibleV :: Spec
|
resizeFlexibleV :: Spec
|
||||||
resizeFlexibleV = describe "flexible items, vertical" $ do
|
resizeFlexibleV = describe "flexible items, vertical" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -138,14 +131,13 @@ resizeFlexibleV = describe "flexible items, vertical" $ do
|
|||||||
label "Label 3" `style` [flexHeight 20]
|
label "Label 3" `style` [flexHeight 20]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeStrictFlexH :: Spec
|
resizeStrictFlexH :: Spec
|
||||||
resizeStrictFlexH = describe "strict/flexible items, horizontal" $ do
|
resizeStrictFlexH = describe "strict/flexible items, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign requested size to the main labels and the rest to grid" $
|
it "should assign requested size to the main labels and the rest to grid" $
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -165,17 +157,14 @@ resizeStrictFlexH = describe "strict/flexible items, horizontal" $ do
|
|||||||
label "Label 3"
|
label "Label 3"
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv hstackNode
|
newNode = nodeInit wenv hstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
childrenVp = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeStrictFlexV :: Spec
|
resizeStrictFlexV :: Spec
|
||||||
resizeStrictFlexV = describe "strict/flexible items, vertical" $ do
|
resizeStrictFlexV = describe "strict/flexible items, vertical" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign requested size to the main labels and the rest to grid" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign requested size to the main labels and the rest to grid" $
|
it "should assign requested size to the main labels and the rest to grid" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -192,17 +181,13 @@ resizeStrictFlexV = describe "strict/flexible items, vertical" $ do
|
|||||||
label "Label 3" `style` [flexHeight 100]
|
label "Label 3" `style` [flexHeight 100]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeMixedH :: Spec
|
resizeMixedH :: Spec
|
||||||
resizeMixedH = describe "mixed items, horizontal" $ do
|
resizeMixedH = describe "mixed items, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2]
|
||||||
@ -219,18 +204,14 @@ resizeMixedH = describe "mixed items, horizontal" $ do
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv hstackNode
|
newNode = nodeInit wenv hstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
firstChild = Seq.index (newNode ^. L.children) 0
|
firstChild = Seq.index (newNode ^. L.children) 0
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> firstChild ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> firstChild ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> firstChild ^. L.children
|
||||||
|
|
||||||
resizeMixedV :: Spec
|
resizeMixedV :: Spec
|
||||||
resizeMixedV = describe "mixed items, vertical" $ do
|
resizeMixedV = describe "mixed items, vertical" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -249,18 +230,14 @@ resizeMixedV = describe "mixed items, vertical" $ do
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
firstChild = Seq.index (newNode ^. L.children) 0
|
firstChild = Seq.index (newNode ^. L.children) 0
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> firstChild ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> firstChild ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> firstChild ^. L.children
|
||||||
|
|
||||||
resizeAllV :: Spec
|
resizeAllV :: Spec
|
||||||
resizeAllV = describe "all kinds of sizeReq, vertical" $ do
|
resizeAllV = describe "all kinds of sizeReq, vertical" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
||||||
@ -281,18 +258,14 @@ resizeAllV = describe "all kinds of sizeReq, vertical" $ do
|
|||||||
label "Label 5" `style` [rangeWidth 90 100, rangeHeight 90 100]
|
label "Label 5" `style` [rangeWidth 90 100, rangeHeight 90 100]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeNoSpaceV :: Spec
|
resizeNoSpaceV :: Spec
|
||||||
resizeNoSpaceV = describe "vertical, without enough space" $ do
|
resizeNoSpaceV = describe "vertical, without enough space" $ do
|
||||||
it "should have a larger viewport size (parent should fix it)" $ do
|
it "should have a larger renderArea size (parent should fix it)" $ do
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
renderArea `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3, cvp4, cvp5]
|
||||||
@ -313,18 +286,13 @@ resizeNoSpaceV = describe "vertical, without enough space" $ do
|
|||||||
label "Label 5" `style` [height 200]
|
label "Label 5" `style` [height 200]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv vstackNode
|
newNode = nodeInit wenv vstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
|
||||||
renderArea = newNode ^. L.info . L.renderArea
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeSpacerFlexH :: Spec
|
resizeSpacerFlexH :: Spec
|
||||||
resizeSpacerFlexH = describe "label flex and spacer, horizontal" $ do
|
resizeSpacerFlexH = describe "label flex and spacer, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
roundRectUnits viewport `shouldBe` vp
|
roundRectUnits renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -341,17 +309,13 @@ resizeSpacerFlexH = describe "label flex and spacer, horizontal" $ do
|
|||||||
label "Label" `style` [flexWidth 200]
|
label "Label" `style` [flexWidth 200]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv hstackNode
|
newNode = nodeInit wenv hstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
|
||||||
resizeSpacerFixedH :: Spec
|
resizeSpacerFixedH :: Spec
|
||||||
resizeSpacerFixedH = describe "label fixed and spacer, horizontal" $ do
|
resizeSpacerFixedH = describe "label fixed and spacer, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
|
||||||
|
|
||||||
it "should assign size proportional to requested size to each children" $
|
it "should assign size proportional to requested size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
childrenRa `shouldBe` Seq.fromList [cvp1, cvp2, cvp3]
|
||||||
@ -368,6 +332,5 @@ resizeSpacerFixedH = describe "label fixed and spacer, horizontal" $ do
|
|||||||
label "Label" `style` [width 200]
|
label "Label" `style` [width 200]
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv hstackNode
|
newNode = nodeInit wenv hstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = roundRectUnits . _wniViewport . _wnInfo <$> newNode ^. L.children
|
|
||||||
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
childrenRa = roundRectUnits . _wniRenderArea . _wnInfo <$> newNode ^. L.children
|
||||||
|
@ -159,7 +159,7 @@ handleEventValue = describe "handleEventValue" $ do
|
|||||||
|
|
||||||
handleEventMouseSelect :: Spec
|
handleEventMouseSelect :: Spec
|
||||||
handleEventMouseSelect = describe "handleEventMouseSelect" $ do
|
handleEventMouseSelect = describe "handleEventMouseSelect" $ do
|
||||||
it "should add text at the end, since click + drag started outside of viewport" $ do
|
it "should add text at the end, since click + drag started outside of renderArea" $ do
|
||||||
let str = "This is text"
|
let str = "This is text"
|
||||||
let selStart = Point 50 100
|
let selStart = Point 50 100
|
||||||
let selEnd = Point 120 10
|
let selEnd = Point 120 10
|
||||||
|
@ -129,11 +129,10 @@ createStyleState size col = Just newState where
|
|||||||
|
|
||||||
createNode :: Bool -> WidgetNode s e
|
createNode :: Bool -> WidgetNode s e
|
||||||
createNode enabled = newNode where
|
createNode enabled = newNode where
|
||||||
viewport = Rect 100 100 200 200
|
renderArea = Rect 100 100 200 200
|
||||||
newNode = label "Test"
|
newNode = label "Test"
|
||||||
& L.info . L.path .~ Seq.fromList [0]
|
& L.info . L.path .~ Seq.fromList [0]
|
||||||
& L.info . L.viewport .~ viewport
|
& L.info . L.renderArea .~ renderArea
|
||||||
& L.info . L.renderArea .~ viewport
|
|
||||||
& L.info . L.style .~ createStyle
|
& L.info . L.style .~ createStyle
|
||||||
& L.info . L.visible .~ True
|
& L.info . L.visible .~ True
|
||||||
& L.info . L.enabled .~ enabled
|
& L.info . L.enabled .~ enabled
|
||||||
|
@ -248,8 +248,8 @@ resize = describe "resize" $ do
|
|||||||
|
|
||||||
resizeEmpty :: Spec
|
resizeEmpty :: Spec
|
||||||
resizeEmpty = describe "empty" $ do
|
resizeEmpty = describe "empty" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should not have children" $
|
it "should not have children" $
|
||||||
children `shouldSatisfy` Seq.null
|
children `shouldSatisfy` Seq.null
|
||||||
@ -259,16 +259,13 @@ resizeEmpty = describe "empty" $ do
|
|||||||
vp = Rect 0 0 640 480
|
vp = Rect 0 0 640 480
|
||||||
zstackNode = zstack []
|
zstackNode = zstack []
|
||||||
newNode = nodeInit wenv zstackNode
|
newNode = nodeInit wenv zstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
children = newNode ^. L.children
|
children = newNode ^. L.children
|
||||||
|
|
||||||
resizeItems :: Spec
|
resizeItems :: Spec
|
||||||
resizeItems = describe "several items, horizontal" $ do
|
resizeItems = describe "several items, horizontal" $ do
|
||||||
it "should have the provided viewport size" $
|
it "should have the provided renderArea size" $
|
||||||
viewport `shouldBe` vp
|
renderArea `shouldBe` vp
|
||||||
|
|
||||||
it "should assign the same viewport size to each children" $
|
|
||||||
childrenVp `shouldBe` Seq.fromList [vp, vp, vp]
|
|
||||||
|
|
||||||
it "should assign the same renderArea size to each children" $
|
it "should assign the same renderArea size to each children" $
|
||||||
childrenRa `shouldBe` Seq.fromList [vp, vp, vp]
|
childrenRa `shouldBe` Seq.fromList [vp, vp, vp]
|
||||||
@ -282,6 +279,5 @@ resizeItems = describe "several items, horizontal" $ do
|
|||||||
label "Label 3"
|
label "Label 3"
|
||||||
]
|
]
|
||||||
newNode = nodeInit wenv zstackNode
|
newNode = nodeInit wenv zstackNode
|
||||||
viewport = newNode ^. L.info . L.viewport
|
renderArea = newNode ^. L.info . L.renderArea
|
||||||
childrenVp = (^. L.info . L.viewport) <$> newNode ^. L.children
|
|
||||||
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
childrenRa = (^. L.info . L.renderArea) <$> newNode ^. L.children
|
||||||
|
Loading…
Reference in New Issue
Block a user