gi-gtk-3.0.28: GI/Gtk/Interfaces/StyleProvider.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
GtkStyleProvider is an interface used to provide style information to a 'GI.Gtk.Objects.StyleContext.StyleContext'.
See 'GI.Gtk.Objects.StyleContext.styleContextAddProvider' and 'GI.Gtk.Objects.StyleContext.styleContextAddProviderForScreen'.
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Gtk.Interfaces.StyleProvider
(
-- * Exported types
StyleProvider(..) ,
noStyleProvider ,
IsStyleProvider ,
-- * Methods
-- ** getIconFactory #method:getIconFactory#
#if ENABLE_OVERLOADING
StyleProviderGetIconFactoryMethodInfo ,
#endif
styleProviderGetIconFactory ,
-- ** getStyle #method:getStyle#
#if ENABLE_OVERLOADING
StyleProviderGetStyleMethodInfo ,
#endif
styleProviderGetStyle ,
-- ** getStyleProperty #method:getStyleProperty#
#if ENABLE_OVERLOADING
StyleProviderGetStylePropertyMethodInfo ,
#endif
styleProviderGetStyleProperty ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import {-# SOURCE #-} qualified GI.Gtk.Flags as Gtk.Flags
import {-# SOURCE #-} qualified GI.Gtk.Objects.IconFactory as Gtk.IconFactory
import {-# SOURCE #-} qualified GI.Gtk.Objects.StyleProperties as Gtk.StyleProperties
import {-# SOURCE #-} qualified GI.Gtk.Structs.WidgetPath as Gtk.WidgetPath
-- interface StyleProvider
-- | Memory-managed wrapper type.
newtype StyleProvider = StyleProvider (ManagedPtr StyleProvider)
-- | A convenience alias for `Nothing` :: `Maybe` `StyleProvider`.
noStyleProvider :: Maybe StyleProvider
noStyleProvider = Nothing
#if ENABLE_OVERLOADING
type instance O.SignalList StyleProvider = StyleProviderSignalList
type StyleProviderSignalList = ('[ ] :: [(Symbol, *)])
#endif
-- | Type class for types which implement `StyleProvider`.
class ManagedPtrNewtype a => IsStyleProvider a
instance IsStyleProvider StyleProvider
-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
instance WrappedPtr StyleProvider where
wrappedPtrCalloc = return nullPtr
wrappedPtrCopy = return
wrappedPtrFree = Nothing
#if ENABLE_OVERLOADING
type family ResolveStyleProviderMethod (t :: Symbol) (o :: *) :: * where
ResolveStyleProviderMethod "getIconFactory" o = StyleProviderGetIconFactoryMethodInfo
ResolveStyleProviderMethod "getStyle" o = StyleProviderGetStyleMethodInfo
ResolveStyleProviderMethod "getStyleProperty" o = StyleProviderGetStylePropertyMethodInfo
ResolveStyleProviderMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveStyleProviderMethod t StyleProvider, O.MethodInfo info StyleProvider p) => OL.IsLabel t (StyleProvider -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif
-- method StyleProvider::get_icon_factory
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "Gtk", name = "StyleProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkStyleProvider", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TInterface (Name {namespace = "Gtk", name = "WidgetPath"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GtkWidgetPath to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "IconFactory"}))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_style_provider_get_icon_factory" gtk_style_provider_get_icon_factory ::
Ptr StyleProvider -> -- provider : TInterface (Name {namespace = "Gtk", name = "StyleProvider"})
Ptr Gtk.WidgetPath.WidgetPath -> -- path : TInterface (Name {namespace = "Gtk", name = "WidgetPath"})
IO (Ptr Gtk.IconFactory.IconFactory)
{-# DEPRECATED styleProviderGetIconFactory ["(Since version 3.8)","Will always return 'Nothing' for all GTK-provided style providers."] #-}
{- |
Returns the 'GI.Gtk.Objects.IconFactory.IconFactory' defined to be in use for /@path@/, or 'Nothing' if none
is defined.
/Since: 3.0/
-}
styleProviderGetIconFactory ::
(B.CallStack.HasCallStack, MonadIO m, IsStyleProvider a) =>
a
{- ^ /@provider@/: a 'GI.Gtk.Interfaces.StyleProvider.StyleProvider' -}
-> Gtk.WidgetPath.WidgetPath
{- ^ /@path@/: 'GI.Gtk.Structs.WidgetPath.WidgetPath' to query -}
-> m (Maybe Gtk.IconFactory.IconFactory)
{- ^ __Returns:__ The icon factory to use for /@path@/, or 'Nothing' -}
styleProviderGetIconFactory provider path = liftIO $ do
provider' <- unsafeManagedPtrCastPtr provider
path' <- unsafeManagedPtrGetPtr path
result <- gtk_style_provider_get_icon_factory provider' path'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- (newObject Gtk.IconFactory.IconFactory) result'
return result''
touchManagedPtr provider
touchManagedPtr path
return maybeResult
#if ENABLE_OVERLOADING
data StyleProviderGetIconFactoryMethodInfo
instance (signature ~ (Gtk.WidgetPath.WidgetPath -> m (Maybe Gtk.IconFactory.IconFactory)), MonadIO m, IsStyleProvider a) => O.MethodInfo StyleProviderGetIconFactoryMethodInfo a signature where
overloadedMethod _ = styleProviderGetIconFactory
#endif
-- method StyleProvider::get_style
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "Gtk", name = "StyleProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkStyleProvider", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TInterface (Name {namespace = "Gtk", name = "WidgetPath"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GtkWidgetPath to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "StyleProperties"}))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_style_provider_get_style" gtk_style_provider_get_style ::
Ptr StyleProvider -> -- provider : TInterface (Name {namespace = "Gtk", name = "StyleProvider"})
Ptr Gtk.WidgetPath.WidgetPath -> -- path : TInterface (Name {namespace = "Gtk", name = "WidgetPath"})
IO (Ptr Gtk.StyleProperties.StyleProperties)
{-# DEPRECATED styleProviderGetStyle ["(Since version 3.8)","Will always return 'Nothing' for all GTK-provided style providers"," as the interface cannot correctly work the way CSS is specified."] #-}
{- |
Returns the style settings affecting a widget defined by /@path@/, or 'Nothing' if
/@provider@/ doesn’t contemplate styling /@path@/.
/Since: 3.0/
-}
styleProviderGetStyle ::
(B.CallStack.HasCallStack, MonadIO m, IsStyleProvider a) =>
a
{- ^ /@provider@/: a 'GI.Gtk.Interfaces.StyleProvider.StyleProvider' -}
-> Gtk.WidgetPath.WidgetPath
{- ^ /@path@/: 'GI.Gtk.Structs.WidgetPath.WidgetPath' to query -}
-> m (Maybe Gtk.StyleProperties.StyleProperties)
{- ^ __Returns:__ a 'GI.Gtk.Objects.StyleProperties.StyleProperties' containing the
style settings affecting /@path@/ -}
styleProviderGetStyle provider path = liftIO $ do
provider' <- unsafeManagedPtrCastPtr provider
path' <- unsafeManagedPtrGetPtr path
result <- gtk_style_provider_get_style provider' path'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- (wrapObject Gtk.StyleProperties.StyleProperties) result'
return result''
touchManagedPtr provider
touchManagedPtr path
return maybeResult
#if ENABLE_OVERLOADING
data StyleProviderGetStyleMethodInfo
instance (signature ~ (Gtk.WidgetPath.WidgetPath -> m (Maybe Gtk.StyleProperties.StyleProperties)), MonadIO m, IsStyleProvider a) => O.MethodInfo StyleProviderGetStyleMethodInfo a signature where
overloadedMethod _ = styleProviderGetStyle
#endif
-- method StyleProvider::get_style_property
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "provider", argType = TInterface (Name {namespace = "Gtk", name = "StyleProvider"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkStyleProvider", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TInterface (Name {namespace = "Gtk", name = "WidgetPath"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GtkWidgetPath to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "state", argType = TInterface (Name {namespace = "Gtk", name = "StateFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "state to query the style property for", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pspec", argType = TParamSpec, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The #GParamSpec to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "GObject", name = "Value"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "return location for the property value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False
foreign import ccall "gtk_style_provider_get_style_property" gtk_style_provider_get_style_property ::
Ptr StyleProvider -> -- provider : TInterface (Name {namespace = "Gtk", name = "StyleProvider"})
Ptr Gtk.WidgetPath.WidgetPath -> -- path : TInterface (Name {namespace = "Gtk", name = "WidgetPath"})
CUInt -> -- state : TInterface (Name {namespace = "Gtk", name = "StateFlags"})
Ptr GParamSpec -> -- pspec : TParamSpec
Ptr GValue -> -- value : TInterface (Name {namespace = "GObject", name = "Value"})
IO CInt
{- |
Looks up a widget style property as defined by /@provider@/ for
the widget represented by /@path@/.
/Since: 3.0/
-}
styleProviderGetStyleProperty ::
(B.CallStack.HasCallStack, MonadIO m, IsStyleProvider a) =>
a
{- ^ /@provider@/: a 'GI.Gtk.Interfaces.StyleProvider.StyleProvider' -}
-> Gtk.WidgetPath.WidgetPath
{- ^ /@path@/: 'GI.Gtk.Structs.WidgetPath.WidgetPath' to query -}
-> [Gtk.Flags.StateFlags]
{- ^ /@state@/: state to query the style property for -}
-> GParamSpec
{- ^ /@pspec@/: The 'GI.GObject.Objects.ParamSpec.ParamSpec' to query -}
-> m ((Bool, GValue))
{- ^ __Returns:__ 'True' if the property was found and has a value, 'False' otherwise -}
styleProviderGetStyleProperty provider path state pspec = liftIO $ do
provider' <- unsafeManagedPtrCastPtr provider
path' <- unsafeManagedPtrGetPtr path
let state' = gflagsToWord state
pspec' <- unsafeManagedPtrGetPtr pspec
value <- callocBoxedBytes 24 :: IO (Ptr GValue)
result <- gtk_style_provider_get_style_property provider' path' state' pspec' value
let result' = (/= 0) result
value' <- (wrapBoxed GValue) value
touchManagedPtr provider
touchManagedPtr path
touchManagedPtr pspec
return (result', value')
#if ENABLE_OVERLOADING
data StyleProviderGetStylePropertyMethodInfo
instance (signature ~ (Gtk.WidgetPath.WidgetPath -> [Gtk.Flags.StateFlags] -> GParamSpec -> m ((Bool, GValue))), MonadIO m, IsStyleProvider a) => O.MethodInfo StyleProviderGetStylePropertyMethodInfo a signature where
overloadedMethod _ = styleProviderGetStyleProperty
#endif