git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added 'flashtype' option to .font in swfc
[swftools.git]
/
lib
/
modules
/
swftext.c
diff --git
a/lib/modules/swftext.c
b/lib/modules/swftext.c
index
1bb40d9
..
41207bf
100644
(file)
--- a/
lib/modules/swftext.c
+++ b/
lib/modules/swftext.c
@@
-541,7
+541,6
@@
static void updateusage(void *self, int *chars, int *xpos, int nr,
return;
int t;
return;
int t;
- int firstpair=1;
for(t=0;t<nr;t++) {
int x=xpos[t];
int y=ystart;
for(t=0;t<nr;t++) {
int x=xpos[t];
int y=ystart;
@@
-553,12
+552,7
@@
static void updateusage(void *self, int *chars, int *xpos, int nr,
u->last!=c && !swf_ShapeIsEmpty(u->font->glyph[u->last].shape) &&
!swf_ShapeIsEmpty(u->font->glyph[c].shape))
{
u->last!=c && !swf_ShapeIsEmpty(u->font->glyph[u->last].shape) &&
!swf_ShapeIsEmpty(u->font->glyph[c].shape))
{
- /* ignore the first pair of every word (caps subset hack). */
- if(!firstpair)
- swf_FontUsePair(u->font, u->last, c);
- firstpair = 0;
- } else {
- firstpair = 1;
+ swf_FontUsePair(u->font, u->last, c);
}
u->lasty = y;
/* FIXME: do we still need to divide advance by 20 for definefont3? */
}
u->lasty = y;
/* FIXME: do we still need to divide advance by 20 for definefont3? */
@@
-838,6
+832,12
@@
int swf_FontReduce(SWFFONT * f)
return 0;
}
return 0;
}
+static SWFFONT* font_to_sort;
+int cmp_chars(const void*a, const void*b)
+{
+ int x = *(const int*)a;
+ int y = *(const int*)b;
+}
void swf_FontSort(SWFFONT * font)
{
int i, j;
void swf_FontSort(SWFFONT * font)
{
int i, j;
@@
-851,6
+851,8
@@
void swf_FontSort(SWFFONT * font)
for (i = 0; i < font->numchars; i++) {
newplace[i] = i;
}
for (i = 0; i < font->numchars; i++) {
newplace[i] = i;
}
+ //qsort(newplace, sizeof(newplace[0]), font->numchars, cmp_chars);
+
for (i = 0; i < font->numchars; i++)
for (j = 0; j < i; j++) {
if (font->glyph2ascii[i] < font->glyph2ascii[j]) {
for (i = 0; i < font->numchars; i++)
for (j = 0; j < i; j++) {
if (font->glyph2ascii[i] < font->glyph2ascii[j]) {
@@
-893,8
+895,8
@@
void swf_FontSort(SWFFONT * font)
font->ascii2glyph[i] = newpos[font->ascii2glyph[i]];
}
font->ascii2glyph[i] = newpos[font->ascii2glyph[i]];
}
- rfx_free(newpos);
rfx_free(newplace);
rfx_free(newplace);
+ font->glyph2glyph = newpos;
}
void swf_FontPrepareForEditText(SWFFONT * font)
}
void swf_FontPrepareForEditText(SWFFONT * font)
@@
-938,14
+940,14
@@
int swf_FontUse(SWFFONT * f, U8 * s)
return 0;
}
return 0;
}
-int swf_FontUseUTF8(SWFFONT * f, U8 * s, U16 size)
+int swf_FontUseUTF8(SWFFONT * f, const U8 * s, U16 size)
{
if( (!s))
return -1;
int ascii;
while (*s)
{
{
if( (!s))
return -1;
int ascii;
while (*s)
{
- ascii = readUTF8char(&s);
+ ascii = readUTF8char((U8**)&s);
if(ascii < f->maxascii && f->ascii2glyph[ascii]>=0)
swf_FontUseGlyph(f, f->ascii2glyph[ascii], size);
}
if(ascii < f->maxascii && f->ascii2glyph[ascii]>=0)
swf_FontUseGlyph(f, f->ascii2glyph[ascii], size);
}
@@
-1194,12
+1196,15
@@
int swf_FontSetDefine2(TAG * tag, SWFFONT * f)
if (f->layout) {
swf_SetU16(tag, f->layout->ascent);
swf_SetU16(tag, f->layout->descent);
if (f->layout) {
swf_SetU16(tag, f->layout->ascent);
swf_SetU16(tag, f->layout->descent);
- swf_SetU16(tag, f->layout->leading);
+ swf_SetU16(tag, 0); // flash ignores leading
+
for (t = 0; t < f->numchars; t++)
swf_SetU16(tag, f->glyph[t].advance);
for (t = 0; t < f->numchars; t++) {
swf_ResetWriteBits(tag);
for (t = 0; t < f->numchars; t++)
swf_SetU16(tag, f->glyph[t].advance);
for (t = 0; t < f->numchars; t++) {
swf_ResetWriteBits(tag);
- swf_SetRect(tag, &f->layout->bounds[t]);
+ /* not used by flash, so leave this empty */
+ SRECT b = {0,0,0,0};
+ swf_SetRect(tag, &b);
}
swf_SetU16(tag, f->layout->kerningcount);
for (t = 0; t < f->layout->kerningcount; t++) {
}
swf_SetU16(tag, f->layout->kerningcount);
for (t = 0; t < f->layout->kerningcount; t++) {
@@
-1305,6
+1310,10
@@
void swf_FontFree(SWFFONT * f)
rfx_free(f->glyph2ascii);
f->glyph2ascii = NULL;
}
rfx_free(f->glyph2ascii);
f->glyph2ascii = NULL;
}
+ if (f->glyph2glyph) {
+ rfx_free(f->glyph2glyph);
+ f->glyph2glyph = NULL;
+ }
font_freename(f);
font_freelayout(f);
font_freeglyphnames(f);
font_freename(f);
font_freelayout(f);
font_freeglyphnames(f);