vty-5.4.0: A simple terminal UI library

Safe Haskell | None
Language | Haskell2010

Graphics.Vty.Image

Synopsis

- type DisplayText = Text
- data Image
- imageWidth :: Image -> Int
- imageHeight :: Image -> Int
- horizJoin :: Image -> Image -> Image
- (<|>) :: Image -> Image -> Image
- vertJoin :: Image -> Image -> Image
- (<->) :: Image -> Image -> Image
- horizCat :: [Image] -> Image
- vertCat :: [Image] -> Image
- backgroundFill :: Int -> Int -> Image
- text :: Attr -> Text -> Image
- text' :: Attr -> Text -> Image
- char :: Attr -> Char -> Image
- string :: Attr -> String -> Image
- iso10646String :: Attr -> String -> Image
- utf8String :: Attr -> [Word8] -> Image
- utf8Bytestring :: Attr -> ByteString -> Image
- utf8Bytestring' :: Attr -> ByteString -> Image
- charFill :: Integral d => Attr -> Char -> d -> d -> Image
- emptyImage :: Image
- safeWcwidth :: Char -> Int
- safeWcswidth :: String -> Int
- wcwidth :: Char -> Int
- wcswidth :: String -> Int
- crop :: Int -> Int -> Image -> Image
- cropRight :: Int -> Image -> Image
- cropLeft :: Int -> Image -> Image
- cropBottom :: Int -> Image -> Image
- cropTop :: Int -> Image -> Image
- pad :: Int -> Int -> Int -> Int -> Image -> Image
- resize :: Int -> Int -> Image -> Image
- resizeWidth :: Int -> Image -> Image
- resizeHeight :: Int -> Image -> Image
- translate :: Int -> Int -> Image -> Image
- translateX :: Int -> Image -> Image
- translateY :: Int -> Image -> Image
- module Graphics.Vty.Attributes

# Documentation

type DisplayText = Text Source

A display text is a Data.Text.Lazy

TODO(corey): hm. there is an explicit equation for each type which goes to a lazy text. Each application probably uses a single type. Perhaps parameterize the entire vty interface by the input text type? TODO: Try using a builder instead of a TL.Text instance directly. That might improve performance for the usual case of appending a bunch of characters with the same attribute together.

data Image Source

This is the internal representation of Images. Use the constructors in Graphics.Vty.Image to create instances.

Images are:

- a horizontal span of text
- a horizontal or vertical join of two images
- a two dimensional fill of the `Picture`s background character
- a cropped image
- an empty image of no size or content.

Instances

Eq Image Source |
Show Image Source |
Monoid Image Source | Append in the Monoid instance is equivalent to -.
NFData Image Source |

imageWidth :: Image -> Int Source

The width of an Image. This is the number display columns the image will occupy.

imageHeight :: Image -> Int Source

The height of an Image. This is the number of display rows the image will occupy.

horizJoin :: Image -> Image -> Image Source

combines two images side by side

Combines text chunks where possible. Assures outputWidth and outputHeight properties are not violated.

The result image will have a width equal to the sum of the two images width. And the height will equal the largest height of the two images. The area not defined in one image due to a height missmatch will be filled with the background pattern.

TODO: the bg fill is biased towards top to bottom languages(?)

(<|>) :: Image -> Image -> Image infixr 5 Source

Combines two images horizontally. Alias for horizJoin

infixr 5

vertJoin :: Image -> Image -> Image Source

combines two images vertically

The result image will have a height equal to the sum of the heights of both images. The width will equal the largest width of the two images. The area not defined in one image due to a width missmatch will be filled with the background pattern.

TODO: the bg fill is biased towards right to left languages(?)

(<->) :: Image -> Image -> Image infixr 4 Source

Combines two images vertically. Alias for vertJoin

infixr 4

horizCat :: [Image] -> Image Source

Compose any number of images horizontally.

vertCat :: [Image] -> Image Source

Compose any number of images vertically.

backgroundFill :: Int -> Int -> Image Source

An area of the picture's bacground (See Background) of w columns and h rows.

text :: Attr -> Text -> Image Source

A Data.Text.Lazy value

text' :: Attr -> Text -> Image Source

A Data.Text value

char :: Attr -> Char -> Image Source

an image of a single character. This is a standard Haskell 31-bit character assumed to be in the ISO-10646 encoding.

string :: Attr -> String -> Image Source

Alias for iso10646String. Since the usual case is that a literal string like "foo" is represented internally as a list of ISO 10646 31 bit characters.

Note: Keep in mind that GHC will compile source encoded as UTF-8 but the literal strings, while UTF-8 encoded in the source, will be transcoded to a ISO 10646 31 bit characters runtime representation.

iso10646String :: Attr -> String -> Image Source

A string of characters layed out on a single row with the same display attribute. The string is assumed to be a sequence of ISO-10646 characters.

Note: depending on how the Haskell compiler represents string literals a string literal in a UTF-8 encoded source file, for example, may be represented as a ISO-10646 string. That is, I think, the case with GHC 6.10. This means, for the most part, you don't need to worry about the encoding format when outputting string literals. Just provide the string literal directly to iso10646String or string.

utf8String :: Attr -> [Word8] -> Image Source

A string of characters layed out on a single row. The input is assumed to be the bytes for UTF-8 encoded text.

utf8Bytestring :: Attr -> ByteString -> Image Source

Renders a UTF-8 encoded lazy bytestring.

utf8Bytestring' :: Attr -> ByteString -> Image Source

Renders a UTF-8 encoded strict bytestring.

charFill :: Integral d => Attr -> Char -> d -> d -> Image Source

creates a fill of the specified character. The dimensions are in number of characters wide and number of rows high.

emptyImage :: Image Source

The empty image. Useful for fold combinators. These occupy no space nor define any display attributes.

safeWcwidth :: Char -> Int Source

Returns the display width of a character. Assumes all characters with unknown widths are 0 width

safeWcswidth :: String -> Int Source

Returns the display width of a string. Assumes all characters with unknown widths are 0 width

wcwidth :: Char -> Int Source

wcswidth :: String -> Int Source

crop :: Int -> Int -> Image -> Image Source

Ensure an image is no larger than the provided size. If the image is larger then crop the right or bottom.

This is transformed to a vertical crop from the bottom followed by horizontal crop from the right.

cropRight :: Int -> Image -> Image Source

ensure the image is no wider than the given width. If the image is wider then crop the right side.

cropLeft :: Int -> Image -> Image Source

ensure the image is no wider than the given width. If the image is wider then crop the left side.

cropBottom :: Int -> Image -> Image Source

crop the display height. If the image is less than or equal in height then this operation has no effect. Otherwise the image is cropped from the bottom.

cropTop :: Int -> Image -> Image Source

crop the display height. If the image is less than or equal in height then this operation has no effect. Otherwise the image is cropped from the top.

pad :: Int -> Int -> Int -> Int -> Image -> Image Source

pad the given image. This adds background character fills to the left, top, right, bottom. The pad values are how many display columns or rows to add.

resize :: Int -> Int -> Image -> Image Source

Generic resize. Pads and crops as required to assure the given display width and height. This is biased to pad/crop the right and bottom.

resizeWidth :: Int -> Image -> Image Source

Resize the width. Pads and crops as required to assure the given display width. This is biased to pad/crop the right.

resizeHeight :: Int -> Image -> Image Source

Resize the height. Pads and crops as required to assure the given display height. This is biased to pad/crop the bottom.

translate :: Int -> Int -> Image -> Image Source

translates an image by padding or cropping the left and top. First param is amount to translate left. Second param is amount to translate top.

This can have an unexpected effect: Translating an image to less than (0,0) then to greater than (0,0) will crop the image.

translateX :: Int -> Image -> Image Source

translates an image by padding or cropping the left

translateY :: Int -> Image -> Image Source

translates an image by padding or cropping the top

The possible display attributes used in constructing an `Image`.

module Graphics.Vty.Attributes