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.