Skip to content

Shape tools ​

Geometric strokes and fills: line, rectangle, ellipse, paint bucket, and gradient. Each gets a live preview while you drag — release to commit. They paint with the primary colour by default; the gradient also uses secondary.


Line — L ​

Click + drag = line from press point to release point (Bresenham). The line is 1 px wide and ignores brush size/shape (use Pencil with Shift+click if you want brush-size lines).

Hold Shift while drawing to constrain to multiples of 45° (horizontal, vertical, diagonal).

Rectangle — R ​

Drag from one corner to the opposite. Toggle Tools panel → Shape options → Filled to switch between outline-only and solid fill.

Hold Shift to constrain to a square.

Ellipse — O ​

Drag from one corner of the bounding rect to the opposite. Toggle Filled in the Shape options. Hold Shift to constrain to a circle.

The ellipse rasteriser uses a midpoint algorithm tuned for low-resolution sprites — small ellipses (≤ 8 px) snap to the nearest aesthetically-correct pixel pattern.

Line, rectangle, ellipse — outline and filled


Fill (paint bucket) — G ​

Click any pixel to flood-fill the connected region matching that exact colour with the primary colour. The fill respects 4-connectivity (up/down/left/right, no diagonals).

Tips:

  • Useful for re-colouring a flat region in one click.
  • Use Color Replace (K) instead if you want to replace every pixel of that colour, not just the connected blob.
  • In indexed mode, the fill always uses a palette colour — you can't accidentally introduce a new shade.

Gradient ​

In the Tools panel, the gradient tool is selected from the tool grid (no hotkey by default). Drag to define start (A) and end (B) of the gradient — the line you drag is the gradient direction.

Picks colours from primary (A) and secondary (B) — swap with X if you want to invert.

Patterns ​

  • Solid — linear RGB interpolation. Generates new in-between colours.
  • Bayer 2×2 / 4×4 / 8×8 — dithered. Only the two endpoints are painted; intermediate values use an ordered Bayer pattern so the apparent average matches the linear blend. This is the right choice in pixel art where you want to preserve a constrained palette.

Choose the pattern in Tools panel → Gradient → Pattern while the tool is active.

Selection-aware ​

If a selection is active, the gradient is clipped to the selection mask — including non-rectangular shapes like lasso or magic-wand selections. Pixels outside the selection are untouched.

Gradient with bayer4 dither, clipped to a lasso selection


Tips ​

  • Shapes can be cancelled mid-drag by pressing Esc (the live preview disappears).
  • Each completed shape is one undo entry — useful for experimentation.
  • The Filled toggle is a single shared setting for rectangle and ellipse.

Free Transform ​

For interactive rotate / scale of either a selection or the whole active layer, press Shift+T to enter Free Transform mode (on-canvas handles + optional numeric dialog). See Transforms → Free Rotate / Scale for the full reference.


Motestack is a personal hobby project. The editor and these docs ship under no warranty — back up your `.mstack` files.