M Graphics/Layout.hs => Graphics/Layout.hs +3 -2
@@ 95,7 95,8 @@ layoutGetBox' = mapX' toDouble . mapY' toDouble . layoutGetBox
-- | Retrieve the subtree under a node.
layoutGetChilds (LayoutFlow _ _ ret) = ret
layoutGetChilds (LayoutGrid _ _ _ ret) = ret
-layoutGetChilds (LayoutSpan _) = []
+layoutGetChilds (LayoutSpan (Leaf _)) = []
+layoutGetChilds (LayoutSpan (Branch _ ret)) = map LayoutSpan ret
layoutGetChilds (LayoutInline _ self _) = map LayoutSpan $ inlineChildren self
layoutGetChilds (LayoutInline' _ self _) = map LayoutSpan $ layoutChildren self
layoutGetChilds (LayoutConst _ _ childs) = childs
@@ 444,7 445,7 @@ boxLayout parent self paginate = self9
-- Useful for assembling glyph atlases.
glyphsPerFont :: (CastDouble x, CastDouble y, Eq x, Eq y, Eq z) =>
LayoutItem x y z -> M.Map (Pattern, Double) IS.IntSet
-glyphsPerFont (LayoutSpan self) | (_:_) <- glyphs =
+glyphsPerFont (LayoutSpan self@(Leaf _)) | (_:_) <- glyphs =
(pattern font, fontSize font) `M.singleton` IS.fromList glyphs
| otherwise = M.empty
where
M app/Integration.hs => app/Integration.hs +5 -2
@@ 12,7 12,7 @@ import qualified System.Directory as Dir
import Graphics.Layout.CSS (CSSBox(..), finalizeCSS')
import Graphics.Layout.CSS.Font (placeholderFont)
-import Graphics.Layout (LayoutItem, boxLayout,
+import Graphics.Layout (LayoutItem, boxLayout, glyphsPerFont,
layoutGetBox, layoutGetChilds, layoutGetInner)
import Graphics.Layout.Box (zeroBox)
import qualified Graphics.Layout.Box as B
@@ 42,6 42,7 @@ import SDL hiding (rotate)
import Foreign.C.Types (CInt)
import Data.Function (fix)
import Control.Monad (unless)
+import Control.Exception (evaluate)
import qualified Graphics.Text.Font.Choose as FC
initReferer :: IO (Page (CSSCond.ConditionalStyles (CSSBox Nil)))
@@ 140,7 141,9 @@ main = do
pages <- tryReadMVar pages'
case pages of
- Just (display:_) -> renderDisplay renderer display
+ Just (display:_) -> do
+ evaluate $ glyphsPerFont display
+ renderDisplay renderer display
_ -> return ()
present renderer
M app/Integration2.hs => app/Integration2.hs +8 -2
@@ 14,7 14,7 @@ import Data.Maybe (fromMaybe)
import Graphics.Layout.CSS.Font (placeholderFont)
import Graphics.Layout.CSS (finalizeCSS', CSSBox)
-import Graphics.Layout (LayoutItem, boxLayout)
+import Graphics.Layout (LayoutItem, boxLayout, glyphsPerFont)
import Graphics.Layout.Box (Length, Size(..), PaddedBox(..), zeroBox)
import Control.Exception (evaluate)
@@ 51,7 51,13 @@ main = do
layout = finalizeCSS' placeholderFont styles
layout `seq` print "Laying out page!"
res <- forkCompute $ boxLayout zeroBox { size = Size 1280 480 } layout False
- readMVar res
+ res' <- readMVar res
+ case res' of
+ (page:_) -> do
+ print "Gathering atlas"
+ evaluate $ glyphsPerFont page
+ return ()
+ _ -> return ()
--performGC
--FC.fini -- FIXME: GC still left FontConfig references...
return ()