addGlyph method

void addGlyph(
  1. PdfPath outline,
  2. SlugGlyphData data,
  3. PdfMatrix emToPage,
  4. double pxPerEmX,
  5. double pxPerEmY,
  6. int argb,
)

Implementation

void addGlyph(PdfPath outline, SlugGlyphData data, PdfMatrix emToPage,
    double pxPerEmX, double pxPerEmY, int argb) {
  final qsx = (pxPerEmX * 16).round().clamp(1, 0xFFFF);
  final qsy = (pxPerEmY * 16).round().clamp(1, 0xFFFF);
  final slot = _slots.putIfAbsent((outline, qsx, qsy), () {
    _slotData.add(data);
    _slotQsx.add(qsx);
    _slotQsy.add(qsy);
    return _slotData.length - 1;
  });
  final sx = qsx / 16.0, sy = qsy / 16.0;
  final padX = 16.0 / qsx, padY = 16.0 / qsy;
  final x0 = data.minX - padX, x1 = data.maxX + padX;
  final y0 = data.minY - padY, y1 = data.maxY + padY;
  final u0 = 2.0 + (x0 - data.qMinX) * sx;
  final u1 = 2.0 + (x1 - data.qMinX) * sx;
  final lv0 = 2.0 + (y0 - data.qMinY) * sy;
  final lv1 = 2.0 + (y1 - data.qMinY) * sy;
  if (lv1 > _maxCellH) _maxCellH = lv1;
  final px0 = emToPage.transformX(x0, y0), py0 = emToPage.transformY(x0, y0);
  final px1 = emToPage.transformX(x1, y0), py1 = emToPage.transformY(x1, y0);
  final px2 = emToPage.transformX(x0, y1), py2 = emToPage.transformY(x0, y1);
  final px3 = emToPage.transformX(x1, y1), py3 = emToPage.transformY(x1, y1);
  _positions.add4(px0, py0, px1, py1);
  _positions.add4(px2, py2, px3, py3);
  _minPX = math.min(_minPX, math.min(math.min(px0, px1), math.min(px2, px3)));
  _maxPX = math.max(_maxPX, math.max(math.max(px0, px1), math.max(px2, px3)));
  _minPY = math.min(_minPY, math.min(math.min(py0, py1), math.min(py2, py3)));
  _maxPY = math.max(_maxPY, math.max(math.max(py0, py1), math.max(py2, py3)));
  _texs.add4(u0, lv0, u1, lv0);
  _texs.add4(u0, lv1, u1, lv1);
  _quadSlot.add(slot);
  _colors.addAll([argb, argb, argb, argb]);
  _quadCount++;
}