summaryrefslogtreecommitdiff
path: root/src/Graphics/Fountainhead/Type.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Graphics/Fountainhead/Type.hs')
-rw-r--r--src/Graphics/Fountainhead/Type.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Graphics/Fountainhead/Type.hs b/src/Graphics/Fountainhead/Type.hs
index 07031e4..e809d9c 100644
--- a/src/Graphics/Fountainhead/Type.hs
+++ b/src/Graphics/Fountainhead/Type.hs
@@ -8,10 +8,12 @@ module Graphics.Fountainhead.Type
, Fixed32(..)
, FWord
, UFWord
+ , fixed2Double
, succIntegral
, ttfEpoch
) where
+import Data.Bits ((.>>.), (.&.))
import Data.Int (Int16)
import Data.Word (Word16, Word32)
import Data.Time (Day(..))
@@ -31,3 +33,9 @@ ttfEpoch = fromOrdinalDate 1904 1
succIntegral :: Integral a => a -> Int
succIntegral = succ . fromIntegral
+
+fixed2Double :: F2Dot14 -> Double
+fixed2Double (F2Dot14 fixed) =
+ let mantissa = realToFrac (fixed .>>. 14)
+ fraction = realToFrac (fixed .&. 0x3fff) / 16384.0
+ in mantissa + fraction