character_t* c = dictionary_lookup(&characters, character);
MATRIX m;
int flags = 0;
+ char*o = as,*s = as;
+ buttonrecord_t r;
+ if(!stackpos || (stack[stackpos-1].type != 3)) {
+ syntaxerror(".show may only appear in .button");
+ }
if(!c) {
syntaxerror("character %s not known (in .shape %s)", character, character);
}
m = s_instancepos(c->size, &p);
- buttonrecord_t r;
r.id = c->id;
r.matrix = m;
r.cxform = p.cxform;
r.set = 1;
+
+ while(1) {
+ if(*s==',' || *s==0) {
+ if(!strncmp(o,"idle",s-o)) mybutton.records[0]=r;
+ else if(!strncmp(o,"shape",s-o)) mybutton.records[0]=r;
+ else if(!strncmp(o,"hover",s-o)) mybutton.records[1]=r;
+ else if(!strncmp(o,"pressed",s-o)) mybutton.records[2]=r;
+ else if(!strncmp(o,"area",s-o)) mybutton.records[3]=r;
+ else syntaxerror("unknown \"as\" argument: \"%s\"", strdup_n(o,s-o));
+ }
+ if(!*s)
+ break;
+ s++;
+ }
+ printf("%s\n", as);
+ swf_DumpMatrix(stdout,&mybutton.records[0].matrix);
- if(strstr(as, "idle")) mybutton.records[0]=r;
- if(strstr(as, "hover")) mybutton.records[1]=r;
- if(strstr(as, "pressed")) mybutton.records[2]=r;
- if(strstr(as, "area")) mybutton.records[3]=r;
}
static void setbuttonrecords(TAG*tag)
{
int flags[] = {BS_UP,BS_OVER,BS_DOWN,BS_HIT};
if(!mybutton.endofshapes) {
int t;
-
+
if(!mybutton.records[3].set) {
memcpy(&mybutton.records[3], &mybutton.records[0], sizeof(buttonrecord_t));
}
for(t=0;t<4;t++) {
- if(mybutton.records[t].set)
+ if(mybutton.records[t].set) {
swf_ButtonSetRecord(tag,flags[t],mybutton.records[t].id,1,&mybutton.records[t].matrix,&mybutton.records[t].cxform);
+ }
}
swf_SetU8(tag,0); // end of button records
mybutton.endofshapes = 1;
static void s_endButton()
{
+ SRECT r;
setbuttonrecords(stack[stackpos-1].tag);
stackpos--;
swf_ButtonPostProcess(stack[stackpos].tag, mybutton.nr_actions);
- SRECT r = currentrect;
+ r = currentrect;
tag = stack[stackpos].tag;
currentrect = stack[stackpos].oldrect;
static int c_on_press(map_t*args)
{
char*position = lu(args, "position");
+ char*action = "";
if(!strcmp(position, "inside")) {
current_button_flags |= BC_OVERUP_OVERDOWN;
} else if(!strcmp(position, "outside")) {
} else if(!strcmp(position, "anywhere")) {
current_button_flags |= /*BC_IDLE_OUTDOWN|*/BC_OVERUP_OVERDOWN|BC_IDLE_OVERDOWN;
}
- char*action = "";
readToken();
if(type == RAWDATA) {
action = text;
static int c_on_release(map_t*args)
{
char*position = lu(args, "position");
+ char*action = "";
if(!strcmp(position, "inside")) {
current_button_flags |= BC_OVERDOWN_OVERUP;
} else if(!strcmp(position, "outside")) {
} else if(!strcmp(position, "anywhere")) {
current_button_flags |= BC_OVERDOWN_OVERUP|BC_OUTDOWN_IDLE|BC_OVERDOWN_IDLE;
}
- char*action = "";
readToken();
if(type == RAWDATA) {
action = text;
static int c_on_move_in(map_t*args)
{
char*position = lu(args, "state");
+ char*action = "";
if(!strcmp(position, "pressed")) {
current_button_flags |= BC_OUTDOWN_OVERDOWN;
} else if(!strcmp(position, "not_pressed")) {
} else if(!strcmp(position, "any")) {
current_button_flags |= BC_OUTDOWN_OVERDOWN|BC_IDLE_OVERUP|BC_IDLE_OVERDOWN;
}
- char*action = "";
readToken();
if(type == RAWDATA) {
action = text;
static int c_on_move_out(map_t*args)
{
char*position = lu(args, "state");
+ char*action = "";
if(!strcmp(position, "pressed")) {
current_button_flags |= BC_OVERDOWN_OUTDOWN;
} else if(!strcmp(position, "not_pressed")) {
} else if(!strcmp(position, "any")) {
current_button_flags |= BC_OVERDOWN_OUTDOWN|BC_OVERUP_IDLE|BC_OVERDOWN_IDLE;
}
- char*action = "";
readToken();
if(type == RAWDATA) {
action = text;
static int c_on_key(map_t*args)
{
char*key = lu(args, "key");
+ char*action = "";
if(strlen(key)==1) {
/* ascii */
if(key[0]>=32) {
*/
syntaxerror("invalid key: %s",key);
}
- char*action = "";
readToken();
if(type == RAWDATA) {
action = text;