Safe Haskell | None |
---|---|
Language | Haskell2010 |
- 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.
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.
renderToScreen' :: MonadIO m => e -> m () Source #
Render to the screen.
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
.
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 |
Alignment | |
|
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
).
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:
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.
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) | |