packages feed

simple-pango-0.1.0.1: src/Graphics/Pango/Basic/VerticalText.hsc

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

module Graphics.Pango.Basic.VerticalText (
	-- * ENUM
	-- ** PangoGravity
	PangoGravity(..),
	pattern PangoGravitySouth,
	pattern PangoGravityEast,
	pattern PangoGravityNorth,
	pattern PangoGravityWest,
	pattern PangoGravityAuto,

	-- ** PangoGravityHint
	PangoGravityHint(..),
	pattern PangoGravityHintNatural,
	pattern PangoGravityHintStrong,
	pattern PangoGravityHintLine,

	-- * FUNCTION
	pangoGravityGetForMatrix,
	pangoGravityGetForScript,
	pangoGravityGetForScriptAndWidth,
	pangoGravityToRotation
	) where

import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types
import Foreign.C.Enum
import Data.Bool
import Data.Word
import Data.Int
import Data.Angle
import System.IO.Unsafe
import Graphics.Pango.Basic.GlyphStorage.PangoMatrix.Internal
import Graphics.Pango.Basic.ScriptsAndLanguages.PangoScript.Enum

#include <pango/pango.h>

enum "PangoGravity" ''#{type PangoGravity} [''Show] [
	("PangoGravitySouth", #{const PANGO_GRAVITY_SOUTH}),
	("PangoGravityEast", #{const PANGO_GRAVITY_EAST}),
	("PangoGravityNorth", #{const PANGO_GRAVITY_NORTH}),
	("PangoGravityWest", #{const PANGO_GRAVITY_WEST}),
	("PangoGravityAuto", #{const PANGO_GRAVITY_AUTO}) ]

enum "PangoGravityHint" ''#{type PangoGravityHint} [''Show] [
	("PangoGravityHintNatural", #{const PANGO_GRAVITY_HINT_NATURAL}),
	("PangoGravityHintStrong", #{const PANGO_GRAVITY_HINT_STRONG}),
	("PangoGravityHintLine", #{const PANGO_GRAVITY_HINT_LINE}) ]

pangoGravityGetForMatrix :: PangoMatrix -> PangoGravity
pangoGravityGetForMatrix (PangoMatrix_ fm) = unsafePerformIO
	$ PangoGravity <$> withForeignPtr fm c_pango_gravity_get_for_matrix

foreign import ccall "pango_gravity_get_for_matrix"
	c_pango_gravity_get_for_matrix ::
	Ptr PangoMatrix -> IO #{type PangoGravity}

pangoGravityGetForScript ::
	PangoScript -> PangoGravity -> PangoGravityHint -> PangoGravity
pangoGravityGetForScript (PangoScript s) (PangoGravity b) (PangoGravityHint h) =
	unsafePerformIO $ PangoGravity <$> c_pango_gravity_get_for_script s b h

foreign import ccall "pango_gravity_get_for_script"
	c_pango_gravity_get_for_script ::
	#{type PangoScript} -> #{type PangoGravity} ->
	#{type PangoGravityHint} -> IO #{type PangoGravity}

pangoGravityGetForScriptAndWidth ::
	PangoScript -> Bool -> PangoGravity -> PangoGravityHint -> PangoGravity
pangoGravityGetForScriptAndWidth
	(PangoScript s) w (PangoGravity b) (PangoGravityHint h) =
	unsafePerformIO $ PangoGravity <$>
		c_pango_gravity_get_for_script_and_width
			s (bool #{const FALSE} #{const TRUE} w) b h

foreign import ccall "pango_gravity_get_for_script_and_width"
	c_pango_gravity_get_for_script_and_width ::
	#{type PangoScript} -> #{type gboolean} -> #{type PangoGravity} ->
	#{type PangoGravityHint} -> IO #{type PangoGravity}

pangoGravityToRotation :: PangoGravity -> Angle CDouble
pangoGravityToRotation (PangoGravity g) =
	unsafePerformIO $ Radian <$> c_pango_gravity_to_rotation g

foreign import ccall "pango_gravity_to_rotation" c_pango_gravity_to_rotation ::
	#{type PangoGravity} -> IO CDouble