content: #!/usr/bin/env stack
  -- stack runghc --package reanimate
  {-# LANGUAGE OverloadedStrings #-}
  module Main (main) where
  
  import           Graphics.SvgTree (Tree)
  import           Reanimate
  
  main :: IO ()
  main = reanimate bbox
  
  bbox :: Animation
  bbox = addStatic bg $
      mapA (translate (-screenWidth/4) 0) bbox1 `parA`
      mapA (translate (screenWidth/4) 0) bbox2
    where
      bg = mkBackground "black"
  
  bbox1 :: Animation
  bbox1 = mkAnimation 5 $ \t ->
      mkGroup
        [ mkBoundingBox $ rotate (360*t) svg
        , withFillColor "white" $ rotate (360*t) svg ]
    where
      svg = scale 2 $ center $ latexAlign "\\sum_{k=1}^\\infty"
  
  bbox2 :: Animation
  bbox2 = playThenReverseA $ mkAnimation 2.5 $ \t ->
    mkGroup
      [ mkBoundingBox $ partialSvg t heartShape
      , withStrokeColor "white" $ withFillOpacity 0 $
        partialSvg t heartShape ]
  
  mkBoundingBox :: Tree -> Tree
  mkBoundingBox svg = withStrokeColor "red" $ withFillOpacity 0 $
      translate (x+w/2) (y+h/2) $
      mkRect w h
    where
      (x, y, w, h) = boundingBox svg
  
  heartShape :: Tree
  heartShape = lowerTransformations $ scaleXY 1 (-1) $ scale 0.1 $
      center $ rotateAroundCenter 225 $ mkPathString
        "M0.0,40.0 v-40.0 h40.0\
        \a20.0 20.0 90.0 0 1 0.0,40.0\
        \a20.0 20.0 90.0 0 1 -40.0,0.0 Z"
  