summaryrefslogtreecommitdiff
path: root/lib/Lib.hs
diff options
context:
space:
mode:
authormtgmonkey <mtgmonkey@nixos>2025-12-11 18:15:32 +0100
committermtgmonkey <mtgmonkey@nixos>2025-12-11 18:15:32 +0100
commit8a16c6695e62de46c4f0cce22ff48276040bcfff (patch)
tree23786224830e40708ec4af0ae321f30e98f7aa27 /lib/Lib.hs
parentab69702910741af752ff7ee5820bb85b1f3ddd5c (diff)
basic functionality on Wayland and X11
Diffstat (limited to 'lib/Lib.hs')
-rw-r--r--lib/Lib.hs87
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/Lib.hs b/lib/Lib.hs
new file mode 100644
index 0000000..170dc89
--- /dev/null
+++ b/lib/Lib.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE CApiFFI #-}
+
+module Lib where
+
+import Data.Bits (shiftL, (.|.))
+import Foreign
+import Foreign.C.String
+import Foreign.C.Types
+
+--------------------------------------------------------------------------------
+-- Haskell-ier abstractions
+--------------------------------------------------------------------------------
+
+data WindowFlags
+ = WindowNoBorder
+ | WindowNoResize
+ | WindowAllowDND
+ | WindowHideMouse
+ | WindowFullscreen
+ | WindowTransparent
+ | WindowCenter
+ | WindowRawMouse
+ | WindowScaleToMonitor
+ | WindowHide
+ | WindowMaximize
+ | WindowCenterCursor
+ | WindowFloating
+ | WindowFocusOnShow
+ | WindowMinimize
+ | WindowFocus
+ | WindowOpenGL
+ | WindowEGL
+ | WindowedFullscreen
+
+mkWindowFlags :: [WindowFlags] -> RGFWwindowFlags
+mkWindowFlags [] = 0
+mkWindowFlags (flag:flags) =
+ let
+ shift =
+ case flag of
+ WindowNoBorder -> 0
+ WindowNoResize -> 1
+ WindowAllowDND -> 2
+ WindowHideMouse -> 3
+ WindowFullscreen -> 4
+ WindowTransparent -> 5
+ WindowCenter -> 6
+ WindowRawMouse -> 7
+ WindowScaleToMonitor -> 8
+ WindowHide -> 9
+ WindowMaximize -> 10
+ WindowCenterCursor -> 11
+ WindowFloating -> 12
+ WindowFocusOnShow -> 13
+ WindowMinimize -> 14
+ WindowFocus -> 15
+ WindowOpenGL -> 17
+ WindowEGL -> 18
+ _ -> 19 -- TODO fix this silent error, implement windowedFullscreen
+ in
+ (shiftL 1 shift) .|. (mkWindowFlags flags)
+
+--------------------------------------------------------------------------------
+-- directly from RFGW.h
+--------------------------------------------------------------------------------
+
+-- RGFWindow
+data RGFWwindow
+-- ptr
+type RGFWwindowPtr = Ptr RGFWwindow
+-- flags to create
+type RGFWwindowFlags = Word32
+
+type RGFWbool = CUInt
+
+foreign import capi "RGFW_HS.h RGFW_createWindow" rgfwCreateWindow
+ :: Ptr CChar
+ -> CInt
+ -> CInt
+ -> CInt
+ -> CInt
+ -> RGFWwindowFlags
+ -> IO RGFWwindowPtr
+
+foreign import capi "RGFW_HS.h RGFW_window_shouldClose" rgfwWindowShouldClose
+ :: RGFWwindowPtr
+ -> IO RGFWbool