#include "../log.h"
#include "../types.h"
#include "../q.h"
+#include "../gfxfont.h"
#include <math.h>
#include <assert.h>
FontInfo::FontInfo(char*id)
{
this->id = strdup(id);
- this->charid2glyph = 0;
this->seen = 0;
this->num_glyphs = 0;
this->glyphs = 0;
{
if(this->id) {free(this->id);this->id=0;}
this->font = 0;
- if(this->charid2glyph) {
- free(this->charid2glyph);
- this->charid2glyph = 0;
- }
int t;
for(t=0;t<num_glyphs;t++) {
if(glyphs[t]) {
}
dict_destroy(d);
}
+ free(kerning);
+ kerning=0;
}
}
font->num_glyphs++;
}
}
- font->unicode2glyph = (int*)malloc(sizeof(int)*font->max_unicode);
- memset(font->unicode2glyph, -1, sizeof(int)*font->max_unicode);
- for(t=0;t<font->num_glyphs;t++) {
- if(font->glyphs[t].unicode>0 && font->glyphs[t].unicode<font->max_unicode) {
- font->unicode2glyph[font->glyphs[t].unicode] = t;
- }
- }
+ gfxfont_fix_unicode(font);
int kerning_size = 0;
- for(t=0;t<font->num_glyphs;t++) {
+ for(t=0;t<src->num_glyphs;t++) {
dict_t* d = src->kerning[t];
if(!d) continue;
DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) {
font->kerning_size = kerning_size;
font->kerning = (gfxkerning_t*)malloc(sizeof(gfxkerning_t)*kerning_size);
int pos = 0;
- for(t=0;t<font->num_glyphs;t++) {
+ for(t=0;t<src->num_glyphs;t++) {
dict_t* d = src->kerning[t];
if(!d) continue;
DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) {
if(m) {
- font->kerning[pos].c1 = t;
- font->kerning[pos].c2 = (int)(ptroff_t)key;
+ font->kerning[pos].c1 = src->glyphs[t]->glyphid;
+ font->kerning[pos].c2 = src->glyphs[(int)(ptroff_t)key]->glyphid;
font->kerning[pos].advance = (int)(ptroff_t)m->first->key;
pos++;
}