# FixImage Documentation

Back to summary

`import "image/image";`

## Painter class

Painter is used to draw 2D shapes into an Image.

### Initialization

`static function create(img: Image): Painter`
  Creates a new painter for given image.

### Properties

`function get_image(): Image`
  Returns the image this painter is created for.
`function get_transform(): Transform`
  Returns the current 2D transform of the painter as a direct reference.

### State

`function push()`
  Pushes the drawing state (current translation, rotation, antialiasing settings, etc.) into a stack so it can be later restored by the `pop` function.
`function pop()`
  Pops the drawing state from a stack to restore the state to what was set when calling a previous `push` function.
`function set_subpixel_rendering(enabled: Boolean)`
  Sets subpixel rendering.
`function set_subpixel_order(value: Integer)`
  Sets the order of pixels used in subpixel rendering (either `SUBPIXEL_RGB` or `SUBPIXEL_BGR`).
`function set_blend_gamma(value: Float)`
  Sets blending gamma adjustment, this may be required for shapes to have the same thickness on both black and white backgrounds. Typically it is used mainly for font rendering to fine-tune the appearance in small sizes. When the gamma is other than 1.0 (no adjustment) the performance is affected.

### Transform

`function translate(tx: Float, ty: Float)`
  Translates the subsequent drawing.
`function rotate(angle: Float)`
  Rotates the subsequent drawing.
`function scale(s: Float)
function scale(sx: Float, sy: Float)`
  Scales the subsequent drawing.
`function shear(sx: Float, sy: Float)`
  Shears the subsequent drawing.
`function apply(tr: Transform)`
  Applies given transform for subsequent drawing.

### Clipping

`function clip(rect: Rect)
function clip(x: Integer, y: Integer, width: Integer, height: Integer)`
  Clips the rendering with given rectangle. The clipping can be made smaller only.
`function clip_shape(shape: Shape)`
  Clips the rendering with given 2D shape, multiple clipping shapes are simply added into one shape, it is essential that the clip shape is non-overlapping and is in the clockwise direction.
`function get_clip_rect(): Rect`
  Returns the current clipping rectangle.

### Drawing

`function clear_rect(rect: Rect, color: Integer)
function clear_rect(x: Integer, y: Integer, width: Integer, height: Integer, color: Integer)`
  Clears (by setting the pixels without any blending) the rectangle with given color.
`function fill_rect(rect: Rect, color: Integer)
function fill_rect(x: Integer, y: Integer, width: Integer, height: Integer, color: Integer)`
  Fills the rectangle with given color.
`function fill_rect(x: Integer, y: Integer, width: Integer, height: Integer, <shader>)`
  Fills the rectangle using the colors produced by the shader.
`function fill_shape(shape: Shape, color: Integer)`
  Fills a 2D shape with given color.
`function fill_shape(shape: Shape, <shader>)`
  Fills a 2D shape using the colors produced by the shader.
`function draw_image(x: Integer, y: Integer, img: Image)`
  Draws an image. To customize drawing (eg. to draw only part of the image or other effects) use `fill_rect` or `fill_shape` with shaders.

### Batched rendering

`function batch_begin()`
  Starts rendering in a batch. The next drawing operations are stored and binned into small tiles of the image. Then when you call `batch_flush` or `batch_end` the tiles are actually rendered, making the rendering evenly spread across CPU cores and thus being faster and more efficient.
  Note: The used images, transforms and other referenced data in the drawing operations are stored by reference and must not change until the batch is actually rendered.
`function batch_flush()`
  Renders drawing operations currently accumulated in the batch without disabling the batch rendering mode.
`function batch_end()`
  Renders drawing operations currently accumulated in the batch and disables the batch rendering mode for next drawing operations.