{-| Brillo hides the pain of drawing simple vector graphics behind a nice data type and
     a few display functions.

  Getting something on the screen is as easy as:

 @
 import Brillo
 main = `display` (InWindow \"Nice Window\" (200, 200) (10, 10)) `white` (`Circle` 80)
 @

  Once the window is open you can use the following:

@
* Quit
  - esc-key

* Move Viewport
  - arrow keys
  - left-click drag

* Zoom Viewport
  - page up/down-keys
  - control-left-click drag
  - right-click drag
  - mouse wheel

* Rotate Viewport
  - home/end-keys
  - alt-left-click drag

* Reset Viewport
  'r'-key
@


  Animations can be constructed similarly using the `animate`.

  If you want to run a simulation based around finite time steps then try
  `simulate`.

  If you want to manage your own key\/mouse events then use `play`.

  Brillo uses OpenGL under the hood, but you don't have to worry about any of that.

  Brillo programs should be compiled with @-threaded@, otherwise the GHC runtime
  will limit the frame-rate to around 20Hz.


For more information, check out <https://github.com/ad-si/Brillo>.
-}
module Brillo (
  module Brillo.Data.Picture,
  module Brillo.Data.Color,
  module Brillo.Data.Bitmap,
  Display (..),
  display,
  animate,
  simulate,
  play,
)
where

import Brillo.Data.Bitmap
import Brillo.Data.Color
import Brillo.Data.Display
import Brillo.Data.Picture
import Brillo.Interface.Pure.Animate
import Brillo.Interface.Pure.Display
import Brillo.Interface.Pure.Game
import Brillo.Interface.Pure.Simulate