packages feed

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

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE PatternSynonyms #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Stopgap.Graphics.UI.Gtk.GestureClick where

import Foreign.Ptr
import Foreign.C.Enum
import Stopgap.Data.Ptr
import Data.Word

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

#include <gtk/gtk.h>

data GTag

newtype G = G (Ptr GTag) deriving Show

instance IsPtr G where type Tag G = GTag; fromPtr = G; toPtr (G p) = p
instance G.Object.IsO G where toO (G g) = G.Object.O $ castPtr g

instance Gtk.EventController.IsE G where
	toE (G g) = Gtk.EventController.E $ castPtr g

instance Gtk.Gesture.IsG G where toG (G g) = Gtk.Gesture.G $ castPtr g

new :: IO G
new = G <$> c_gtk_gesture_click_new

foreign import ccall "gtk_gesture_click_new" c_gtk_gesture_click_new ::
	IO (Ptr GTag)

enum "Button" ''#{type guint} [''Show, ''Read] [
	("ButtonPrimary", #{const GDK_BUTTON_PRIMARY}),
	("ButtonMiddle", #{const GDK_BUTTON_MIDDLE}),
	("ButtonSecondary", #{const GDK_BUTTON_SECONDARY})
	]

setButton :: G -> Button -> IO ()
setButton (G g) (Button b) = c_gtk_gesture_single_set_button g b

foreign import ccall "gtk_gesture_single_set_button"
	c_gtk_gesture_single_set_button ::
	Ptr GTag -> #{type guint} -> IO ()