?? instance.c.svn-base
字號:
#include "base_types.h"#include "config.h"#include "instance.h"#include "movie_clips_ins.h"#include "movie_clips_def.h"#include "button_ins.h"#include "button_def.h"#include "dynamic_text_ins.h"#include "dynamic_text_def.h"#include "morphing_ins.h"#include "shape_ins.h"#include "static_text_ins.h"#include "swf_file_pub.h"#include "changed.h"#include "action.h"#include <glib.h>#include <assert.h>#include <stdlib.h>#include "dynamic_var.h"#if WITH_DMALLOC#include <dmalloc.h>#endifextern player_t *player_p;void ins_change(GNode* node_p,struct PlaceObject* cmd_p) { instance_t *data_p = (instance_t*)(node_p->data); struct DefineCharacter *define_p = (struct DefineCharacter*)(data_p->swf_p->dict_p->dict[cmd_p->CharacterID]); swf_file_t *swf_p = data_p->swf_p; changed_t *chg_p = swf_p->changed_p; // 改變前登記 box_bounding chg_add_boundary(chg_p,node_p); if (cmd_p->Flags & PlaceFlagHasColorTransform) { data_p->cxform = cmd_p->ColorTransform; data_p->pic_dirty = TRUE; }; if (cmd_p->Flags & PlaceFlagHasMatrix) { // 如果發生除移動以外的任何變化,則需重新生成節點的圖像. if ((data_p->matrix.ScaleX != cmd_p->Matrix.ScaleX) || (data_p->matrix.ScaleY != cmd_p->Matrix.ScaleY) || (data_p->matrix.RotateSkew0 != cmd_p->Matrix.RotateSkew0) || (data_p->matrix.RotateSkew1 != cmd_p->Matrix.RotateSkew1)) { data_p->pic_dirty = TRUE; } data_p->matrix = cmd_p->Matrix; }; if (cmd_p->Flags & PlaceFlagHasClipDepth) { data_p->clip_depth = cmd_p->ClipDepth; }; if (cmd_p->Flags & PlaceFlagHasCharacter) { data_p->define_p = define_p; }; switch (data_p->ins_type) { case INS_MC : mc_ins_change(node_p,cmd_p); break; case INS_BTN: btn_ins_change(node_p,cmd_p); break; case INS_STX: stx_ins_change(node_p,cmd_p); break; case INS_DTX: dtx_ins_change(node_p,cmd_p); break; case INS_MRH: mrp_ins_change(node_p,cmd_p); break; case INS_SHP: shp_ins_change(node_p,cmd_p); break; }; data_p->dirty = TRUE; if (data_p->pic_dirty) { printf("node %s pic dirty\n",data_p->name_p);// data_p->pic_dirty = FALSE; };};GNode* ins_new(swf_file_t *swf_p,struct PlaceObject * cmd_p) { instance_t *data_p = NULL; GNode *node_p = NULL; struct DefineCharacter *define_p = (struct DefineCharacter*)(swf_p->dict_p->dict[cmd_p->CharacterID]); if (define_p == 0) { assert(0); }; switch (define_p->CharacterType) { case CharMovieClip: data_p = (instance_t*)g_new0(mc_ins_t,1); data_p->ins_type = INS_MC; ((mc_ins_t*)data_p)->last_frame = 0; ((mc_ins_t*)data_p)->next_frame = 0; ((mc_ins_t*)data_p)->state = MC_PLAY; node_p = g_node_new(data_p); break; case CharButton: data_p = (instance_t*)g_new0(btn_ins_t,1); data_p->ins_type = INS_BTN; node_p = g_node_new(data_p); ((btn_ins_t*)data_p)->last_state = BtnStateIdle; ((btn_ins_t*)data_p)->current_state = BtnStateOutUp; break; case CharEditText: data_p = (instance_t*)g_new0(dtx_ins_t,1); data_p->ins_type = INS_DTX; node_p = g_node_new(data_p); break; case CharText: data_p = (instance_t*)g_new0(stx_ins_t,1); data_p->ins_type = INS_STX; node_p = g_node_new(data_p); break; case CharMorphShape: data_p = (instance_t*)g_new0(mrp_ins_t,1); data_p->ins_type = INS_MRH; ((mrp_ins_t*)data_p)->ratio = cmd_p->Ratio; ((mrp_ins_t*)data_p)->last_ratio = cmd_p->Ratio - 1; node_p = g_node_new(data_p); break; case CharShape: data_p = (instance_t*)g_new0(shp_ins_t,1); data_p->ins_type = INS_SHP; node_p = g_node_new(data_p); break; }; data_p->swf_p = swf_p; if (cmd_p->Flags & PlaceFlagHasColorTransform) { data_p->cxform = cmd_p->ColorTransform; } else { cxform_new(&data_p->cxform); } data_p->matrix = cmd_p->Matrix; // assert(data_p->matrix.ScaleX > 0); data_p->clip_depth = cmd_p->ClipDepth; data_p->depth = cmd_p->Depth; data_p->define_p = define_p; data_p->dirty = TRUE; data_p->pic_dirty = TRUE; data_p->visible = TRUE; mat_new(&data_p->ab_matrix); rect_new(&data_p->boundary); if (cmd_p->NameP) { data_p->name_p = g_strdup(cmd_p->NameP); } switch (data_p->ins_type) { case INS_MC: mc_ins_change(node_p,cmd_p); if (data_p->name_p == NULL) { data_p->name_p=g_strdup_printf("instance%d",swf_p->next_ins_name_num); swf_p->next_ins_name_num++; }; break; case INS_BTN: btn_ins_change(node_p,cmd_p); if (data_p->name_p == NULL) { data_p->name_p=g_strdup_printf("instance%d",swf_p->next_ins_name_num); swf_p->next_ins_name_num++; }; break; case INS_DTX: { //遇有 "_root.year_txt" 字樣的名字,將 _root 截掉 char **str_array = NULL; int i=0;#define MAX_DEPTH 20 if (((struct DefineEditText*)(data_p->define_p))->VariableNameP[0]) { str_array = g_strsplit(g_strdup(((struct DefineEditText*)(data_p->define_p))->VariableNameP),".",MAX_DEPTH); while (str_array[i+1] != NULL) i++; ((dtx_ins_t*)data_p)->var_name_p = g_strdup((char*)(str_array[i])); g_strfreev(str_array); }; } ((dtx_ins_t*)data_p)->focusd = FALSE; if (data_p->name_p == NULL) { data_p->name_p=g_strdup_printf("instance%d",swf_p->next_ins_name_num); swf_p->next_ins_name_num++; }; if (((dtx_ins_t*)data_p)->var_full_name_p) { assert(0); ((dtx_ins_t*)data_p)->value_p = g_strdup(g_datalist_get_data(&swf_p->dvar_list_p,((dtx_ins_t*)data_p)->var_full_name_p)); if (!(((dtx_ins_t*)data_p)->value_p)) { ((dtx_ins_t*)data_p)->value_p = g_strdup(((struct DefineEditText*)(data_p->define_p))->InitialTextP); }; }; // dtx_ins_change(node_p,cmd_p); break; case INS_STX: stx_ins_change(node_p,cmd_p); break; case INS_MRH: mrp_ins_change(node_p,cmd_p); break; case INS_SHP: shp_ins_change(node_p,cmd_p); break; }; return node_p;};// 新節點被插入到樹中后執行,因為在插入節點之前,節點的 父 兄 均不知道,// 所以只有在插入之后,才可能進行求全名之類的操作.void ins_new_after(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); dtx_ins_t *dtx_data_p = (dtx_ins_t*)data_p; mc_ins_t *mc_data_p = (mc_ins_t*)data_p; char *p; switch (data_p->ins_type) { case INS_DTX: if (dtx_data_p->var_name_p) { // 計算新的變量名全稱 dtx_data_p->var_full_name_p = dtx_get_var_full_name(node_p); p = g_ascii_strdown(dtx_data_p->var_full_name_p,-1); free(dtx_data_p->var_full_name_p); dtx_data_p->var_full_name_p = p; printf("new dtx's var %s\n",dtx_data_p->var_full_name_p); // 如果有沒有同名變量,則建立變量,并使用 InitialTextP做為初值; ((dtx_ins_t*)data_p)->value_p = dvar_get_value(dtx_data_p->var_full_name_p); if (!(((dtx_ins_t*)data_p)->value_p)) { printf("create var %s\n",((dtx_ins_t*)data_p)->var_full_name_p); dvar_set_value(dtx_data_p->var_full_name_p,((struct DefineEditText*)(data_p->define_p))->InitialTextP); }; } else { // 如果 dtx 沒有變量名,則自己做一個假名.此種 dtx 類似于靜態字體,其內容不隨 var 變. dtx_data_p->var_full_name_p = g_strdup_printf("__%s__var",dtx_data_p->name_p); dvar_set_value(dtx_data_p->var_full_name_p,((struct DefineEditText*)(data_p->define_p))->InitialTextP); }; dtx_ins_change(node_p,NULL); break; case INS_MC: // 如果 mc 有 onload 事件,則調之.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -