mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-11 16:12:20 +00:00
fix bug
This commit is contained in:
parent
17aa42704a
commit
874b1707a8
1 changed files with 19 additions and 25 deletions
|
|
@ -4,15 +4,12 @@ module Main (main) where
|
||||||
|
|
||||||
import Reanimate
|
import Reanimate
|
||||||
import Reanimate.Builtin.Documentation
|
import Reanimate.Builtin.Documentation
|
||||||
import Reanimate.Transition
|
|
||||||
import Reanimate.Svg
|
|
||||||
import Reanimate.Scene
|
import Reanimate.Scene
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Graphics.SvgTree hiding (Point, Text, height)
|
|
||||||
import Text.Printf
|
|
||||||
|
|
||||||
|
|
||||||
|
customDuration :: Duration
|
||||||
customDuration = 3
|
customDuration = 3
|
||||||
data Point = Point Double Double
|
data Point = Point Double Double
|
||||||
data Segment = Segment Point Point
|
data Segment = Segment Point Point
|
||||||
|
|
@ -46,7 +43,7 @@ animateFork (Segment (Point startx starty) (Point endx endy))
|
||||||
|
|
||||||
-- Helper function to label a proccess with a pid
|
-- Helper function to label a proccess with a pid
|
||||||
labelPids :: Segment -> Int -> SVG
|
labelPids :: Segment -> Int -> SVG
|
||||||
labelPids (Segment (Point startx starty) (Point endx endy)) i = mkGroup
|
labelPids (Segment (Point startx starty) _ i = mkGroup
|
||||||
[translate (startx - 0.75) (starty) $ scale 0.25 $ outlineText $T.pack("pid: " ++ (show i))]
|
[translate (startx - 0.75) (starty) $ scale 0.25 $ outlineText $T.pack("pid: " ++ (show i))]
|
||||||
|
|
||||||
-- Helper function to position a line of text
|
-- Helper function to position a line of text
|
||||||
|
|
@ -54,11 +51,6 @@ mkTextLabel:: [Char] -> Point -> SVG
|
||||||
mkTextLabel txt (Point startx starty) = mkGroup
|
mkTextLabel txt (Point startx starty) = mkGroup
|
||||||
[translate (startx) (starty) $ scale 0.2 $ outlineText $ T.pack(txt)]
|
[translate (startx) (starty) $ scale 0.2 $ outlineText $ T.pack(txt)]
|
||||||
|
|
||||||
-- Helper function to label a printf() call
|
|
||||||
mkPrintLabels :: [Point] -> [Char] -> [Animation]
|
|
||||||
mkPrintLabels pointList txt =
|
|
||||||
map slowAnimation ( map oFadeIn (map (\p -> mkTextLabel ("printf(" ++ (show txt) ++ ")" ) p) pointList))
|
|
||||||
|
|
||||||
mkPrintLabelFromPnt :: Point -> [Char] -> Animation
|
mkPrintLabelFromPnt :: Point -> [Char] -> Animation
|
||||||
mkPrintLabelFromPnt pnt txt =
|
mkPrintLabelFromPnt pnt txt =
|
||||||
oFadeIn $ mkTextLabel ("printf(" ++ (show txt) ++ ")" ) pnt
|
oFadeIn $ mkTextLabel ("printf(" ++ (show txt) ++ ")" ) pnt
|
||||||
|
|
@ -66,10 +58,6 @@ mkPrintLabelFromPnt pnt txt =
|
||||||
speedUpAnimation :: Animation -> Animation
|
speedUpAnimation :: Animation -> Animation
|
||||||
speedUpAnimation anim = adjustDuration (*0.5) anim
|
speedUpAnimation anim = adjustDuration (*0.5) anim
|
||||||
|
|
||||||
-- Helper function to slow down an animation
|
|
||||||
slowAnimation :: Animation -> Animation
|
|
||||||
slowAnimation anim = adjustDuration (*1.5) anim
|
|
||||||
|
|
||||||
-- Helper function to label a fork() call and its return value
|
-- Helper function to label a fork() call and its return value
|
||||||
mkForkLabel :: Point -> Int -> Animation
|
mkForkLabel :: Point -> Int -> Animation
|
||||||
mkForkLabel point val = oFadeIn (mkTextLabel ("fork() = " ++ (show val) ) point)
|
mkForkLabel point val = oFadeIn (mkTextLabel ("fork() = " ++ (show val) ) point)
|
||||||
|
|
@ -78,16 +66,6 @@ mkForkLabel point val = oFadeIn (mkTextLabel ("fork() = " ++ (show val) ) point)
|
||||||
mkWaitpidLabel :: Point -> Animation
|
mkWaitpidLabel :: Point -> Animation
|
||||||
mkWaitpidLabel pnt = oFadeIn $ mkTextLabel "waitpid(p, NULL, 0)" pnt
|
mkWaitpidLabel pnt = oFadeIn $ mkTextLabel "waitpid(p, NULL, 0)" pnt
|
||||||
|
|
||||||
-- Helper function to create a text label
|
|
||||||
createText :: Text -> SVG
|
|
||||||
createText txt = mkGroup
|
|
||||||
[ center
|
|
||||||
$ withStrokeColorPixel rtfdBackgroundColor
|
|
||||||
$ withStrokeWidth (0)
|
|
||||||
$ withFillOpacity 0
|
|
||||||
$ latex txt
|
|
||||||
, center $ latex txt ]
|
|
||||||
|
|
||||||
-- Helper function that creates an SVG of outlined text
|
-- Helper function that creates an SVG of outlined text
|
||||||
outlineText :: Text -> SVG
|
outlineText :: Text -> SVG
|
||||||
outlineText txt = mkGroup
|
outlineText txt = mkGroup
|
||||||
|
|
@ -111,24 +89,40 @@ main = reanimate
|
||||||
`andThen` (parentPrintfLabelAnim)
|
`andThen` (parentPrintfLabelAnim)
|
||||||
|
|
||||||
--Lists of segments that represent each proccess
|
--Lists of segments that represent each proccess
|
||||||
|
parentSegments :: [Segment]
|
||||||
parentSegments = splitSegments (Segment (Point (-6) 0) (Point 6 0)) 2
|
parentSegments = splitSegments (Segment (Point (-6) 0) (Point 6 0)) 2
|
||||||
|
|
||||||
|
childSegments :: [Segment]
|
||||||
childSegments = splitSegments (Segment (Point 0 (-3)) (Point 6 (-3))) 1
|
childSegments = splitSegments (Segment (Point 0 (-3)) (Point 6 (-3))) 1
|
||||||
|
|
||||||
|
forkSegment :: Segment
|
||||||
forkSegment = Segment (Point 0 0) (Point 0 (-3))
|
forkSegment = Segment (Point 0 0) (Point 0 (-3))
|
||||||
|
|
||||||
--Lists of animations for each line
|
--Lists of animations for each line
|
||||||
|
parentAnimations :: [Animation]
|
||||||
parentAnimations = map animatePart parentSegments
|
parentAnimations = map animatePart parentSegments
|
||||||
|
|
||||||
|
childAnimations :: [Animation]
|
||||||
childAnimations = map animatePart childSegments
|
childAnimations = map animatePart childSegments
|
||||||
|
|
||||||
|
forkAnimation :: Animation
|
||||||
forkAnimation = animateFork forkSegment
|
forkAnimation = animateFork forkSegment
|
||||||
|
|
||||||
--List of animations to label each proccess with its PID
|
--List of animations to label each proccess with its PID
|
||||||
|
pidLabelAnimations :: [Animation]
|
||||||
pidLabelAnimations = [speedUpAnimation (oFadeIn (labelPids (parentSegments !! 0) 1000)), speedUpAnimation (oFadeIn (labelPids (childSegments !! 0) 1001))]
|
pidLabelAnimations = [speedUpAnimation (oFadeIn (labelPids (parentSegments !! 0) 1000)), speedUpAnimation (oFadeIn (labelPids (childSegments !! 0) 1001))]
|
||||||
|
|
||||||
--List of animations to label the fork() calls
|
--List of animations to label the fork() calls
|
||||||
|
forkLabelAnims :: [Animation]
|
||||||
forkLabelAnims = [mkForkLabel (Point (0) 0.25) 1001, mkForkLabel (Point (0) (-2.75)) 0]
|
forkLabelAnims = [mkForkLabel (Point (0) 0.25) 1001, mkForkLabel (Point (0) (-2.75)) 0]
|
||||||
|
|
||||||
-- Animation to label the waitpid() call
|
-- Animation to label the waitpid() call
|
||||||
|
waitpidLabelAnim :: Animation
|
||||||
waitpidLabelAnim = mkWaitpidLabel (Point (0.75) (0.5))
|
waitpidLabelAnim = mkWaitpidLabel (Point (0.75) (0.5))
|
||||||
|
|
||||||
-- Animation to label printf()
|
-- Animation to label printf()
|
||||||
|
parentPrintfLabelAnim :: Animation
|
||||||
parentPrintfLabelAnim = mkPrintLabelFromPnt (Point (5) (0.25)) "I'm the parent, and I'm done waiting!"
|
parentPrintfLabelAnim = mkPrintLabelFromPnt (Point (5) (0.25)) "I'm the parent, and I'm done waiting!"
|
||||||
|
|
||||||
|
childPrintfLabelAnim :: Animation
|
||||||
childPrintfLabelAnim = mkPrintLabelFromPnt (Point (5) (-2.75)) "I'm the child!"
|
childPrintfLabelAnim = mkPrintLabelFromPnt (Point (5) (-2.75)) "I'm the child!"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue