---
name: "caca_dirty"
section: "3caca"
platform: "linux"
package: "libcaca"
version: "0.99.beta20-7"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/caca_dirty"
---

# caca\_dirty(3caca)

libcaca dirty rectangle manipulation

## NAME

caca\_dirty - libcaca dirty rectangle manipulation

## SYNOPSIS

### Topics

**libcaca canvas transformation**\

### Functions

\_\_extern int **caca\_disable\_dirty\_rect** (**caca\_canvas\_t** \*)\
 Disable dirty rectangles.  \_\_extern int **caca\_enable\_dirty\_rect** (**caca\_canvas\_t** \*)\
 Enable dirty rectangles.  \_\_extern int **caca\_get\_dirty\_rect\_count** (**caca\_canvas\_t** \*)\
 Get the number of dirty rectangles in the canvas.  \_\_extern int **caca\_get\_dirty\_rect** (**caca\_canvas\_t** \*, int, int \*, int \*, int \*, int \*)\
 Get a canvas's dirty rectangle.  \_\_extern int **caca\_add\_dirty\_rect** (**caca\_canvas\_t** \*, int, int, int, int)\
 Add an area to the canvas's dirty rectangle list.  \_\_extern int **caca\_remove\_dirty\_rect** (**caca\_canvas\_t** \*, int, int, int, int)\
 Remove an area from the dirty rectangle list.  \_\_extern int **caca\_clear\_dirty\_rect\_list** (**caca\_canvas\_t** \*)\
 Clear a canvas's dirty rectangle list.

## Detailed Description

These functions manipulate dirty rectangles for optimised blitting.

## Function Documentation

### \_\_extern int caca\_disable\_dirty\_rect (caca\_canvas\_t \* cv)

Disable dirty rectangle handling for all *libcaca* graphic calls. This is handy when the calling application needs to do slow operations within a known area. Just call **caca\_add\_dirty\_rect()** afterwards.

This function is recursive. Dirty rectangles are only reenabled when **caca\_enable\_dirty\_rect()** is called as many times.

This function never fails.

**Parameters**

*cv* A libcaca canvas.

**Returns**

This function always returns 0.

### \_\_extern int caca\_enable\_dirty\_rect (caca\_canvas\_t \* cv)

This function can only be called after **caca\_disable\_dirty\_rect()** was called.

If an error occurs, -1 is returned and **errno** is set accordingly:

- •

  EINVAL Dirty rectangles were not disabled.

**Parameters**

*cv* A libcaca canvas.

**Returns**

0 in case of success, -1 if an error occurred.

### \_\_extern int caca\_get\_dirty\_rect\_count (caca\_canvas\_t \* cv)

Get the number of dirty rectangles in a canvas. Dirty rectangles are areas that contain cells that have changed since the last reset.

The dirty rectangles are used internally by display drivers to optimise rendering by avoiding to redraw the whole screen. Once the display driver has rendered the canvas, it resets the dirty rectangle list.

Dirty rectangles are guaranteed not to overlap.

This function never fails.

**Parameters**

*cv* A libcaca canvas.

**Returns**

The number of dirty rectangles in the given canvas.

### \_\_extern int caca\_get\_dirty\_rect (caca\_canvas\_t \* cv, int r, int \* x, int \* y, int \* width, int \* height)

Get the canvas's given dirty rectangle coordinates. The index must be within the dirty rectangle count. See **caca\_get\_dirty\_rect\_count()** for how to compute this count.

If an error occurs, no coordinates are written in the pointer arguments, -1 is returned and **errno** is set accordingly:

- •

  EINVAL Specified rectangle index is out of bounds.

**Parameters**

*cv* A libcaca canvas. \
 *r* The requested rectangle index. \
 *x* A pointer to an integer where the leftmost edge of the dirty rectangle will be stored. \
 *y* A pointer to an integer where the topmost edge of the dirty rectangle will be stored. \
 *width* A pointer to an integer where the width of the dirty rectangle will be stored. \
 *height* A pointer to an integer where the height of the dirty rectangle will be stored.

**Returns**

0 in case of success, -1 if an error occurred.

### \_\_extern int caca\_add\_dirty\_rect (caca\_canvas\_t \* cv, int x, int y, int width, int height)

Add an invalidating zone to the canvas's dirty rectangle list. For more information about the dirty rectangles, see **caca\_get\_dirty\_rect()**.

This function may be useful to force refresh of a given zone of the canvas even if the dirty rectangle tracking indicates that it is unchanged. This may happen if the canvas contents were somewhat directly modified.

If an error occurs, -1 is returned and **errno** is set accordingly:

- •

  EINVAL Specified rectangle coordinates are out of bounds.

**Parameters**

*cv* A libcaca canvas. \
 *x* The leftmost edge of the additional dirty rectangle. \
 *y* The topmost edge of the additional dirty rectangle. \
 *width* The width of the additional dirty rectangle. \
 *height* The height of the additional dirty rectangle.

**Returns**

0 in case of success, -1 if an error occurred.

Referenced by **caca\_blit()**, **caca\_clear\_canvas()**, **caca\_fill\_box()**, **caca\_flip()**, **caca\_flop()**, **caca\_free\_frame()**, **caca\_invert()**, **caca\_put\_attr()**, **caca\_put\_char()**, **caca\_rotate\_180()**, **caca\_rotate\_left()**, **caca\_rotate\_right()**, **caca\_set\_canvas\_boundaries()**, **caca\_set\_frame()**, **caca\_stretch\_left()**, and **caca\_stretch\_right()**.

### \_\_extern int caca\_remove\_dirty\_rect (caca\_canvas\_t \* cv, int x, int y, int width, int height)

Mark a cell area in the canvas as not dirty. For more information about the dirty rectangles, see **caca\_get\_dirty\_rect()**.

Values such that **xmin** \> **xmax** or **ymin** \> **ymax** indicate that the dirty rectangle is empty. They will be silently ignored.

If an error occurs, -1 is returned and **errno** is set accordingly:

- •

  EINVAL Specified rectangle coordinates are out of bounds.

**Parameters**

*cv* A libcaca canvas. \
 *x* The leftmost edge of the clean rectangle. \
 *y* The topmost edge of the clean rectangle. \
 *width* The width of the clean rectangle. \
 *height* The height of the clean rectangle.

**Returns**

0 in case of success, -1 if an error occurred.

### \_\_extern int caca\_clear\_dirty\_rect\_list (caca\_canvas\_t \* cv)

Empty the canvas's dirty rectangle list.

This function never fails.

**Parameters**

*cv* A libcaca canvas.

**Returns**

This function always returns 0.

Referenced by **caca\_refresh\_display()**.

## Author

Generated automatically by Doxygen for libcaca from the source code.
