Safe Haskell | None |
---|---|
Language | Haskell2010 |
Imj.Graphics.Render
Contents
- class Draw e where
- class Draw e => Render e where
- drawChar :: (Draw e, MonadReader e m, MonadIO m) => Char -> Coords Pos -> LayeredColor -> m ()
- drawChars :: (Draw e, MonadReader e m, MonadIO m) => Int -> Char -> Coords Pos -> LayeredColor -> m ()
- drawTxt :: (Draw e, MonadReader e m, MonadIO m) => Text -> Coords Pos -> LayeredColor -> m ()
- drawStr :: (Draw e, MonadReader e m, MonadIO m) => String -> Coords Pos -> LayeredColor -> m ()
- drawColorStr :: (Draw e, MonadReader e m, MonadIO m) => ColorString -> Coords Pos -> m ()
- drawAlignedTxt_ :: (Draw e, MonadReader e m, MonadIO m) => Text -> LayeredColor -> Alignment -> m ()
- drawAlignedTxt :: (Draw e, MonadReader e m, MonadIO m) => Text -> LayeredColor -> Alignment -> m Alignment
- drawAlignedColorStr :: (Draw e, MonadReader e m, MonadIO m) => Alignment -> ColorString -> m Alignment
- renderToScreen :: (Render e, MonadReader e m, MonadIO m) => m ()
- data LayeredColor = LayeredColor {}
- data Coords a = Coords {}
- data Alignment = Alignment {
- _alignmentKing :: !AlignmentKind
- _alignmentRef :: !(Coords Pos)
- data Text :: *
- data Char :: *
- type String = [Char]
- class Monad m => MonadIO (m :: * -> *)
- class Monad m => MonadReader r (m :: * -> *) | m -> r
Draw and Render
Draw
describes the ability to draw colored Char
s, String
s, Text
s.
Render
makes the result of draw*** calls visible on the screen.
Optimized instances of Draw
and Render
, for games and animations
drawing in the terminal, are
available in Imj.Graphics.Render.Delta.Env. They minimize stdout usage using double
buffering and delta rendering, thereby mitigating the
screen tearing effect.
Minimal complete definition
Methods
drawChar' :: MonadIO m => e -> Char -> Coords Pos -> LayeredColor -> m () Source #
Draw a Char
.
drawChars' :: MonadIO m => e -> Int -> Char -> Coords Pos -> LayeredColor -> m () Source #
Draw repeated chars.
drawTxt' :: MonadIO m => e -> Text -> Coords Pos -> LayeredColor -> m () Source #
Draw Text
.
drawStr' :: MonadIO m => e -> String -> Coords Pos -> LayeredColor -> m () Source #
Draw String
.
drawColorStr' :: MonadIO m => e -> ColorString -> Coords Pos -> m () Source #
Draw a ColorString
.
drawAlignedTxt_' :: MonadIO m => e -> Text -> LayeredColor -> Alignment -> m () Source #
Draw text aligned w.r.t alignment and reference coordinates.
drawAlignedTxt' :: MonadIO m => e -> Text -> LayeredColor -> Alignment -> m Alignment Source #
Draws text aligned w.r.t alignment and reference coordinates.
Returns an Alignment
where the reference coordinate of the input Alignment
was projected on the next line.
drawAlignedColorStr' :: MonadIO m => e -> Alignment -> ColorString -> m Alignment Source #
Draw a ColorString
with an Alignment
constraint.
class Draw e => Render e where Source #
Class describing the ability to render the result of a Draw
to the
screen.
It is left to the implementation to decide wether to clear the screen or not (after a
renderToScreen
for example), and with which color.
Minimal complete definition
From MonadReader
The functions below use Draw
and Render
instances in a MonadReader
monad.
Hence, if you run in a MonadReader
YourEnv
monad
(where YourEnv
is your environment equiped with Draw
and Render
instances),
you can write:
import Control.Monad.IO.Class(MonadIO) import Control.Monad.Reader.Class(MonadReader) import Control.Monad.Reader(runReaderT) import Imj.Graphics.Class.Render import Imj.Graphics.Render.FromMonadReader(drawStr, renderToScreen) helloWorld :: (Draw e, Render e, MonadReader e m, MonadIO m) => m () helloWorld = drawStr "Hello World" (Coords 10 10) green >> renderToScreen main = createEnv >>= runReaderT helloWorld
This example follows this pattern.
Draw char(s)
drawChar :: (Draw e, MonadReader e m, MonadIO m) => Char -> Coords Pos -> LayeredColor -> m () Source #
drawChars :: (Draw e, MonadReader e m, MonadIO m) => Int -> Char -> Coords Pos -> LayeredColor -> m () Source #
Draws a Char
multiple times, starting at the given coordinates and then
moving to the right.
Draw text
drawTxt :: (Draw e, MonadReader e m, MonadIO m) => Text -> Coords Pos -> LayeredColor -> m () Source #
drawStr :: (Draw e, MonadReader e m, MonadIO m) => String -> Coords Pos -> LayeredColor -> m () Source #
drawColorStr :: (Draw e, MonadReader e m, MonadIO m) => ColorString -> Coords Pos -> m () Source #
Draw a ColorString
.
Draw aligned text
drawAlignedTxt_ :: (Draw e, MonadReader e m, MonadIO m) => Text -> LayeredColor -> Alignment -> m () Source #
Draws text with Alignment
.
drawAlignedTxt :: (Draw e, MonadReader e m, MonadIO m) => Text -> LayeredColor -> Alignment -> m Alignment Source #
drawAlignedColorStr :: (Draw e, MonadReader e m, MonadIO m) => Alignment -> ColorString -> m Alignment Source #
Draw a ColorString
with an Alignment
constraint.
Render to the physical device
renderToScreen :: (Render e, MonadReader e m, MonadIO m) => m () Source #
Render the drawing to {the screen, the console, etc...}.
Reexports
data LayeredColor Source #
A background and a foreground Color8
.
Constructors
LayeredColor | |
Fields
|
Instances
Eq LayeredColor Source # | |
Show LayeredColor Source # | |
DiscreteDistance LayeredColor Source # | First interpolate background color, then foreground color |
DiscreteInterpolation LayeredColor Source # | First interpolate background color, then foreground color |
Constructors
Alignment | |
Fields
|
The character type Char
is an enumeration whose values represent
Unicode (or equivalently ISO/IEC 10646) characters (see
http://www.unicode.org/ for details). This set extends the ISO 8859-1
(Latin-1) character set (the first 256 characters), which is itself an extension
of the ASCII character set (the first 128 characters). A character literal in
Haskell has type Char
.
To convert a Char
to or from the corresponding Int
value defined
by Unicode, use toEnum
and fromEnum
from the
Enum
class respectively (or equivalently ord
and chr
).
Instances
Bounded Char | Since: 2.1 |
Enum Char | Since: 2.1 |
Eq Char | |
Data Char | Since: 4.0.0.0 |
Ord Char | |
Read Char | Since: 2.1 |
Show Char | Since: 2.1 |
Prim Char | |
Random Char | |
ErrorList Char | |
Unbox Char | |
Vector Vector Char | |
MVector MVector Char | |
Generic1 k (URec k Char) | |
IsString (Seq Char) | |
Functor (URec * Char) | |
Foldable (URec * Char) | |
Traversable (URec * Char) | |
Eq (URec k Char p) | |
Ord (URec k Char p) | |
Show (URec k Char p) | |
Generic (URec k Char p) | |
data Vector Char | |
data URec k Char | Used for marking occurrences of Since: 4.9.0.0 |
data MVector s Char | |
type Rep1 k (URec k Char) | |
type Rep (URec k Char p) | |
class Monad m => MonadIO (m :: * -> *) #
Monads in which IO
computations may be embedded.
Any monad built by applying a sequence of monad transformers to the
IO
monad will be an instance of this class.
Instances should satisfy the following laws, which state that liftIO
is a transformer of monads:
Minimal complete definition
Instances
MonadIO IO | Since: 4.9.0.0 |
MonadIO m => MonadIO (ListT m) | |
MonadIO m => MonadIO (MaybeT m) | |
(Error e, MonadIO m) => MonadIO (ErrorT e m) | |
MonadIO m => MonadIO (ExceptT e m) | |
MonadIO m => MonadIO (StateT s m) | |
MonadIO m => MonadIO (StateT s m) | |
(Monoid w, MonadIO m) => MonadIO (WriterT w m) | |
(Monoid w, MonadIO m) => MonadIO (WriterT w m) | |
MonadIO m => MonadIO (IdentityT * m) | |
MonadIO m => MonadIO (ReaderT * r m) | |
MonadIO m => MonadIO (ContT * r m) | |
(Monoid w, MonadIO m) => MonadIO (RWST r w s m) | |
(Monoid w, MonadIO m) => MonadIO (RWST r w s m) | |
class Monad m => MonadReader r (m :: * -> *) | m -> r #
See examples in Control.Monad.Reader.
Note, the partially applied function type (->) r
is a simple reader monad.
See the instance
declaration below.
Instances
MonadReader r m => MonadReader r (MaybeT m) | |
MonadReader r m => MonadReader r (ListT m) | |
(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) | |
(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) | |
MonadReader r m => MonadReader r (StateT s m) | |
MonadReader r m => MonadReader r (StateT s m) | |
MonadReader r m => MonadReader r (IdentityT * m) | |
MonadReader r m => MonadReader r (ExceptT e m) | |
(Error e, MonadReader r m) => MonadReader r (ErrorT e m) | |
Monad m => MonadReader r (ReaderT * r m) | |
MonadReader r ((->) LiftedRep LiftedRep r) | |
MonadReader r' m => MonadReader r' (ContT * r m) | |
(Monad m, Monoid w) => MonadReader r (RWST r w s m) | |
(Monad m, Monoid w) => MonadReader r (RWST r w s m) | |