# `gvar`: Glyph Variations table

The `gvar` table is an OpenType table.

class fontTools.ttLib.tables._g_v_a_r.table__g_v_a_r(tag=None)

  Bases: `DefaultTable`

  Glyph Variations table

  The `gvar` table provides the per-glyph variation data that describe how glyph outlines in the `glyf` table change across the variation space that is defined for the font in the `fvar` table.

  See also https://learn.microsoft.com/en-us/typography/opentype/spec/gvar

  dependencies = ['fvar', 'glyf']
  compile(ttFont)
  compileGlyphs_(ttFont, axisTags, sharedCoordIndices)
  decompile(data, ttFont)
  ensureDecompiled(recurse=False)
  static decompileOffsets_(data, tableFormat, glyphCount)
  static compileOffsets_(offsets)

    Packs a list of offsets into a ‘gvar’ offset table.

    Returns a pair (bytestring, tableFormat). Bytestring is the packed offset table. Format indicates whether the table uses short (tableFormat=0) or long (tableFormat=1) integers. The returned tableFormat should get packed into the flags field of the ‘gvar’ header.

  toXML(writer, ttFont)
  fromXML(name, attrs, content, ttFont)
  static getNumPoints_(glyph)
  prune_pre_subset(font, options)
  subset_glyphs(s)

fontTools.ttLib.tables._g_v_a_r.compileGlyph_(variations, pointCount, axisTags, sharedCoordIndices, *, optimizeSize=True)

fontTools.ttLib.tables._g_v_a_r.decompileGlyph_(pointCount, sharedTuples, axisTags, data)

## TupleVariation

class fontTools.ttLib.tables.TupleVariation.TupleVariation(axes, coordinates)

  Bases: `object`

  getUsedPoints()
  hasImpact()

    Returns True if this TupleVariation has any visible impact.

    If the result is False, the TupleVariation can be omitted from the font without making any visible difference.

  toXML(writer, axisTags)
  fromXML(name, attrs, _content)
  compile(axisTags, sharedCoordIndices={}, pointData=None, *, optimizeSize=True)
  compileCoord(axisTags)
  compileIntermediateCoord(axisTags)
  static decompileCoord_(axisTags, data, offset)
  static compilePoints(points)
  static decompilePoints_(numPoints, data, offset, tableTag)

    (numPoints, data, offset, tableTag) –> ([point1, point2, …], newOffset)

  compileDeltas(optimizeSize=True)
  static compileDeltaValues_(deltas, bytearr=None, *, optimizeSize=True)

    [value1, value2, value3, …] –> bytearray

    Emits a sequence of runs. Each run starts with a byte-sized header whose 6 least significant bits (header & 0x3F) indicate how many values are encoded in this run. The stored length is the actual length minus one; run lengths are thus in the range [1..64]. If the header byte has its most significant bit (0x80) set, all values in this run are zero, and no data follows. Otherwise, the header byte is followed by ((header & 0x3F) + 1) signed values. If (header & 0x40) is clear, the delta values are stored as signed bytes; if (header & 0x40) is set, the delta values are signed 16-bit integers.

  static encodeDeltaRunAsZeroes_(deltas, offset, bytearr)
  static encodeDeltaRunAsBytes_(deltas, offset, bytearr, optimizeSize=True)
  static encodeDeltaRunAsWords_(deltas, offset, bytearr, optimizeSize=True)
  static encodeDeltaRunAsLongs_(deltas, offset, bytearr, optimizeSize=True)
  static decompileDeltas_(numDeltas, data, offset=0)

    (numDeltas, data, offset) –> ([delta, delta, …], newOffset)

  static getTupleSize_(flags, axisCount)
  getCoordWidth()

    Return 2 if coordinates are (x, y) as in gvar, 1 if single values as in cvar, or 0 if empty.

  scaleDeltas(scalar)
  roundDeltas()
  calcInferredDeltas(origCoords, endPts)
  optimize(origCoords, endPts, tolerance=0.5, isComposite=False)

fontTools.ttLib.tables.TupleVariation.decompileSharedTuples(axisTags, sharedTupleCount, data, offset)

fontTools.ttLib.tables.TupleVariation.compileSharedTuples(axisTags, variations, MAX_NUM_SHARED_COORDS=4096)

fontTools.ttLib.tables.TupleVariation.compileTupleVariationStore(variations, pointCount, axisTags, sharedTupleIndices, useSharedPoints=True, *, optimizeSize=True)

fontTools.ttLib.tables.TupleVariation.decompileTupleVariationStore(tableTag, axisTags, tupleVariationCount, pointCount, sharedTuples, data, pos, dataPos)

fontTools.ttLib.tables.TupleVariation.decompileTupleVariation_(pointCount, sharedTuples, sharedPoints, tableTag, axisTags, data, tupleData)

fontTools.ttLib.tables.TupleVariation.inferRegion_(peak)

  Infer start and end for a (non-intermediate) region

  This helper function computes the applicability region for variation tuples whose INTERMEDIATE_REGION flag is not set in the TupleVariationHeader structure. Variation tuples apply only to certain regions of the variation space; outside that region, the tuple has no effect. To make the binary encoding more compact, TupleVariationHeaders can omit the intermediateStartTuple and intermediateEndTuple fields.