addGlyph method
void
addGlyph(
- PdfPath outline,
- SlugGlyphData data,
- PdfMatrix emToPage,
- double pxPerEmX,
- double pxPerEmY,
- 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++;
}