---
name: "XkbComputeShapeBounds"
section: "3"
platform: "linux"
package: "libx11"
version: "1.8.14-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XkbComputeShapeBounds"
---

# XkbComputeShapeBounds(3)

Updates the bounding box of a shape

## NAME

XkbComputeShapeBounds - Updates the bounding box of a shape

## SYNOPSIS

**Bool XkbComputeShapeBounds** **(XkbShapePtr** *shape***);**

## ARGUMENTS

- *shape*

  shape to be examined

## DESCRIPTION

Xkb provides a number of convenience functions to help use a keyboard geometry. These include functions to return the bounding box of a shape's top surface and to update the bounding box of a shape row or section.

A shape is made up of a number of outlines. Each outline is a polygon made up of a number of points. The bounding box of a shape is a rectangle that contains all the outlines of that shape.

A ShapeRec contains a BoundsRec that describes the bounds of the shape. If you add or delete an outline to or from a shape, the bounding box must be updated.

*XkbComputeShapeBounds* updates the BoundsRec contained in the *shape* by examining all the outlines of the shape and setting the BoundsRec to the minimum x and minimum y, and maximum x and maximum y values found in those outlines. *XkbComputeShapeBounds* returns False if *shape* is NULL or if there are no outlines for the shape; otherwise, it returns True.

If you add or delete a key to or from a row, or if you update the shape of one of the keys in that row, you may need to update the bounding box of that row. To update the bounding box of a row, use *XkbComputeRowBounds.*

## STRUCTURES

```
typedef struct _XkbShape {
    Atom           name;         /* shape's name */
    unsigned short num_outlines; /* number of outlines for the shape */
    unsigned short sz_outlines;  /* size of the outlines array */
    XkbOutlinePtr  outlines;     /* array of outlines for the shape */
    XkbOutlinePtr  approx;       /* pointer into the array to the approximating outline */
    XkbOutlinePtr  primary;      /* pointer into the array to the primary outline */
    XkbBoundsRec   bounds;       /* bounding box for the shape; encompasses all outlines */
} XkbShapeRec, *XkbShapePtr;
typedef struct _XkbBounds {
    short	x1,y1;	/* upper left corner of the bounds, in mm/10 */
    short	x2,y2;	/* lower right corner of the bounds, in mm/10 */
} XkbBoundsRec, *XkbBoundsPtr;
```

## SEE ALSO

[**XkbComputeRowBounds**(3)](/XkbComputeRowBounds/3.md)
