packages feed

hfractal-0.1.0: Bindings.hs

module Bindings
  where

import Graphics.UI.GLUT
import Data.IORef
import System.Exit

import FracState
import FracImg

--TODO. Clean up by using Data.Accessor
keyboardAct :: IORef Mandstate -> Key -> KeyState -> IO ()
keyboardAct ms (SpecialKey KeyLeft) Down = do
  modifyIORef ms (\m@Mandstate{xmid=x,range=r} -> m{xmid=x - 0.1*r})
keyboardAct ms (SpecialKey KeyRight) Down = do
  modifyIORef ms (\m@Mandstate{xmid=x,range=r} -> m{xmid=x + 0.1*r})
keyboardAct ms (SpecialKey KeyUp) Down = do
  modifyIORef ms (\m@Mandstate{ymid=y,range=r} -> m{ymid=y + 0.1*r})
keyboardAct ms (SpecialKey KeyDown) Down = do
  modifyIORef ms (\m@Mandstate{ymid=y,range=r} -> m{ymid=y - 0.1*r})
keyboardAct ms (Char '+') Down = do
  modifyIORef ms (\m@Mandstate{range=r} -> m{range=r/rangemul})
keyboardAct ms (Char '-') Down = do
  modifyIORef ms (\m@Mandstate{range=r} -> m{range=r*rangemul})
keyboardAct ms (Char 'a') Down = do
  modifyIORef ms (\m@Mandstate{colourmul=cm} -> m{colourmul=cm*cmul})
keyboardAct ms (Char 's') Down = do
  modifyIORef ms (\m@Mandstate{colourmul=cm} -> m{colourmul=cm/cmul})
keyboardAct ms (Char 'p') Down = do
  ms' <- readIORef ms
  imagAt "frac.png" ms'
keyboardAct ms (Char 'o') Down = do
  ms' <- readIORef ms
  print ms'
keyboardAct _ (Char '\27') _ = exitWith ExitSuccess
keyboardAct _ _ _ = return ()