XkbShapePtr XkbAddGeomShape(XkbGeometryPtr geom, Atom name, int sz_outlines) { XkbShapePtr shape; register int i; if ((!geom) || (!name) || (sz_outlines < 0)) return NULL; if (geom->num_shapes > 0) { for (shape = geom->shapes, i = 0; i < geom->num_shapes; i++, shape++) { if (name == shape->name) return shape; } } if ((geom->num_shapes >= geom->sz_shapes) && (_XkbAllocShapes(geom, 1) != Success)) return NULL; shape = &geom->shapes[geom->num_shapes]; memset(shape, 0, sizeof(XkbShapeRec)); if ((sz_outlines > 0) && (_XkbAllocOutlines(shape, sz_outlines) != Success)) return NULL; shape->name = name; shape->primary = shape->approx = NULL; geom->num_shapes++; return shape; }
XkbOutlinePtr XkbAddGeomOutline(XkbShapePtr shape, int sz_points) { XkbOutlinePtr outline; if ((!shape) || (sz_points < 0)) return NULL; if ((shape->num_outlines >= shape->sz_outlines) && (_XkbAllocOutlines(shape, 1) != Success)) { return NULL; } outline = &shape->outlines[shape->num_outlines]; memset(outline, 0, sizeof(XkbOutlineRec)); if ((sz_points > 0) && (_XkbAllocPoints(outline, sz_points) != Success)) return NULL; shape->num_outlines++; return outline; }
Status XkbAllocGeomOutlines(XkbShapePtr shape,int nOL) { return _XkbAllocOutlines(shape,nOL); }