packages feed

moffy-samples-gtk3-run-0.1.0.0: src/Stopgap/System/GLib/Signal.hsc

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE BlockArguments #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Stopgap.System.GLib.Signal where

import Foreign.Ptr
import Foreign.C.String
import Control.Monad.ST
import Data.String
import Data.CairoContext
import Stopgap.Data.Ptr
import Stopgap.System.GLib.Object qualified as G.Object
import Stopgap.System.GLib.Callback qualified as G.Callback
import Stopgap.Graphics.UI.Gdk.Event.Button qualified as Gdk.Event.Button
import Stopgap.Graphics.UI.Gdk.Event.Motion qualified as Gdk.Event.Motion

newtype Signal = Signal String deriving Show

instance IsString Signal where fromString = Signal

connect_ab :: (G.Object.IsO a, IsPtr b) =>
	a -> Signal -> (a -> b -> IO ()) -> b -> IO ()
connect_ab o (Signal sig) h ud = withCString sig \csig -> do
	ch <- G.Callback.c_ab h
	c_g_signal_connect (toPtr o) csig ch (toPtr ud)

connect_ab_bool :: (G.Object.IsO a, IsPtr b) =>
	a -> Signal -> (a -> b -> IO Bool) -> b -> IO ()
connect_ab_bool o (Signal sig) h ud = withCString sig \csig -> do
	ch <- G.Callback.c_ab_bool h
	c_g_signal_connect (toPtr o) csig ch (toPtr ud)

connect_void_void :: G.Object.IsO a => a -> Signal -> IO () -> Null -> IO ()
connect_void_void o (Signal sig) h Null = withCString sig \csig -> do
	ch <- G.Callback.c_void_void h
	c_g_signal_connect (toPtr o) csig ch nullPtr

connect_self_cairo_ud :: (G.Object.IsO a, IsPtr b) =>
	a -> Signal -> (a -> CairoT r RealWorld -> b -> IO Bool) -> b -> IO ()
connect_self_cairo_ud o (Signal sig) h ud = withCString sig \csig -> do
	ch <- G.Callback.c_self_cairo_ud h
	c_g_signal_connect (toPtr o) csig ch (toPtr ud)

connect_self_button_ud :: (G.Object.IsO a, IsPtr b) =>
	a -> Signal -> (a -> Gdk.Event.Button.B -> b -> IO Bool) -> b -> IO ()
connect_self_button_ud o (Signal sig) h ud = withCString sig \csig -> do
	ch <- G.Callback.c_self_button_ud h
	c_g_signal_connect (toPtr o) csig ch (toPtr ud)

connect_self_motion_ud :: (G.Object.IsO a, IsPtr b) =>
	a -> Signal -> (a -> Gdk.Event.Motion.M -> b -> IO Bool) -> b -> IO ()
connect_self_motion_ud o (Signal sig) h ud = withCString sig \csig -> do
	ch <- G.Callback.c_self_motion_ud h
	c_g_signal_connect (toPtr o) csig ch (toPtr ud)

foreign import capi "gtk/gtk.h g_signal_connect" c_g_signal_connect ::
	Ptr a -> CString -> G.Callback.C fun -> Ptr b -> IO ()