moffy-samples-gtk4-run-0.1.0.0: src/Stopgap/Graphics/UI/Gtk/Window.hsc
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Stopgap.Graphics.UI.Gtk.Window where
import Foreign.Ptr
import Foreign.C.Types
import Foreign.C.String
import Stopgap.Data.Ptr
import Stopgap.Graphics.UI.Gtk.Application qualified as Gtk.Application
import Stopgap.Graphics.UI.Gtk.Widget qualified as Gtk.Widget
import Stopgap.System.GLib.Object qualified as G.Object
class Gtk.Widget.IsW a => IsW a where toW :: a -> W
data WTag
data W = W (Ptr WTag) deriving Show
instance IsPtr W where type Tag W = WTag; fromPtr = W; toPtr (W p) = p
instance G.Object.IsO W where toO (W w) = G.Object.O $ castPtr w
instance Gtk.Widget.IsW W where toW (W w) = Gtk.Widget.W $ castPtr w
instance IsW W where toW = id
new :: IO W
new = W <$> c_gtk_window_new
foreign import ccall "gtk_window_new" c_gtk_window_new :: IO (Ptr WTag)
setApplication :: IsW w => w -> Gtk.Application.A s -> IO ()
setApplication (toW -> W w) (Gtk.Application.A a) = c_gtk_window_set_application w a
foreign import ccall "gtk_window_set_application"
c_gtk_window_set_application ::
Ptr WTag -> Ptr (Gtk.Application.ATag) -> IO ()
present :: IsW w => w -> IO ()
present (toW -> W w) = c_gtk_window_present w
foreign import ccall "gtk_window_present" c_gtk_window_present ::
Ptr WTag -> IO ()
setTitle :: IsW w => w -> String -> IO ()
setTitle (toW -> W w) ttl = withCString ttl $ c_gtk_window_set_title w
foreign import ccall "gtk_window_set_title" c_gtk_window_set_title ::
Ptr WTag -> CString -> IO ()
setDefaultSize :: IsW w => w -> CInt -> CInt -> IO ()
setDefaultSize (toW -> W win) w h = c_gtk_window_set_default_size win w h
foreign import ccall "gtk_window_set_default_size"
c_gtk_window_set_default_size :: Ptr WTag -> CInt -> CInt -> IO ()
setChild :: (IsW w, Gtk.Widget.IsW c) => w -> c -> IO ()
setChild (toW -> W win) (Gtk.Widget.toW -> Gtk.Widget.W cld) =
c_gtk_window_set_child win cld
foreign import ccall "gtk_window_set_child" c_gtk_window_set_child ::
Ptr WTag -> Ptr Gtk.Widget.WTag -> IO ()
destroy :: IsW w => w -> IO ()
destroy (toW -> W win) = c_gtk_window_destroy win
foreign import ccall "gtk_window_destroy" c_gtk_window_destroy ::
Ptr WTag -> IO ()