void arts_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix)
{
dbg("arts_drawchar");
+ if(!font)
+ return;
internal_t*i = (internal_t*)dev->internal;
gfxline_t*glyph = gfxline_clone(font->glyphs[glyphnr].line);
gfxline_transform(glyph, matrix);
void bbox_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix)
{
internal_t*i = (internal_t*)dev->internal;
+ if(!font)
+ return;
if(i->do_text) {
gfxglyph_t*glyph = &font->glyphs[glyphnr];
void opengl_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix)
{
internal_t*i = (internal_t*)dev->internal;
+ if(!font)
+ return;
if(i->font && i->font->id && !strcmp(font->id, i->font->id)) {
// current font is correct
static void record_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix)
{
internal_t*i = (internal_t*)dev->internal;
- if(!gfxfontlist_hasfont(i->fontlist, font))
+ if(font && !gfxfontlist_hasfont(i->fontlist, font))
record_addfont(dev, font);
writer_writeU8(&i->w, OP_DRAWCHAR);
- writer_writeString(&i->w, font->id);
+ if(font)
+ writer_writeString(&i->w, font->id);
+ else
+ writer_writeString(&i->w, "*NULL*");
writer_writeU32(&i->w, glyphnr);
dumpColor(&i->w, color);
dumpMatrix(&i->w, matrix);
}
case OP_DRAWCHAR: {
char* id = reader_readString(r);
- gfxfont_t*font = gfxfontlist_findfont(fontlist, id);
+ gfxfont_t*font = id?gfxfontlist_findfont(fontlist, id):0;
U32 glyph = reader_readU32(r);
gfxcolor_t color = readColor(r);
gfxmatrix_t matrix = readMatrix(r);
void render_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix)
{
internal_t*i = (internal_t*)dev->internal;
+ if(!font)
+ return;
/* align characters to whole pixels */
matrix->tx = (int)(matrix->tx * i->antialize) / i->antialize;
static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix)
{
swfoutput_internal*i = (swfoutput_internal*)dev->internal;
+ if(!font)
+ return;
if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font
{
} else if(xshift > i->lastadvance*1.3 || xshift<0) {
addchar(dev, 32);
}
- i->lastadvance = font->glyphs[glyphnr].advance*matrix->m00;
-
- int u = font->glyphs[glyphnr].unicode;
+ if(font) {
+ i->lastadvance = font->glyphs[glyphnr].advance*matrix->m00;
+ int u = font->glyphs[glyphnr].unicode;
+ } else {
+ u = glyphnr;
+ i->currentx = 0;i->currenty = 0;
+ }
if(u>13) {
addchar(dev, u);
}