packages feed

imj-base-0.1.0.2: test/Test/Imj/InterpolatedColorString.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Imj.InterpolatedColorString(testICS) where

import           Control.Monad.IO.Class(MonadIO)
import           Control.Monad.Reader.Class(MonadReader)
import           Control.Monad(void)

import           Data.Monoid((<>))

import           Imj.Geo.Discrete
import           Imj.Graphics.Color
import           Imj.Graphics.Interpolation
import           Imj.Graphics.Render
import           Imj.Graphics.Text.ColorString

testICS :: (Draw e, MonadReader e m, MonadIO m)
        => m ()
testICS = do

  let from = colored "hello" (rgb 5 0 0) <> colored " world" (rgb 0 5 0) <> colored " :)" (rgb 3 5 1)
      to   = colored "hello" (rgb 5 5 5) <> colored " world" (rgb 1 2 5) <> colored " :)" (rgb 5 1 4)
      e@(Evolution _ (Frame lastFrame) _ _) = mkEvolutionEaseQuart (Successive [from, to]) 1
      from' = colored "travel" (rgb 5 0 0)
      to'   = colored "trail" (rgb 5 5 5)
      e'@(Evolution _ (Frame lastFrame') _ _) = mkEvolutionEaseQuart (Successive [from', to']) 1
      pFrom   = colored "[.]" (rgb 5 5 5)
      pTo   = colored "[......]" (rgb 5 5 5)
      e''@(Evolution _ (Frame lastFrame'') _ _) = mkEvolutionEaseQuart (Successive [pFrom, pTo]) 1
      p1   = colored "[.]" (rgb 5 5 5)
      p2   = colored "[.]" (rgb 5 0 0)
      e'''@(Evolution _ (Frame lastFrame''') _ _) = mkEvolutionEaseQuart (Successive [p1,p2,p1]) 1

  mapM_
    (\i@(Frame c') -> do
      let cs = getValueAt e i
          c = Coord c'
      drawColorString' cs (Coords (c + 10) 3) zeroCoords
    ) $ map Frame [0..lastFrame]

  mapM_
    (\i@(Frame c') -> do
      let cs = getValueAt e' i
          c = Coord c'
      drawColorString' cs (Coords (c + 10) 25) zeroCoords
    ) $ map Frame [0..lastFrame']

  mapM_
    (\i@(Frame c') -> do
      let cs = getValueAt e'' i
          c = Coord c'
      drawColorString' cs (Coords (c + 20) 25) zeroCoords
    ) $ map Frame [0..lastFrame'']

  mapM_
    (\i@(Frame c') -> do
      let cs@(ColorString l) = getValueAt e''' i
          (_,color) = head l
          c = Coord c'
      drawColorString' cs (Coords (c + 30) 25) zeroCoords
      drawStr''' (show color) (Coords (c + 30) 35) zeroCoords
    ) $ map Frame [0..lastFrame''']

drawColorString' :: (Draw e, MonadReader e m, MonadIO m)
             => ColorString
             -> Coords Pos
             -> Coords Pos
             -> m ()
drawColorString' cs pos rs =
  void (drawColorStr cs (translate pos rs))

drawStr''' :: (Draw e, MonadReader e m, MonadIO m)
         => String
         -> Coords Pos
         -> Coords Pos
         -> m (Coords Pos)
drawStr''' cs pos rs =
  drawStr'' cs (translate pos rs) (LayeredColor black white)


drawStr'' :: (Draw e, MonadReader e m, MonadIO m)
          => String
          -> Coords Pos
          -> LayeredColor
          -> m (Coords Pos)
drawStr'' str pos color =
  drawStr str pos color >> return (translateInDir Down pos)