29 CGBitmapInfo bmpInfo = kCGBitmapByteOrder32Little;
30 switch (pBitmap->GetFormat()) {
31 case FXDIB_Format::kBgrx:
32 bmpInfo |= kCGImageAlphaNoneSkipFirst;
34 case FXDIB_Format::kBgra:
38 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
39 CGContextRef context = CGBitmapContextCreate(
40 pBitmap->GetWritableBuffer().data(), pBitmap->GetWidth(),
41 pBitmap->GetHeight(), 8, pBitmap->GetPitch(), colorSpace, bmpInfo);
42 CGColorSpaceRelease(colorSpace);
52 CGDataProviderRef data_provider = CGDataProviderCreateWithData(
53 nullptr, font_data.data(), font_data.size(),
nullptr);
58 CGFontRef cg_font = CGFontCreateWithDataProvider(data_provider);
59 CGDataProviderRelease(data_provider);
81 pdfium::span<uint16_t> glyph_indices,
82 pdfium::span<CGPoint> glyph_positions,
87 CGContextRef context = (CGContextRef)graphics;
88 CGContextSetFont(context, (CGFontRef)font);
89 CGContextSetFontSize(context, font_size);
92 CGContextSetRGBFillColor(context, bgra.red / 255.f, bgra.green / 255.f,
93 bgra.blue / 255.f, bgra.alpha / 255.f);
94 CGContextSaveGState(context);
96 auto glyph_positions_cg =
97 FixedSizeDataVector<CGPoint>::Uninit(glyph_positions.size());
98 for (
auto [input, output] :
99 fxcrt::Zip(glyph_positions, glyph_positions_cg.span())) {
103 const CGPoint* glyph_positions_cg_ptr = glyph_positions_cg.span().data();
105 const CGPoint* glyph_positions_cg_ptr = glyph_positions.data();
107 CGContextShowGlyphsAtPositions(
108 context,
reinterpret_cast<CGGlyph*>(glyph_indices.data()),
109 glyph_positions_cg_ptr, glyph_positions.size());
110 CGContextRestoreGState(context);
bool DrawGraphicsString(void *graphics, void *font, float font_size, pdfium::span< uint16_t > glyph_indices, pdfium::span< CGPoint > glyph_positions, FX_ARGB argb)