OSDN Git Service

replacing font reference id in DefineEditText on replaceMovieClip.
authorよや <yoya@awm.jp>
Sun, 5 Aug 2012 16:57:29 +0000 (01:57 +0900)
committerよや <yoya@awm.jp>
Sun, 5 Aug 2012 16:57:29 +0000 (01:57 +0900)
src/swf_object.c
src/swf_tag.c

index 1b595a7..ddf6793 100644 (file)
@@ -1547,6 +1547,15 @@ swf_object_replace_movieclip(swf_object_t *swf,
                 trans_table_replace_refcid_recursive(s->tag, cid_trans_table);
                 free(tag->data);
                 tag->data = NULL;
+            } else {
+                int refcid, to_refcid;                
+                refcid = swf_tag_get_refcid(tag);
+                if (refcid > 0) {
+                    to_refcid = trans_table_get(cid_trans_table, refcid);
+                    if (refcid != to_refcid) {
+                        swf_tag_replace_refcid(tag, to_refcid);
+                    }
+                }
             }
             // extract tag before SpriteTag
             prev_sprite_tag->next = swf_tag_move(tag);
index 0f74d30..e44444d 100644 (file)
@@ -417,6 +417,14 @@ swf_tag_get_refcid(swf_tag_t *tag) {
             return -1;
         }
         return swf_tag_place->character_id;
+    } else if (tag->code == 37) { // DefineEditText
+        swf_tag_edit_detail_t *swf_tag_edit;
+        swf_tag_edit = swf_tag_create_input_detail(tag, NULL);
+        if (swf_tag_edit == NULL) {
+            fprintf(stderr, "swf_tag_get_refcid: swf_tag_edit swf_tag_create_input_detail failed\n");
+            return -1;
+        }
+        return swf_tag_edit->edit_font_id_ref;
     }
     return -1; // no cid tag
 }
@@ -435,6 +443,14 @@ swf_tag_replace_refcid(swf_tag_t *tag, int cid) {
             return 1; // failure
         }
         swf_tag_place->character_id = cid;
+    } else if (tag->code == 37) { // DefineEditText
+        swf_tag_edit_detail_t *swf_tag_edit;
+        swf_tag_edit = swf_tag_create_input_detail(tag, NULL);
+        if (swf_tag_edit == NULL) {
+            fprintf(stderr, "swf_tag_get_refcid: swf_tag_edit swf_tag_create_input_detail failed\n");
+            return -1;
+        }
+        swf_tag_edit->edit_font_id_ref = cid;
     }
     if (tag->data) {
         free(tag->data);