{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) A structure specifying a transformation between user-space coordinates and device coordinates. The transformation is given by \<programlisting> x_device = x_user * matrix->xx + y_user * matrix->xy + matrix->x0; y_device = x_user * matrix->yx + y_user * matrix->yy + matrix->y0; \<\/programlisting> -} module GI.Pango.Structs.Matrix ( -- * Exported types Matrix(..) , newZeroMatrix , noMatrix , -- * Methods -- ** concat #method:concat# MatrixConcatMethodInfo , matrixConcat , -- ** copy #method:copy# MatrixCopyMethodInfo , matrixCopy , -- ** free #method:free# MatrixFreeMethodInfo , matrixFree , -- ** getFontScaleFactor #method:getFontScaleFactor# MatrixGetFontScaleFactorMethodInfo , matrixGetFontScaleFactor , -- ** getFontScaleFactors #method:getFontScaleFactors# MatrixGetFontScaleFactorsMethodInfo , matrixGetFontScaleFactors , -- ** rotate #method:rotate# MatrixRotateMethodInfo , matrixRotate , -- ** scale #method:scale# MatrixScaleMethodInfo , matrixScale , -- ** transformDistance #method:transformDistance# MatrixTransformDistanceMethodInfo , matrixTransformDistance , -- ** transformPixelRectangle #method:transformPixelRectangle# MatrixTransformPixelRectangleMethodInfo , matrixTransformPixelRectangle , -- ** transformPoint #method:transformPoint# MatrixTransformPointMethodInfo , matrixTransformPoint , -- ** translate #method:translate# MatrixTranslateMethodInfo , matrixTranslate , -- * Properties -- ** x0 #attr:x0# getMatrixX0 , matrix_x0 , setMatrixX0 , -- ** xx #attr:xx# getMatrixXx , matrix_xx , setMatrixXx , -- ** xy #attr:xy# getMatrixXy , matrix_xy , setMatrixXy , -- ** y0 #attr:y0# getMatrixY0 , matrix_y0 , setMatrixY0 , -- ** yx #attr:yx# getMatrixYx , matrix_yx , setMatrixYx , -- ** yy #attr:yy# getMatrixYy , matrix_yy , setMatrixYy , ) 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.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack 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 {-# SOURCE #-} qualified GI.Pango.Structs.Rectangle as Pango.Rectangle newtype Matrix = Matrix (ManagedPtr Matrix) foreign import ccall "pango_matrix_get_type" c_pango_matrix_get_type :: IO GType instance BoxedObject Matrix where boxedType _ = c_pango_matrix_get_type -- | Construct a `Matrix` struct initialized to zero. newZeroMatrix :: MonadIO m => m Matrix newZeroMatrix = liftIO $ callocBoxedBytes 48 >>= wrapBoxed Matrix instance tag ~ 'AttrSet => Constructible Matrix tag where new _ attrs = do o <- newZeroMatrix GI.Attributes.set o attrs return o noMatrix :: Maybe Matrix noMatrix = Nothing getMatrixXx :: MonadIO m => Matrix -> m Double getMatrixXx s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO CDouble let val' = realToFrac val return val' setMatrixXx :: MonadIO m => Matrix -> Double -> m () setMatrixXx s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 0) (val' :: CDouble) data MatrixXxFieldInfo instance AttrInfo MatrixXxFieldInfo where type AttrAllowedOps MatrixXxFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixXxFieldInfo = (~) Double type AttrBaseTypeConstraint MatrixXxFieldInfo = (~) Matrix type AttrGetType MatrixXxFieldInfo = Double type AttrLabel MatrixXxFieldInfo = "xx" type AttrOrigin MatrixXxFieldInfo = Matrix attrGet _ = getMatrixXx attrSet _ = setMatrixXx attrConstruct = undefined attrClear _ = undefined matrix_xx :: AttrLabelProxy "xx" matrix_xx = AttrLabelProxy getMatrixXy :: MonadIO m => Matrix -> m Double getMatrixXy s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO CDouble let val' = realToFrac val return val' setMatrixXy :: MonadIO m => Matrix -> Double -> m () setMatrixXy s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 8) (val' :: CDouble) data MatrixXyFieldInfo instance AttrInfo MatrixXyFieldInfo where type AttrAllowedOps MatrixXyFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixXyFieldInfo = (~) Double type AttrBaseTypeConstraint MatrixXyFieldInfo = (~) Matrix type AttrGetType MatrixXyFieldInfo = Double type AttrLabel MatrixXyFieldInfo = "xy" type AttrOrigin MatrixXyFieldInfo = Matrix attrGet _ = getMatrixXy attrSet _ = setMatrixXy attrConstruct = undefined attrClear _ = undefined matrix_xy :: AttrLabelProxy "xy" matrix_xy = AttrLabelProxy getMatrixYx :: MonadIO m => Matrix -> m Double getMatrixYx s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO CDouble let val' = realToFrac val return val' setMatrixYx :: MonadIO m => Matrix -> Double -> m () setMatrixYx s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 16) (val' :: CDouble) data MatrixYxFieldInfo instance AttrInfo MatrixYxFieldInfo where type AttrAllowedOps MatrixYxFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixYxFieldInfo = (~) Double type AttrBaseTypeConstraint MatrixYxFieldInfo = (~) Matrix type AttrGetType MatrixYxFieldInfo = Double type AttrLabel MatrixYxFieldInfo = "yx" type AttrOrigin MatrixYxFieldInfo = Matrix attrGet _ = getMatrixYx attrSet _ = setMatrixYx attrConstruct = undefined attrClear _ = undefined matrix_yx :: AttrLabelProxy "yx" matrix_yx = AttrLabelProxy getMatrixYy :: MonadIO m => Matrix -> m Double getMatrixYy s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 24) :: IO CDouble let val' = realToFrac val return val' setMatrixYy :: MonadIO m => Matrix -> Double -> m () setMatrixYy s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 24) (val' :: CDouble) data MatrixYyFieldInfo instance AttrInfo MatrixYyFieldInfo where type AttrAllowedOps MatrixYyFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixYyFieldInfo = (~) Double type AttrBaseTypeConstraint MatrixYyFieldInfo = (~) Matrix type AttrGetType MatrixYyFieldInfo = Double type AttrLabel MatrixYyFieldInfo = "yy" type AttrOrigin MatrixYyFieldInfo = Matrix attrGet _ = getMatrixYy attrSet _ = setMatrixYy attrConstruct = undefined attrClear _ = undefined matrix_yy :: AttrLabelProxy "yy" matrix_yy = AttrLabelProxy getMatrixX0 :: MonadIO m => Matrix -> m Double getMatrixX0 s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 32) :: IO CDouble let val' = realToFrac val return val' setMatrixX0 :: MonadIO m => Matrix -> Double -> m () setMatrixX0 s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 32) (val' :: CDouble) data MatrixX0FieldInfo instance AttrInfo MatrixX0FieldInfo where type AttrAllowedOps MatrixX0FieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixX0FieldInfo = (~) Double type AttrBaseTypeConstraint MatrixX0FieldInfo = (~) Matrix type AttrGetType MatrixX0FieldInfo = Double type AttrLabel MatrixX0FieldInfo = "x0" type AttrOrigin MatrixX0FieldInfo = Matrix attrGet _ = getMatrixX0 attrSet _ = setMatrixX0 attrConstruct = undefined attrClear _ = undefined matrix_x0 :: AttrLabelProxy "x0" matrix_x0 = AttrLabelProxy getMatrixY0 :: MonadIO m => Matrix -> m Double getMatrixY0 s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 40) :: IO CDouble let val' = realToFrac val return val' setMatrixY0 :: MonadIO m => Matrix -> Double -> m () setMatrixY0 s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = realToFrac val poke (ptr `plusPtr` 40) (val' :: CDouble) data MatrixY0FieldInfo instance AttrInfo MatrixY0FieldInfo where type AttrAllowedOps MatrixY0FieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint MatrixY0FieldInfo = (~) Double type AttrBaseTypeConstraint MatrixY0FieldInfo = (~) Matrix type AttrGetType MatrixY0FieldInfo = Double type AttrLabel MatrixY0FieldInfo = "y0" type AttrOrigin MatrixY0FieldInfo = Matrix attrGet _ = getMatrixY0 attrSet _ = setMatrixY0 attrConstruct = undefined attrClear _ = undefined matrix_y0 :: AttrLabelProxy "y0" matrix_y0 = AttrLabelProxy instance O.HasAttributeList Matrix type instance O.AttributeList Matrix = MatrixAttributeList type MatrixAttributeList = ('[ '("xx", MatrixXxFieldInfo), '("xy", MatrixXyFieldInfo), '("yx", MatrixYxFieldInfo), '("yy", MatrixYyFieldInfo), '("x0", MatrixX0FieldInfo), '("y0", MatrixY0FieldInfo)] :: [(Symbol, *)]) -- method Matrix::concat -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "new_matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_concat" pango_matrix_concat :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) Ptr Matrix -> -- new_matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) IO () {- | Changes the transformation represented by /@matrix@/ to be the transformation given by first applying transformation given by /@newMatrix@/ then applying the original transformation. @since 1.6 -} matrixConcat :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix' -} -> Matrix {- ^ /@newMatrix@/: a 'GI.Pango.Structs.Matrix.Matrix' -} -> m () matrixConcat matrix newMatrix = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix newMatrix' <- unsafeManagedPtrGetPtr newMatrix pango_matrix_concat matrix' newMatrix' touchManagedPtr matrix touchManagedPtr newMatrix return () data MatrixConcatMethodInfo instance (signature ~ (Matrix -> m ()), MonadIO m) => O.MethodInfo MatrixConcatMethodInfo Matrix signature where overloadedMethod _ = matrixConcat -- method Matrix::copy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Matrix"})) -- throws : False -- Skip return : False foreign import ccall "pango_matrix_copy" pango_matrix_copy :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) IO (Ptr Matrix) {- | Copies a 'GI.Pango.Structs.Matrix.Matrix'. @since 1.6 -} matrixCopy :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', may be 'Nothing' -} -> m (Maybe Matrix) {- ^ __Returns:__ the newly allocated 'GI.Pango.Structs.Matrix.Matrix', which should be freed with 'GI.Pango.Structs.Matrix.matrixFree', or 'Nothing' if /@matrix@/ was 'Nothing'. -} matrixCopy matrix = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix result <- pango_matrix_copy matrix' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Matrix) result' return result'' touchManagedPtr matrix return maybeResult data MatrixCopyMethodInfo instance (signature ~ (m (Maybe Matrix)), MonadIO m) => O.MethodInfo MatrixCopyMethodInfo Matrix signature where overloadedMethod _ = matrixCopy -- method Matrix::free -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_free" pango_matrix_free :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) IO () {- | Free a 'GI.Pango.Structs.Matrix.Matrix' created with 'GI.Pango.Structs.Matrix.matrixCopy'. @since 1.6 -} matrixFree :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', may be 'Nothing' -} -> m () matrixFree matrix = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix pango_matrix_free matrix' touchManagedPtr matrix return () data MatrixFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo MatrixFreeMethodInfo Matrix signature where overloadedMethod _ = matrixFree -- method Matrix::get_font_scale_factor -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TDouble) -- throws : False -- Skip return : False foreign import ccall "pango_matrix_get_font_scale_factor" pango_matrix_get_font_scale_factor :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) IO CDouble {- | Returns the scale factor of a matrix on the height of the font. That is, the scale factor in the direction perpendicular to the vector that the X coordinate is mapped to. If the scale in the X coordinate is needed as well, use 'GI.Pango.Structs.Matrix.matrixGetFontScaleFactors'. @since 1.12 -} matrixGetFontScaleFactor :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', may be 'Nothing' -} -> m Double {- ^ __Returns:__ the scale factor of /@matrix@/ on the height of the font, or 1.0 if /@matrix@/ is 'Nothing'. -} matrixGetFontScaleFactor matrix = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix result <- pango_matrix_get_font_scale_factor matrix' let result' = realToFrac result touchManagedPtr matrix return result' data MatrixGetFontScaleFactorMethodInfo instance (signature ~ (m Double), MonadIO m) => O.MethodInfo MatrixGetFontScaleFactorMethodInfo Matrix signature where overloadedMethod _ = matrixGetFontScaleFactor -- method Matrix::get_font_scale_factors -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xscale", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output scale factor in the x direction, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "yscale", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output scale factor perpendicular to the x direction, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_get_font_scale_factors" pango_matrix_get_font_scale_factors :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) Ptr CDouble -> -- xscale : TBasicType TDouble Ptr CDouble -> -- yscale : TBasicType TDouble IO () {- | Calculates the scale factor of a matrix on the width and height of the font. That is, /@xscale@/ is the scale factor in the direction of the X coordinate, and /@yscale@/ is the scale factor in the direction perpendicular to the vector that the X coordinate is mapped to. Note that output numbers will always be non-negative. @since 1.38 -} matrixGetFontScaleFactors :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', or 'Nothing' -} -> m (Double,Double) matrixGetFontScaleFactors matrix = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix xscale <- allocMem :: IO (Ptr CDouble) yscale <- allocMem :: IO (Ptr CDouble) pango_matrix_get_font_scale_factors matrix' xscale yscale xscale' <- peek xscale let xscale'' = realToFrac xscale' yscale' <- peek yscale let yscale'' = realToFrac yscale' touchManagedPtr matrix freeMem xscale freeMem yscale return (xscale'', yscale'') data MatrixGetFontScaleFactorsMethodInfo instance (signature ~ (m (Double,Double)), MonadIO m) => O.MethodInfo MatrixGetFontScaleFactorsMethodInfo Matrix signature where overloadedMethod _ = matrixGetFontScaleFactors -- method Matrix::rotate -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "degrees", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "degrees to rotate counter-clockwise", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_rotate" pango_matrix_rotate :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) CDouble -> -- degrees : TBasicType TDouble IO () {- | Changes the transformation represented by /@matrix@/ to be the transformation given by first rotating by /@degrees@/ degrees counter-clockwise then applying the original transformation. @since 1.6 -} matrixRotate :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix' -} -> Double {- ^ /@degrees@/: degrees to rotate counter-clockwise -} -> m () matrixRotate matrix degrees = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix let degrees' = realToFrac degrees pango_matrix_rotate matrix' degrees' touchManagedPtr matrix return () data MatrixRotateMethodInfo instance (signature ~ (Double -> m ()), MonadIO m) => O.MethodInfo MatrixRotateMethodInfo Matrix signature where overloadedMethod _ = matrixRotate -- method Matrix::scale -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "scale_x", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to scale by in X direction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "scale_y", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to scale by in Y direction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_scale" pango_matrix_scale :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) CDouble -> -- scale_x : TBasicType TDouble CDouble -> -- scale_y : TBasicType TDouble IO () {- | Changes the transformation represented by /@matrix@/ to be the transformation given by first scaling by /@sx@/ in the X direction and /@sy@/ in the Y direction then applying the original transformation. @since 1.6 -} matrixScale :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix' -} -> Double {- ^ /@scaleX@/: amount to scale by in X direction -} -> Double {- ^ /@scaleY@/: amount to scale by in Y direction -} -> m () matrixScale matrix scaleX scaleY = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix let scaleX' = realToFrac scaleX let scaleY' = realToFrac scaleY pango_matrix_scale matrix' scaleX' scaleY' touchManagedPtr matrix return () data MatrixScaleMethodInfo instance (signature ~ (Double -> Double -> m ()), MonadIO m) => O.MethodInfo MatrixScaleMethodInfo Matrix signature where overloadedMethod _ = matrixScale -- method Matrix::transform_distance -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dx", argType = TBasicType TDouble, direction = DirectionInout, mayBeNull = False, argDoc = Documentation {rawDocText = Just "in/out X component of a distance vector", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "dy", argType = TBasicType TDouble, direction = DirectionInout, mayBeNull = False, argDoc = Documentation {rawDocText = Just "in/out Y component of a distance vector", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_transform_distance" pango_matrix_transform_distance :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) Ptr CDouble -> -- dx : TBasicType TDouble Ptr CDouble -> -- dy : TBasicType TDouble IO () {- | Transforms the distance vector (/@dx@/,/@dy@/) by /@matrix@/. This is similar to 'GI.Pango.Structs.Matrix.matrixTransformPoint' except that the translation components of the transformation are ignored. The calculation of the returned vector is as follows: \<programlisting> dx2 = dx1 * xx + dy1 * xy; dy2 = dx1 * yx + dy1 * yy; \<\/programlisting> Affine transformations are position invariant, so the same vector always transforms to the same vector. If (/@x1@/,/@y1@/) transforms to (/@x2@/,/@y2@/) then (/@x1@/+/@dx1@/,/@y1@/+/@dy1@/) will transform to (/@x1@/+/@dx2@/,/@y1@/+/@dy2@/) for all values of /@x1@/ and /@x2@/. @since 1.16 -} matrixTransformDistance :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', or 'Nothing' -} -> Double {- ^ /@dx@/: in\/out X component of a distance vector -} -> Double {- ^ /@dy@/: in\/out Y component of a distance vector -} -> m (Double,Double) matrixTransformDistance matrix dx dy = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix let dx' = realToFrac dx dx'' <- allocMem :: IO (Ptr CDouble) poke dx'' dx' let dy' = realToFrac dy dy'' <- allocMem :: IO (Ptr CDouble) poke dy'' dy' pango_matrix_transform_distance matrix' dx'' dy'' dx''' <- peek dx'' let dx'''' = realToFrac dx''' dy''' <- peek dy'' let dy'''' = realToFrac dy''' touchManagedPtr matrix freeMem dx'' freeMem dy'' return (dx'''', dy'''') data MatrixTransformDistanceMethodInfo instance (signature ~ (Double -> Double -> m (Double,Double)), MonadIO m) => O.MethodInfo MatrixTransformDistanceMethodInfo Matrix signature where overloadedMethod _ = matrixTransformDistance -- method Matrix::transform_pixel_rectangle -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rect", argType = TInterface (Name {namespace = "Pango", name = "Rectangle"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "in/out bounding box in device units, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_transform_pixel_rectangle" pango_matrix_transform_pixel_rectangle :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) Ptr Pango.Rectangle.Rectangle -> -- rect : TInterface (Name {namespace = "Pango", name = "Rectangle"}) IO () {- | First transforms the /@rect@/ using /@matrix@/, then calculates the bounding box of the transformed rectangle. The rectangle should be in device units (pixels). This function is useful for example when you want to draw a rotated /@pangoLayout@/ to an image buffer, and want to know how large the image should be and how much you should shift the layout when rendering. For better accuracy, you should use 'GI.Pango.Structs.Matrix.matrixTransformRectangle' on original rectangle in Pango units and convert to pixels afterward using 'GI.Pango.Functions.extentsToPixels'\'s first argument. @since 1.16 -} matrixTransformPixelRectangle :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', or 'Nothing' -} -> Maybe (Pango.Rectangle.Rectangle) {- ^ /@rect@/: in\/out bounding box in device units, or 'Nothing' -} -> m () matrixTransformPixelRectangle matrix rect = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix maybeRect <- case rect of Nothing -> return nullPtr Just jRect -> do jRect' <- unsafeManagedPtrGetPtr jRect return jRect' pango_matrix_transform_pixel_rectangle matrix' maybeRect touchManagedPtr matrix whenJust rect touchManagedPtr return () data MatrixTransformPixelRectangleMethodInfo instance (signature ~ (Maybe (Pango.Rectangle.Rectangle) -> m ()), MonadIO m) => O.MethodInfo MatrixTransformPixelRectangleMethodInfo Matrix signature where overloadedMethod _ = matrixTransformPixelRectangle -- method Matrix::transform_point -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TDouble, direction = DirectionInout, mayBeNull = False, argDoc = Documentation {rawDocText = Just "in/out X position", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "y", argType = TBasicType TDouble, direction = DirectionInout, mayBeNull = False, argDoc = Documentation {rawDocText = Just "in/out Y position", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_transform_point" pango_matrix_transform_point :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) Ptr CDouble -> -- x : TBasicType TDouble Ptr CDouble -> -- y : TBasicType TDouble IO () {- | Transforms the point (/@x@/, /@y@/) by /@matrix@/. @since 1.16 -} matrixTransformPoint :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix', or 'Nothing' -} -> Double {- ^ /@x@/: in\/out X position -} -> Double {- ^ /@y@/: in\/out Y position -} -> m (Double,Double) matrixTransformPoint matrix x y = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix let x' = realToFrac x x'' <- allocMem :: IO (Ptr CDouble) poke x'' x' let y' = realToFrac y y'' <- allocMem :: IO (Ptr CDouble) poke y'' y' pango_matrix_transform_point matrix' x'' y'' x''' <- peek x'' let x'''' = realToFrac x''' y''' <- peek y'' let y'''' = realToFrac y''' touchManagedPtr matrix freeMem x'' freeMem y'' return (x'''', y'''') data MatrixTransformPointMethodInfo instance (signature ~ (Double -> Double -> m (Double,Double)), MonadIO m) => O.MethodInfo MatrixTransformPointMethodInfo Matrix signature where overloadedMethod _ = matrixTransformPoint -- XXX Could not generate method Matrix::transform_rectangle -- Error was : Not implemented: "Nullable inout structs not supported" -- method Matrix::translate -- method type : OrdinaryMethod -- Args : [Arg {argCName = "matrix", argType = TInterface (Name {namespace = "Pango", name = "Matrix"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoMatrix", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tx", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to translate in the X direction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "ty", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to translate in the Y direction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_matrix_translate" pango_matrix_translate :: Ptr Matrix -> -- matrix : TInterface (Name {namespace = "Pango", name = "Matrix"}) CDouble -> -- tx : TBasicType TDouble CDouble -> -- ty : TBasicType TDouble IO () {- | Changes the transformation represented by /@matrix@/ to be the transformation given by first translating by (/@tx@/, /@ty@/) then applying the original transformation. @since 1.6 -} matrixTranslate :: (B.CallStack.HasCallStack, MonadIO m) => Matrix {- ^ /@matrix@/: a 'GI.Pango.Structs.Matrix.Matrix' -} -> Double {- ^ /@tx@/: amount to translate in the X direction -} -> Double {- ^ /@ty@/: amount to translate in the Y direction -} -> m () matrixTranslate matrix tx ty = liftIO $ do matrix' <- unsafeManagedPtrGetPtr matrix let tx' = realToFrac tx let ty' = realToFrac ty pango_matrix_translate matrix' tx' ty' touchManagedPtr matrix return () data MatrixTranslateMethodInfo instance (signature ~ (Double -> Double -> m ()), MonadIO m) => O.MethodInfo MatrixTranslateMethodInfo Matrix signature where overloadedMethod _ = matrixTranslate type family ResolveMatrixMethod (t :: Symbol) (o :: *) :: * where ResolveMatrixMethod "concat" o = MatrixConcatMethodInfo ResolveMatrixMethod "copy" o = MatrixCopyMethodInfo ResolveMatrixMethod "free" o = MatrixFreeMethodInfo ResolveMatrixMethod "rotate" o = MatrixRotateMethodInfo ResolveMatrixMethod "scale" o = MatrixScaleMethodInfo ResolveMatrixMethod "transformDistance" o = MatrixTransformDistanceMethodInfo ResolveMatrixMethod "transformPixelRectangle" o = MatrixTransformPixelRectangleMethodInfo ResolveMatrixMethod "transformPoint" o = MatrixTransformPointMethodInfo ResolveMatrixMethod "translate" o = MatrixTranslateMethodInfo ResolveMatrixMethod "getFontScaleFactor" o = MatrixGetFontScaleFactorMethodInfo ResolveMatrixMethod "getFontScaleFactors" o = MatrixGetFontScaleFactorsMethodInfo ResolveMatrixMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveMatrixMethod t Matrix, O.MethodInfo info Matrix p) => O.IsLabelProxy t (Matrix -> p) where fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveMatrixMethod t Matrix, O.MethodInfo info Matrix p) => O.IsLabel t (Matrix -> p) where fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif