packages feed

aosd-0.1.2: test/test.hs

{-# LANGUAGE NoMonomorphismRestriction, StandaloneDeriving, OverloadedStrings, NamedFieldPuns, TemplateHaskell, RecordWildCards #-}
import Graphics.Aosd.Pango
import Control.Monad
import Control.Concurrent
import Data.Monoid
import Language.Haskell.TH
import Language.Haskell.Extract
import Data.Functor
import Graphics.Rendering.Pango.Enums

deriving instance Show LayoutAlignment
deriving instance Show LayoutWrapMode

main = mapM_ run ( $(functionExtractor "Test$") :: [(String,IO ())] )
    where
        run :: (String,IO()) -> IO ()
        run (n,a) = do
            putStrLn ("Running "++n)
            header <- aosdNew (defaultOpts { yPos = Min, offset = (0,100) }) (textRenderer (pText n))
            aosdShow header
            aosdRender header
            aosdLoopOnce header
            a
            aosdHide header
            aosdLoopOnce header

go t r = aosdFlash defaultOpts r (symDurations 100 t) 
goText t f pm = go t (f (textRenderer pm))

tagsMarkup = pUnlines $(listE [ appE (varE (mkName n)) (litE (stringL n)) | n <- words "pBold pBig pItalic pStrikethrough pSmall pSub pSup pUnderline pMono"]) 

tagsTest = goText 7000 (\x -> x { colour=green }) tagsMarkup 


-- catTest = do
--     go 3000 (HCat (textRenderer "Horizontal") (textRenderer "Cat"))
--     go 3000 (VCat (textRenderer "Vertical") (textRenderer "Cat"))


alignmentsTest = do
    sequence_ [ goText 1000 (\x -> x { width = Just width, 
                                       wrapMode = wrap, 
                                       alignment = Just al, 
                                       colour = magenta }) 

                    (pSized 14 $ pUnlines [ pText firstLine 
                              , pShow width
                              , pShow wrap
                              , pShow al]) 

              | al <- [AlignLeft, AlignRight, AlignCenter], 
                firstLine <- flip replicate 'o' <$> [5,80],
                (width,wrap) <- [(Unlimited,Nothing) ,
                                 (100,Just WrapWholeWords) ,
                                 (100,Just WrapAnywhere)
                                 ] 
              
              
              ]


leftOverflowTest =
    sequence_ [ do
                 print ("xPos",xPos)
                 aosdFlash 
                    (defaultOpts {xPos}) 
                    (textRenderer txt) 
                        { alignment = Just AlignRight, width = Just 300, wrapMode = Just WrapWholeWords } 
                    (symDurations 100 3000)
               | xPos <- [Center,Min,Max] ]

 where
    txt0 = "LeftOverflow"
    txt = pSized 24 (pBold "LeftEnd" `mappend` 
                     pText (concat (replicate 4 txt0)) `mappend`
                     pBold "RightEnd"
                    )


sizesTest = do
    goText 2000 id $ mconcat [ pSpan [FontSize s] (pText (show s)) | s <- [ SizeSmall, SizeMedium, SizeLarge, SizeHuge, SizeGiant, SizePoint 12 ] ]

singleParagraphModeTest = do
    goText 1000 (\x -> x { singleParagraphMode = Just True }) (pText . unlines . words $ "single paragraph mode")
     
dur = 5000

posTest = forEachPos f
    where
        f xPos yPos = do
                    let tr = (textRenderer (pText $ show (xPos,yPos))) { colour = red } 
                    aosdFlash defaultOpts { xPos, yPos } tr (symDurations 500 dur)  

forEachPos f = do

    sequence [ forkOS $ f xPos yPos 

              | (xPos,yPos) <- join (liftM2 (,)) [minBound..maxBound]
             ]

    threadDelay ((fromIntegral dur+1000)*1000)

    
    --mapM f strings

--f s = flashText defaultTextConf s (symDurations 200 200)

prStatus = liftIO . print =<< status


circleTest = forEachPos doCircle

doCircle xPos yPos = aosdFlash defaultOpts { xPos, yPos } GeneralRenderer{..} (symDurations 100 2000)
    where
        grInkExtent = Rectangle (-r) (-r) (2*r) (2*r)
        grPositioningExtent = Rectangle (-r_half) (-r_half) r r 

        r_half = 50

        r = 2*r_half

        lw = 10

        grRender = do
            setSourceRGBA 0 1 1 1
            setLineWidth lw
            arc 0 0 (r-lw) 0 (2*pi)
            stroke
            setSourceRGBA 1 0 1 1
            setLineWidth 2
            arc 0 0 (r_half-2) 0 (2*pi)
            stroke
            prStatus

transparencyTest = goText 3000 (\s -> s { colour = lime, opacity = 0.5 }) 
                    (pSized 100 "Transparency")