{-| Module : Graphics.OscPacking.Paint Description : Displaying packings on the screen Copyright : (c) Christopher Howard, 2016 License : GPL-3 Maintainer : ch.howard@zoho.com -} module Graphics.OscPacking.Paint where import Prelude (Int, IO, take, (/), (*)) import Graphics.OscPacking.Packing import Graphics.OscPacking.Interpret import Graphics.Gloss (Picture, display, Display (InWindow, FullScreen), Color, translate) -- |Generating a packing from Packing parameters and convert into a Picture buildPicture :: Interpretation -- ^ graphical interpretation method -> Packing -- ^ initialization parameters -> Int -- ^ maximum number of circles to build -> Picture buildPicture intp pkg maxcircles = translate ((-1) * boxWidth pkg / 2) ((-1) * boxHeight pkg / 2) (intp (take maxcircles (pack pkg))) -- |Display a picture in a window on-screen displayWindow :: (Int, Int) -- ^ width and height of window -> Color -- ^ background color -> Picture -- ^ the Picture to display -> IO () displayWindow (width, height) bg pic = display (InWindow "KC" (width, height) (0, 0)) bg pic -- |Display a picture in full-screen mode displayFullscreen :: (Int, Int) -- ^ width and height of actual display area -> Color -- ^ background color -> Picture -- ^ the Picture to display -> IO () displayFullscreen (width, height) bg pic = display (FullScreen (width, height)) bg pic -- Removed because, at late processing stages, does not all for -- processing keyboard input often enough: -- growWindow :: (Int, Int) -> Color -> Interpretation -> Int -> Packing -> IO () -- growWindow (width, height) bg intp stepsPerSec pkg = -- simulate (InWindow "KC" (width, height) (0, 0)) bg stepsPerSec -- ([head circles], tail circles) toPic step -- where circles = pack pkg -- toPic (usedCircles, _) = translate ((-1) * boxWidth pkg / 2) -- ((-1) * boxHeight pkg / 2) -- (intp usedCircles) -- step _ _ (usedCircles, remCircles) = (head remCircles : usedCircles, tail remCircles)