packages feed

babl (empty) → 0.0.0.1

raw patch · 7 files changed

+441/−0 lines, 7 filesdep +basesetup-changed

Dependencies added: base

Files

+ LICENSE view
@@ -0,0 +1,165 @@+                  GNU LESSER GENERAL PUBLIC LICENSE+                       Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.+++  This version of the GNU Lesser General Public License incorporates+the terms and conditions of version 3 of the GNU General Public+License, supplemented by the additional permissions listed below.++  0. Additional Definitions.++  As used herein, "this License" refers to version 3 of the GNU Lesser+General Public License, and the "GNU GPL" refers to version 3 of the GNU+General Public License.++  "The Library" refers to a covered work governed by this License,+other than an Application or a Combined Work as defined below.++  An "Application" is any work that makes use of an interface provided+by the Library, but which is not otherwise based on the Library.+Defining a subclass of a class defined by the Library is deemed a mode+of using an interface provided by the Library.++  A "Combined Work" is a work produced by combining or linking an+Application with the Library.  The particular version of the Library+with which the Combined Work was made is also called the "Linked+Version".++  The "Minimal Corresponding Source" for a Combined Work means the+Corresponding Source for the Combined Work, excluding any source code+for portions of the Combined Work that, considered in isolation, are+based on the Application, and not on the Linked Version.++  The "Corresponding Application Code" for a Combined Work means the+object code and/or source code for the Application, including any data+and utility programs needed for reproducing the Combined Work from the+Application, but excluding the System Libraries of the Combined Work.++  1. Exception to Section 3 of the GNU GPL.++  You may convey a covered work under sections 3 and 4 of this License+without being bound by section 3 of the GNU GPL.++  2. Conveying Modified Versions.++  If you modify a copy of the Library, and, in your modifications, a+facility refers to a function or data to be supplied by an Application+that uses the facility (other than as an argument passed when the+facility is invoked), then you may convey a copy of the modified+version:++   a) under this License, provided that you make a good faith effort to+   ensure that, in the event an Application does not supply the+   function or data, the facility still operates, and performs+   whatever part of its purpose remains meaningful, or++   b) under the GNU GPL, with none of the additional permissions of+   this License applicable to that copy.++  3. Object Code Incorporating Material from Library Header Files.++  The object code form of an Application may incorporate material from+a header file that is part of the Library.  You may convey such object+code under terms of your choice, provided that, if the incorporated+material is not limited to numerical parameters, data structure+layouts and accessors, or small macros, inline functions and templates+(ten or fewer lines in length), you do both of the following:++   a) Give prominent notice with each copy of the object code that the+   Library is used in it and that the Library and its use are+   covered by this License.++   b) Accompany the object code with a copy of the GNU GPL and this license+   document.++  4. Combined Works.++  You may convey a Combined Work under terms of your choice that,+taken together, effectively do not restrict modification of the+portions of the Library contained in the Combined Work and reverse+engineering for debugging such modifications, if you also do each of+the following:++   a) Give prominent notice with each copy of the Combined Work that+   the Library is used in it and that the Library and its use are+   covered by this License.++   b) Accompany the Combined Work with a copy of the GNU GPL and this license+   document.++   c) For a Combined Work that displays copyright notices during+   execution, include the copyright notice for the Library among+   these notices, as well as a reference directing the user to the+   copies of the GNU GPL and this license document.++   d) Do one of the following:++       0) Convey the Minimal Corresponding Source under the terms of this+       License, and the Corresponding Application Code in a form+       suitable for, and under terms that permit, the user to+       recombine or relink the Application with a modified version of+       the Linked Version to produce a modified Combined Work, in the+       manner specified by section 6 of the GNU GPL for conveying+       Corresponding Source.++       1) Use a suitable shared library mechanism for linking with the+       Library.  A suitable mechanism is one that (a) uses at run time+       a copy of the Library already present on the user's computer+       system, and (b) will operate properly with a modified version+       of the Library that is interface-compatible with the Linked+       Version.++   e) Provide Installation Information, but only if you would otherwise+   be required to provide such information under section 6 of the+   GNU GPL, and only to the extent that such information is+   necessary to install and execute a modified version of the+   Combined Work produced by recombining or relinking the+   Application with a modified version of the Linked Version. (If+   you use option 4d0, the Installation Information must accompany+   the Minimal Corresponding Source and Corresponding Application+   Code. If you use option 4d1, you must provide the Installation+   Information in the manner specified by section 6 of the GNU GPL+   for conveying Corresponding Source.)++  5. Combined Libraries.++  You may place library facilities that are a work based on the+Library side by side in a single library together with other library+facilities that are not Applications and are not covered by this+License, and convey such a combined library under terms of your+choice, if you do both of the following:++   a) Accompany the combined library with a copy of the same work based+   on the Library, uncombined with any other library facilities,+   conveyed under the terms of this License.++   b) Give prominent notice with the combined library that part of it+   is a work based on the Library, and explaining where to find the+   accompanying uncombined form of the same work.++  6. Revised Versions of the GNU Lesser General Public License.++  The Free Software Foundation may publish revised and/or new versions+of the GNU Lesser General Public License from time to time. Such new+versions will be similar in spirit to the present version, but may+differ in detail to address new problems or concerns.++  Each version is given a distinguishing version number. If the+Library as you received it specifies that a certain numbered version+of the GNU Lesser General Public License "or any later version"+applies to it, you have the option of following the terms and+conditions either of that published version or of any later version+published by the Free Software Foundation. If the Library as you+received it does not specify a version number of the GNU Lesser+General Public License, you may choose any version of the GNU Lesser+General Public License ever published by the Free Software Foundation.++  If the Library as you received it specifies that a proxy can decide+whether future versions of the GNU Lesser General Public License shall+apply, that proxy's public statement of acceptance of any version is+permanent authorization for you to choose that version for the+Library.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ babl.cabal view
@@ -0,0 +1,31 @@+name:                babl+version:             0.0.0.1+synopsis:            Initial project template from stack+description:         Please see README.md+homepage:            http://github.com/nek0/babl#readme+license:             LGPL-3+license-file:        LICENSE+author:              nek0+maintainer:          nek0@nek0.eu+-- copyright:+category:            Graphics+build-type:          Simple+-- extra-source-files:+cabal-version:       >=1.10++library+  exposed-modules:     BABL+                     , BABL.Format+                     , BABL.FFI+                     , BABL.FFI.Format+  hs-source-dirs:      src+  default-language:    Haskell2010+  other-extensions:    ForeignFunctionInterface+  extra-libraries:     babl-0.1+  includes:            babl/babl.h+  pkgconfig-depends:   babl >= 0.1.16+  build-depends:       base >= 4.7 && < 5++source-repository head+  type:     git+  location: https://github.com/nek0/babl
+ src/BABL.hs view
@@ -0,0 +1,17 @@+module BABL+    ( babl_init+    , babl_exit+    , module BABL.Format+    ) where++import BABL.Format++import qualified BABL.FFI as FFI++-- | Initialize the BABL environment.+--   This function must be called before performing any conversions+babl_init :: IO ()+babl_init = FFI.c_babl_init++-- | Exit and clean up after BABL has been used+babl_exit = FFI.c_babl_exit
+ src/BABL/FFI.hs view
@@ -0,0 +1,15 @@+-- | FFI module for basic functions+module BABL.FFI+  ( c_babl_init+  , c_babl_exit+  ) where++import Foreign++-- | Interface to the @babl_init@ function in C+foreign import ccall unsafe "babl.h babl_init"+  c_babl_init :: IO ()++-- | Interface to the @babl_exit@ function in C+foreign import ccall unsafe "babl.h babl_exit"+  c_babl_exit :: IO ()
+ src/BABL/FFI/Format.hs view
@@ -0,0 +1,129 @@+-- FFI module for handling pixel formats+module BABL.FFI.Format+  ( BablFormatPtr(..)+  , BablFormatDummy+  , ComponentModel(..)+  , ComponentFormat(..)+  , PixelFormat(..)+  , c_babl_format+  , c_babl_get_bpp+  , c_babl_format_get_n_components+  ) where++import Foreign+import Foreign.C.Types (CInt(..))+import Foreign.C.String+import Foreign.Ptr (Ptr)++-- | The dummy Pointer behind 'BablFormatPtr'. Do not 'peek' or 'poke'+type BablFormatDummy = Ptr ()+data BablFormatPtr = BablFormatPtr+  { unwrap :: BablFormatDummy }++-- | List of component models af babl formats.+data ComponentModel+  = RGB+  | RGBA+  | RaGaBaA+  | R'G'B'+  | R'G'B'A+  | R'aG'aB'aA+  | Y+  | YA+  | YaA+  | Y'+  | Y'A+  | Y'aA+  | Y'CbCr+  | Y'CbCrA+  | HSVA+  | HSV+  | CMYK+  | CMY+  | CIELab+  | CIELabAlpha+  | CIELCHab+  | CIELCHabAlpha+  | HSLA+  | HSL+  | Y'CbCr709+  | Y'CbCrA709+  | Cairo++instance Show ComponentModel where+  show RGB           = "RGB"+  show RGBA          = "RGBA"+  show RaGaBaA       = "RaGaBaA"+  show R'G'B'        = "R'G'B'"+  show R'G'B'A       = "R'G'B'A"+  show R'aG'aB'aA    = "R'aG'aB'aA"+  show Y             = "Y"+  show YA            = "YA"+  show YaA           = "YaA"+  show Y'            = "Y'"+  show Y'A           = "Y'A"+  show Y'aA          = "Y'aA"+  show Y'CbCr        = "Y'CbCr"+  show Y'CbCrA       = "Y'CbCrA"+  show HSVA          = "HSVA"+  show HSV           = "HSV"+  show CMYK          = "CMYK"+  show CMY           = "CMY"+  show CIELab        = "CIE Lab"+  show CIELabAlpha   = "CIE Lab alpha"+  show CIELCHab      = "CIE LCH(ab)"+  show CIELCHabAlpha = "CIE LCH(ab) alpha"+  show HSLA          = "HSLA"+  show HSL           = "HSL"+  show Y'CbCr709     = "Y'CbCr709"+  show Y'CbCrA709    = "Y'CbCrA709"+  show Cairo         = error "no show for Cairo model"++-- | Byte format of a colour component.+data ComponentFormat+  = CFhalf+  | CFfloat+  | CFdouble+  | CFu8+  | CFu15+  | CFu16+  | CFu32+  | A8+  | RGB24+  | ARGB32++instance Show ComponentFormat where+  show CFhalf   = "half"+  show CFfloat  = "float"+  show CFdouble = "double"+  show CFu8     = "u8"+  show CFu15    = "u15"+  show CFu16    = "u16"+  show CFu32    = "u32"+  show _        = error "no show here"++data PixelFormat+  = PixelFormat+    { pfComponents :: ComponentModel+    , pfType       :: ComponentFormat+    }++-- | create a new predefined BABL format+foreign import ccall unsafe "babl.h babl_format"+  c_babl_format+    :: CString -- ^ Format name+    -> IO BablFormatDummy++-- | create and define your own BABL format+-- foreign import ccall unsafe "babl.h babl_format_new"++-- | Get the number of bytes per pixel from a format.+foreign import ccall unsafe "babl.h babl_format_get_bytes_per_pixel"+  c_babl_get_bpp+    :: BablFormatDummy -- ^ Format to be drawn from+    -> IO CInt++foreign import ccall unsafe "babl.h babl_format_get_n_components"+  c_babl_format_get_n_components+    :: BablFormatDummy+    -> IO CInt
+ src/BABL/Format.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE RecordWildCards #-}++-- | This module contains the pixel formats supprted my babl+module BABL.Format+  ( FFI.PixelFormat(..)+  , FFI.ComponentModel(..)+  , FFI.ComponentFormat(..)+  , FFI.BablFormatPtr+  , babl_format+  , babl_get_bpp+  , babl_format_by_str+  , babl_components_per_pixel+  ) where++import qualified BABL.FFI.Format as FFI++import Foreign.C.String (withCString)+import Foreign.C.Types (CInt(..))++babl_components_per_pixel :: FFI.PixelFormat -> Int+babl_components_per_pixel FFI.PixelFormat{..} =+  case pfComponents of+    FFI.RGB        -> 3+    FFI.RGBA       -> 4+    FFI.RaGaBaA    -> 4+    FFI.R'G'B'     -> 3+    FFI.R'G'B'A    -> 4+    FFI.R'aG'aB'aA -> 4+    FFI.Y          -> 1+    FFI.YA         -> 2+    FFI.YaA        -> 2+    FFI.Y'         -> 1+    FFI.Y'A        -> 2+    FFI.Y'aA       -> 2+    FFI.Y'CbCr     -> 3+    FFI.Y'CbCrA    -> 4+    FFI.HSVA       -> 4+    FFI.HSV        -> 3+    FFI.CMYK       -> 4+    FFI.CMY        -> 3+    FFI.CIELab     -> 3+    FFI.CIELabAlpha   -> 4+    FFI.CIELCHab      -> 3+    FFI.CIELCHabAlpha -> 4+    FFI.HSLA          -> 4+    FFI.HSL           -> 3+    FFI.Y'CbCr709     -> 3+    FFI.Y'CbCrA709    -> 4+    FFI.Cairo         -> case pfType of+      FFI.A8     -> 1+      FFI.RGB24  -> 4+      FFI.ARGB32 -> 4+      _          -> error "wrong type"++-- | Create a 'BablFormatPtr' to pass around to other functions.+babl_format+  :: FFI.PixelFormat        -- ^ Format to be used+  -> IO FFI.BablFormatPtr -- ^ Pointer to specified format+babl_format (FFI.PixelFormat FFI.Cairo pfType) =+  case pfType of+    FFI.A8     -> babl_format_by_str "cairo-A8"+    FFI.RGB24  -> babl_format_by_str "cairo-RGB24"+    FFI.ARGB32 -> babl_format_by_str "cairo-ARGB32"+    _          -> error "not a cairo format"+babl_format FFI.PixelFormat{..} =+  babl_format_by_str (show pfComponents ++ " " ++ show pfType)++-- | Build 'BablFormatPtr' by input String+babl_format_by_str+  :: String -- ^ Input string+  -> IO FFI.BablFormatPtr+babl_format_by_str s =+  return . FFI.BablFormatPtr =<< withCString s FFI.c_babl_format++-- | Peek the number of bytes per pixel from a format.+babl_get_bpp+  :: FFI.PixelFormat -- ^ Format to peek from+  -> IO Int+babl_get_bpp form = do+  (FFI.BablFormatPtr ptr) <- babl_format form+  (CInt res) <- FFI.c_babl_get_bpp ptr+  return $ fromIntegral res