summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-04-25 23:47:55 -0400
committerJoe Crayne <joe@jerkface.net>2019-04-25 23:47:55 -0400
commit30ed903f316467a4daad0550b68d0a7739be2592 (patch)
treef8418e3dfd878707ed7f071c55f74b9eb4249439
parentb43403d6fe16e3ab44f98f71963d462dc9598149 (diff)
Started MeshMaker rewrite.
-rw-r--r--MeshMaker.hs73
-rw-r--r--mainObj2.hs32
2 files changed, 105 insertions, 0 deletions
diff --git a/MeshMaker.hs b/MeshMaker.hs
new file mode 100644
index 0000000..36ea2db
--- /dev/null
+++ b/MeshMaker.hs
@@ -0,0 +1,73 @@
1{-# LANGUAGE LambdaCase #-}
2{-# LANGUAGE OverloadedLabels #-}
3module MeshMaker where
4
5import Control.Monad
6import Data.Coerce
7import Data.IORef
8import Foreign.C.Types
9import GI.Gdk
10import GI.GObject.Functions
11import GI.Gtk
12
13data MeshMaker = MeshMaker
14 { mmWidget :: GLArea
15 , mmRealized :: IORef (Maybe State)
16 }
17
18data State = State
19 {
20 }
21
22new :: IO GLArea
23new = do
24 w <- gLAreaNew
25 ref <- newIORef Nothing
26 let st = MeshMaker w ref
27 -- _ <- on w #createContext $ onCreateContext st
28 _ <- on w #realize $ onRealize st
29 _ <- on w #unrealize $ onUnrealize st
30 return w
31
32onRealize :: MeshMaker -> IO ()
33onRealize mm@(MeshMaker w ref) = do
34 readIORef ref >>= \case
35 Just st -> onUnrealize mm -- Shouldn't happen.
36 Nothing -> return ()
37 writeIORef ref $ Just State
38 {
39 }
40
41onUnrealize :: MeshMaker -> IO ()
42onUnrealize (MeshMaker w ref) = do
43 readIORef ref >>= \case
44 Just st -> do
45 return ()
46 Nothing -> return () -- Shouldn't happen.
47 writeIORef ref Nothing
48
49
50onRender :: MeshMaker -> GLContext -> IO Bool
51onRender (MeshMaker w ref) gl = do
52 return True
53
54onScroll :: MeshMaker -> EventScroll -> IO Bool
55onScroll (MeshMaker w ref) ev = do
56 dx <- get ev #deltaX
57 dy <- get ev #deltaY
58 x <- get ev #x
59 y <- get ev #y
60 y_root <- get ev #yRoot
61 d <- get ev #direction
62 -- onScroll! ((0.0,0.0),(11.057525634765625,5.210357666015625),79.21035766601563)
63 putStrLn $ "onScroll! " ++ show (d,(dx,dy),(x,y),y_root)
64 return True
65
66onTouch :: MeshMaker -> Event -> IO Bool
67onTouch (MeshMaker w ref) ev = do
68 putStrLn $ "onTouch!"
69 return True
70
71onMotion :: MeshMaker -> EventMotion -> IO Bool
72onMotion (MeshMaker w ref) ev = do
73 return True
diff --git a/mainObj2.hs b/mainObj2.hs
new file mode 100644
index 0000000..6195950
--- /dev/null
+++ b/mainObj2.hs
@@ -0,0 +1,32 @@
1{-# LANGUAGE OverloadedLabels #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Main where
4
5import GI.Gtk as Gtk hiding (main)
6import qualified GI.Gtk as Gtk
7import GI.GObject.Functions
8import GI.GObject.Flags
9import Data.GI.Base.GType
10
11import Foreign.Ptr
12
13import qualified MeshMaker
14
15
16main = do
17 _ <- Gtk.init Nothing
18
19 let mkChild = MeshMaker.new
20
21 window <- do
22 w <- windowNew WindowTypeToplevel
23 windowSetDefaultSize w 720 720
24 windowSetTitle w "Mesh Maker"
25 _ <- on w #deleteEvent $ \_ -> mainQuit >> return True
26 child <- mkChild
27 containerAdd w child
28 return w
29
30 widgetShowAll window
31 Gtk.main
32