HGL-3.2.0.2: A simple graphics library based on X11 or Win32

Portability | non-portable (requires concurrency)
Stability | provisional
Maintainer | libraries@haskell.org
Safe Haskell | None

Graphics.HGL.Window

Contents

- Windows
- Drawing in a window
- Events in a window
- Timer ticks

Description

Windows in a simple graphics library.

Synopsis

- data Window
- type Title = String
- data RedrawMode
  - = DoubleBuffered
  - | Unbuffered
- openWindowEx :: Title -> Maybe Point -> Size -> RedrawMode -> Maybe Time -> IO Window
- getWindowRect :: Window -> IO (Point, Size)
- closeWindow :: Window -> IO ()
- setGraphic :: Window -> Graphic -> IO ()
- getGraphic :: Window -> IO Graphic
- modGraphic :: Window -> (Graphic -> Graphic) -> IO ()
- directDraw :: Window -> Graphic -> IO ()
- data Event
  - = Char {
    - char :: Char
    }
  - | Key {
    - keysym :: Key
    - isDown :: Bool
    }
  - | Button {
    - pt :: Point
    - isLeft :: Bool
    - isDown :: Bool
    }
  - | MouseMove {
    - pt :: Point
    }
  - | Resize
  - | Closed
- getWindowEvent :: Window -> IO Event
- maybeGetWindowEvent :: Window -> IO (Maybe Event)
- getWindowTick :: Window -> IO ()
- getTime :: IO Integer

# Windows

data Window Source

type Title = String Source

Title of a window.

data RedrawMode Source

How to draw in a window.

Constructors

DoubleBuffered | use a double buffer to reduce flicker. You should probably use this for animations.
Unbuffered | draw directly to the window. This runs slightly faster but is more prone to flicker.

openWindowEx Source

Arguments

:: Title | title of the window
-> Maybe Point | the optional initial position of a window
-> Size | initial size of the window
-> RedrawMode | how to display a graphic on the window
-> Maybe Time | the time between ticks (in milliseconds) of an optional timer associated with the window
-> IO Window |

General window creation.

getWindowRect :: Window -> IO (Point, Size)Source

The position of the top left corner of the window on the screen, and the size of the window.

closeWindow :: Window -> IO ()Source

Close the window.

# Drawing in a window

setGraphic :: Window -> Graphic -> IO ()Source

Set the current drawing in a window.

getGraphic :: Window -> IO Graphic Source

Get the current drawing in a window.

modGraphic :: Window -> (Graphic -> Graphic) -> IO ()Source

Update the drawing for a window. Note that this does not force a redraw.

directDraw :: Window -> Graphic -> IO ()Source

# Events in a window

data Event Source

A user interface event.

Notes:

- Programmers should assume that the `Event` datatype will be extended in the not-too-distant future and that individual events may change slightly. As a minimum, you should add a "match anything" alternative to any function which pattern matches against `Event`s.
- X11 systems typically have three button mice. Button 1 is used as the left button, button 3 as the right button and button 2 (the middle button) is ignored.

Constructors

Char | a properly translated character, sent after a key press.

Fields

char :: Char

  the character represented by a key combination

Key | occurs when a key was pressed or released.

Fields

keysym :: Key

  representation of the keyboard keys pressed

isDown :: Bool

  if `True`, the button was pressed; otherwise it was released

  if `True`, the key was pressed; otherwise it was released

Button | occurs when a mouse button is pressed or released.

Fields

pt :: Point

  the position of the mouse cursor after the movement

  the position of the mouse cursor

isLeft :: Bool

  if `True`, it was the left button

isDown :: Bool

  if `True`, the button was pressed; otherwise it was released

  if `True`, the key was pressed; otherwise it was released

MouseMove | occurs when the mouse is moved inside the window.

Fields

pt :: Point

  the position of the mouse cursor after the movement

  the position of the mouse cursor

Resize | occurs when the window is resized.
Closed | occurs when the window is closed.

Instances

Show Event |

getWindowEvent :: Window -> IO Event Source

Wait for the next event on the given window.

maybeGetWindowEvent :: Window -> IO (Maybe Event)Source

Check for a pending event on the given window.

# Timer ticks

Timers that tick at regular intervals are set up by `openWindowEx`.

getWindowTick :: Window -> IO ()Source

Wait for the next tick event from the timer on the given window.

getTime :: IO Integer Source

Time in milliseconds since some arbitrary epoch.