#!/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 = bg `parA` mapA (translate (-screenWidth/4) 0) bbox1 `parA` mapA (translate (screenWidth/4) 0) bbox2 where bg = animate $ const $ 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"