packages feed

moffy-samples-gtk4-run-0.1.0.0: src/Stopgap/Graphics/UI/Gtk/Box.hsc

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Stopgap.Graphics.UI.Gtk.Box where

import Foreign.Ptr
import Foreign.C.Types
import Data.Word
import Data.Int
import Stopgap.Data.Ptr

import Stopgap.Graphics.UI.Gtk qualified as Gtk
import Stopgap.Graphics.UI.Gtk.Widget qualified as Gtk.Widget
import Stopgap.System.GLib.Object qualified as G.Object

#include <gtk/gtk.h>

data BTag

newtype B = B (Ptr BTag) deriving Show

instance IsPtr B where type Tag B = BTag; fromPtr = B; toPtr (B p) = p
instance G.Object.IsO B where toO (B p) = G.Object.O $ castPtr p
instance Gtk.Widget.IsW B where toW (B p) = Gtk.Widget.W $ castPtr p

new :: Gtk.Orientation -> Gtk.Pixel -> IO B
new (Gtk.Orientation o) (Gtk.Pixel p) = B <$> c_gtk_box_new o p

foreign import ccall "gtk_box_new" c_gtk_box_new ::
	#{type GtkOrientation} -> CInt -> IO (Ptr BTag)

append :: Gtk.Widget.IsW w => B -> w -> IO ()
append (B b) (Gtk.Widget.toW -> Gtk.Widget.W w) = c_gtk_box_append b w

foreign import ccall "gtk_box_append" c_gtk_box_append ::
	Ptr BTag -> Ptr Gtk.Widget.WTag -> IO ()

setHomogeneous :: B -> Bool -> IO ()
setHomogeneous (B bx) (boolToGBoolean -> bl) = c_gtk_box_set_homogeneous bx bl

boolToGBoolean :: Bool -> #{type gboolean}
boolToGBoolean = \case False -> #{const FALSE}; True -> #{const TRUE}

foreign import ccall "gtk_box_set_homogeneous" c_gtk_box_set_homogeneous ::
	Ptr BTag -> #{type gboolean} -> IO ()