mirror of
https://github.com/rgleichman/glance.git
synced 2024-08-17 02:40:28 +03:00
Add newtype ElemId
This commit is contained in:
parent
fe31307995
commit
41a38aff33
14
gui/Main.hs
14
gui/Main.hs
@ -41,6 +41,7 @@ nodeSize :: (Double, Double)
|
|||||||
nodeSize = (100, 40)
|
nodeSize = (100, 40)
|
||||||
|
|
||||||
-- TODO USE newtype for element ID.
|
-- TODO USE newtype for element ID.
|
||||||
|
newtype ElemId = ElemId { _unElemId :: Int } deriving (Show, Eq, Ord)
|
||||||
|
|
||||||
-- | A graphical element that can be clicked
|
-- | A graphical element that can be clicked
|
||||||
data Element = Element
|
data Element = Element
|
||||||
@ -58,7 +59,7 @@ data Inputs = Inputs
|
|||||||
}
|
}
|
||||||
|
|
||||||
data AppState = AppState
|
data AppState = AppState
|
||||||
{ _asMovingNode :: Maybe Int -- ^ _asElements key
|
{ _asMovingNode :: Maybe ElemId -- ^ _asElements key
|
||||||
, _asEdges :: [(Element, Element)]
|
, _asEdges :: [(Element, Element)]
|
||||||
, _asElements :: IntMap.IntMap Element
|
, _asElements :: IntMap.IntMap Element
|
||||||
, _asFPSr :: Double -- ^ FPS rouned down to nearest hundred if over 200 fps.
|
, _asFPSr :: Double -- ^ FPS rouned down to nearest hundred if over 200 fps.
|
||||||
@ -66,7 +67,10 @@ data AppState = AppState
|
|||||||
|
|
||||||
data InputEvents =
|
data InputEvents =
|
||||||
-- Which node was clicked and the relative click position within a node.
|
-- Which node was clicked and the relative click position within a node.
|
||||||
LeftClickOnNode Int (Double, Double)
|
LeftClickOnNode
|
||||||
|
ElemId
|
||||||
|
(Double, Double) -- relative mouse position
|
||||||
|
Int -- mouse button
|
||||||
|
|
||||||
emptyAppState :: AppState
|
emptyAppState :: AppState
|
||||||
emptyAppState = AppState
|
emptyAppState = AppState
|
||||||
@ -148,7 +152,7 @@ updateBackground _canvas stateRef = do
|
|||||||
_ <- traverse drawNode (IntMap.toList (_asElements stateVal))
|
_ <- traverse drawNode (IntMap.toList (_asElements stateVal))
|
||||||
pure ()
|
pure ()
|
||||||
|
|
||||||
findElementByPosition :: IntMap.IntMap Element -> (Double, Double) -> Maybe Int
|
findElementByPosition :: IntMap.IntMap Element -> (Double, Double) -> Maybe ElemId
|
||||||
findElementByPosition elements (mouseX, mouseY) =
|
findElementByPosition elements (mouseX, mouseY) =
|
||||||
let
|
let
|
||||||
mouseInElement (_elementId, Element{_elPosition, _elSize}) =
|
mouseInElement (_elementId, Element{_elPosition, _elSize}) =
|
||||||
@ -159,7 +163,7 @@ findElementByPosition elements (mouseX, mouseY) =
|
|||||||
mouseX >= x && mouseX <= (x + width) &&
|
mouseX >= x && mouseX <= (x + width) &&
|
||||||
mouseY >= y && mouseY <= (y + height)
|
mouseY >= y && mouseY <= (y + height)
|
||||||
in
|
in
|
||||||
fst <$> find mouseInElement (IntMap.toList elements)
|
ElemId . fst <$> find mouseInElement (IntMap.toList elements)
|
||||||
|
|
||||||
getFps :: Inputs -> Double
|
getFps :: Inputs -> Double
|
||||||
getFps inputs =
|
getFps inputs =
|
||||||
@ -192,7 +196,7 @@ updateState inputs@Inputs{_inMouseXandY} oldState@AppState{_asElements, _asMovin
|
|||||||
newY = snd _inMouseXandY - (snd _elSize / 2)
|
newY = snd _inMouseXandY - (snd _elSize / 2)
|
||||||
in
|
in
|
||||||
oldNode{_elPosition=(newX, newY)})
|
oldNode{_elPosition=(newX, newY)})
|
||||||
nodeId
|
(_unElemId nodeId)
|
||||||
_asElements
|
_asElements
|
||||||
newState = oldState
|
newState = oldState
|
||||||
{ _asElements=newElements
|
{ _asElements=newElements
|
||||||
|
Loading…
Reference in New Issue
Block a user