widget coordinates are now local (offset based on parent component)
This commit is contained in:
@ -19,13 +19,13 @@ import Types
|
||||
import UI.UIWidgets
|
||||
import UI.UIOperations
|
||||
|
||||
|
||||
-- TODO: define GUI positions in a file
|
||||
createGUI :: (Map.HashMap UIId (GUIWidget Pioneers), [UIId])
|
||||
createGUI = (Map.fromList [ (UIId 0, createPanel (0, 0, 0, 0) [UIId 1, UIId 2] 0)
|
||||
, (UIId 1, createContainer (20, 50, 120, 80) [] 1)
|
||||
, (UIId 2, createPanel (100, 140, 0, 0) [UIId 3, UIId 4] 3)
|
||||
, (UIId 3, createContainer (100, 140, 130, 200) [] 4 )
|
||||
, (UIId 4, createButton (30, 200, 60, 175) 2 testMessage)
|
||||
, (UIId 1, createContainer (30, 215, 100, 80) [] 1)
|
||||
, (UIId 2, createPanel (50, 40, 0, 0) [UIId 3, UIId 4] 3)
|
||||
, (UIId 3, createContainer (80, 15, 130, 90) [] 4 )
|
||||
, (UIId 4, createButton (10, 40, 60, 130) 2 testMessage)
|
||||
], [UIId 0])
|
||||
|
||||
getGUI :: Map.HashMap UIId (GUIWidget Pioneers) -> [GUIWidget Pioneers]
|
||||
@ -89,12 +89,12 @@ eventCallback e = do
|
||||
modify $ aks.down .~ (movement == SDL.KeyDown)
|
||||
SDL.KeypadPlus ->
|
||||
when (movement == SDL.KeyDown) $ do
|
||||
modify $ (gl.glMap.stateTessellationFactor) %~ ((min 5) . (+1))
|
||||
modify $ gl.glMap.stateTessellationFactor %~ (min 5) . (+1)
|
||||
state <- get
|
||||
liftIO $ putStrLn $ unwords ["Tessellation at: ", show $ state ^. gl.glMap.stateTessellationFactor]
|
||||
SDL.KeypadMinus ->
|
||||
when (movement == SDL.KeyDown) $ do
|
||||
modify $ (gl.glMap.stateTessellationFactor) %~ ((max 1) . (+(-1)))
|
||||
modify $ gl.glMap.stateTessellationFactor %~ (max 1) . (+(-1))
|
||||
state <- get
|
||||
liftIO $ putStrLn $ unwords ["Tessellation at: ", show $ state ^. gl.glMap.stateTessellationFactor]
|
||||
_ ->
|
||||
@ -104,13 +104,13 @@ eventCallback e = do
|
||||
state <- get
|
||||
when (state ^. mouse.isDown && not (state ^. mouse.isDragging)) $
|
||||
modify $ (mouse.isDragging .~ True)
|
||||
. (mouse.dragStartX .~ (fromIntegral x))
|
||||
. (mouse.dragStartY .~ (fromIntegral y))
|
||||
. (mouse.dragStartX .~ fromIntegral x)
|
||||
. (mouse.dragStartY .~ fromIntegral y)
|
||||
. (mouse.dragStartXAngle .~ (state ^. camera.xAngle))
|
||||
. (mouse.dragStartYAngle .~ (state ^. camera.yAngle))
|
||||
|
||||
modify $ (mouse.mousePosition. Types._x .~ (fromIntegral x))
|
||||
. (mouse.mousePosition. Types._y .~ (fromIntegral y))
|
||||
modify $ (mouse.mousePosition. Types._x .~ fromIntegral x)
|
||||
. (mouse.mousePosition. Types._y .~ fromIntegral y)
|
||||
SDL.MouseButton _ _ button state (SDL.Position x y) -> -- windowID mouseID button buttonState buttonAt
|
||||
case button of
|
||||
SDL.LeftButton -> do
|
||||
@ -122,7 +122,7 @@ eventCallback e = do
|
||||
modify $ mouse.isDragging .~ False
|
||||
else
|
||||
clickHandler LeftButton (x, y)
|
||||
_ -> do when (state == SDL.Released)
|
||||
_ -> when (state == SDL.Released)
|
||||
$ maybe (return ()) (`clickHandler` (x, y)) $ transformButton button
|
||||
SDL.MouseWheel _ _ _ vscroll -> -- windowID mouseID hScroll vScroll
|
||||
do
|
||||
@ -181,12 +181,14 @@ prepareGUI = do
|
||||
liftIO $ do
|
||||
-- bind texture - all later calls work on this one.
|
||||
GL.textureBinding GL.Texture2D GL.$= Just tex
|
||||
mapM_ (copyGUI tex) roots
|
||||
mapM_ (copyGUI tex (0, 0)) roots
|
||||
modify $ ui.uiHasChanged .~ False
|
||||
|
||||
--TODO: Perform border-checking ... is xoff + width and yoff+height inside the screen-coordinates..
|
||||
copyGUI :: GL.TextureObject -> GUIWidget Pioneers -> Pioneers ()
|
||||
copyGUI tex widget = do
|
||||
copyGUI :: GL.TextureObject -> Pixel -- ^current view's offset
|
||||
-> GUIWidget Pioneers -- ^the widget to draw
|
||||
-> Pioneers ()
|
||||
copyGUI tex (vX, vY) widget = do
|
||||
(xoff, yoff, wWidth, wHeight) <- widget ^. baseProperties.boundary
|
||||
state <- get
|
||||
let
|
||||
@ -205,11 +207,11 @@ copyGUI tex widget = do
|
||||
GL.texSubImage2D
|
||||
GL.Texture2D
|
||||
0
|
||||
(GL.TexturePosition2D (int xoff) (int yoff))
|
||||
(GL.TexturePosition2D (int (vX + xoff)) (int (vY + yoff)))
|
||||
(GL.TextureSize2D (int wWidth) (int wHeight))
|
||||
(GL.PixelData GL.RGBA GL.UnsignedByte ptr)
|
||||
nextChildrenIds <- widget ^. baseProperties.children
|
||||
mapM_ (copyGUI tex) $ toGUIAnys hMap $ nextChildrenIds
|
||||
mapM_ (copyGUI tex (vX+xoff, vY+yoff)) $ toGUIAnys hMap nextChildrenIds
|
||||
|
||||
--TODO: Add scroll-Handler, return (Pioneers Bool) to indicate event-bubbling etc.
|
||||
--TODO: Maybe queues are better?
|
Reference in New Issue
Block a user