int config_filloverlap;
int config_protect;
int config_bboxvars;
+ RGBA config_linkcolor;
float config_minlinewidth;
double config_caplinewidth;
char* config_linktarget;
+ char*config_internallinkfunction;
SWF* swf;
i->config_minlinewidth=0.05;
i->config_caplinewidth=1;
i->config_linktarget=0;
+ i->config_internallinkfunction=0;
+
+ i->config_linkcolor.r = i->config_linkcolor.g = i->config_linkcolor.b = 255;
+ i->config_linkcolor.a = 0x40;
return i;
};
void swfoutput_linktopage(gfxdevice_t*dev, int page, gfxline_t*points)
{
swfoutput_internal*i = (swfoutput_internal*)dev->internal;
- ActionTAG* actions;
+ ActionTAG* actions = 0;
if(i->shapeid>=0)
endshape(dev);
if(i->textid>=0)
endtext(dev);
-
- actions = action_GotoFrame(0, page);
- actions = action_End(actions);
+
+ if(!i->config_internallinkfunction) {
+ actions = action_GotoFrame(actions, page);
+ actions = action_End(actions);
+ } else {
+ actions = action_PushInt(actions, page); //parameter
+ actions = action_PushInt(actions, 1); //number of parameters (1)
+ actions = action_PushString(actions, i->config_internallinkfunction); //function name
+ actions = action_CallFunction(actions);
+ }
drawlink(dev, actions, 0, points,0);
}
myshapeid2 = getNewID(dev);
i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3);
swf_ShapeNew(&i->shape);
- rgb.r = rgb.b = rgb.a = rgb.g = 255;
- rgb.a = 40;
+
+ rgb = i->config_linkcolor;
+
fsid = swf_ShapeAddSolidFillStyle(i->shape,&rgb);
swf_SetU16(i->tag, myshapeid2);
r.xmin = (int)(bbox.xmin*20);
i->config_jpegsubpixels = atof(value);
} else if(!strcmp(name, "ppmsubpixels")) {
i->config_ppmsubpixels = atof(value);
+ } else if(!strcmp(name, "subpixels")) {
+ i->config_ppmsubpixels = i->config_jpegsubpixels = atof(value);
} else if(!strcmp(name, "drawonlyshapes")) {
i->config_drawonlyshapes = atoi(value);
} else if(!strcmp(name, "ignoredraworder")) {
i->config_enablezlib = atoi(value);
} else if(!strcmp(name, "bboxvars")) {
i->config_bboxvars = atoi(value);
+ } else if(!strcmp(name, "internallinkfunction")) {
+ i->config_internallinkfunction = strdup(value);
} else if(!strcmp(name, "insertstop")) {
i->config_insertstoptag = atoi(value);
} else if(!strcmp(name, "protect")) {
v = 500-(v*5); // 100% = 0.25 pixel, 0% = 25 pixel
if(v<1) v = 1;
i->config_fontsplinemaxerror = v;
+ } else if(!strcmp(name, "linkcolor")) {
+ if(strlen(value)!=8) {
+ fprintf(stderr, "Unknown format for option 'linkcolor'. (%s <-> RRGGBBAA)\n", value);
+ return 1;
+ }
+# define NIBBLE(s) (((s)>='0' && (s)<='9')?((s)-'0'):((s)&0x0f)+9)
+ i->config_linkcolor.r = NIBBLE(value[0])<<4 | NIBBLE(value[1]);
+ i->config_linkcolor.g = NIBBLE(value[2])<<4 | NIBBLE(value[3]);
+ i->config_linkcolor.b = NIBBLE(value[4])<<4 | NIBBLE(value[5]);
+ i->config_linkcolor.a = NIBBLE(value[6])<<4 | NIBBLE(value[7]);
+ printf("%02x%02x%02x%02x\n",
+ i->config_linkcolor.r,
+ i->config_linkcolor.g,
+ i->config_linkcolor.b,
+ i->config_linkcolor.a);
+
} else {
fprintf(stderr, "unknown parameter: %s (=%s)\n", name, value);
return 0;
{
SWFFONT*swffont = (SWFFONT*)rfx_calloc(sizeof(SWFFONT));
int t;
+ SRECT bounds = {0,0,0,0};
swffont->id = -1;
swffont->version = 2;
swffont->name = (U8*)strdup(id);
swffont->glyph[t].shape = swf_ShapeDrawerToShape(&draw);
swffont->layout->bounds[t] = swf_ShapeDrawerGetBBox(&draw);
draw.dealloc(&draw);
+
+ swf_ExpandRect2(&bounds, &swffont->layout->bounds[t]);
}
+ if(bounds.ymin < 0 && bounds.ymax > 0) {
+ swffont->layout->ascent = -bounds.ymin;
+ swffont->layout->descent = bounds.ymax;
+ swffont->layout->leading = bounds.ymax - bounds.ymin;
+ } else {
+ swffont->layout->ascent = (bounds.ymax - bounds.ymin)/2;
+ swffont->layout->descent = (bounds.ymax - bounds.ymin)/2;
+ swffont->layout->leading = bounds.ymax - bounds.ymin;
+ }
+
return swffont;
}