?? instance.c.svn-base
字號:
to_exec_p = g_new0(to_exec_t,1); to_exec_p->as_p = mc_data_p->actions_p->ClipEventLoadP; to_exec_p->name_p = ins_node_to_name(node_p); player_p->actionq_p = g_slist_append(player_p->actionq_p,to_exec_p); }; break; };};// 算每個節點的 絕對 matrix, 用 絕對 matrix(ab_matrix) 乘以其定義中的外框 即 得到在屏幕上的外框坐標.void ins_fresh_boundary(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); if (node_p->parent == NULL) { // 根節點不需計算 return; }; data_p->ab_matrix = mat_multi(&(((instance_t*)(node_p->parent->data))->ab_matrix),&data_p->matrix); switch(data_p->ins_type) { case INS_SHP: data_p->boundary = mat_multi_rect(&data_p->ab_matrix,&(((shp_ins_t*)data_p)->shape_p->ShapeBounds)); break; case INS_DTX: case INS_STX: assert(((stx_ins_t*)data_p)->text_p); data_p->boundary = mat_multi_rect(&data_p->ab_matrix,&(((stx_ins_t*)data_p)->text_p->TextBounds)); break; case INS_MC: break; case INS_MRH: data_p->boundary = mat_multi_rect(&data_p->ab_matrix,&(((shp_ins_t*)data_p)->shape_p->ShapeBounds)); break; }; // assert(data_p->boundary.Ymin <= data_p->boundary.Ymax);};static gboolean ins_destory_data(GNode* node_p,gpointer data_in_p) { instance_t *data_p = (instance_t*)(node_p->data); dtx_ins_t *dtx_data_p = (dtx_ins_t*)data_p; if (data_p->name_p) { free(data_p->name_p); }; if (data_p->full_name_p) { free(data_p->full_name_p); }; if (data_p->pic_p) { free(data_p->pic_p->sp); data_p->pic_p->sp=0; free(data_p->pic_p->pp); data_p->pic_p->pp=0; free(data_p->pic_p); data_p->pic_p=0; }; switch(data_p->ins_type) { case INS_DTX: /* if (dtx_data_p->value_p) { free(dtx_data_p->value_p); }; */ if (dtx_data_p->var_name_p) { free(dtx_data_p->var_name_p); }; if (dtx_data_p->var_full_name_p) { free(dtx_data_p->var_full_name_p); }; }; free(data_p); return FALSE;};// 刪除子樹.包括 node 中 的 datavoid ins_destory(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); swf_file_t *swf_p = data_p->swf_p; changed_t *chg_p = swf_p->changed_p; // 刪除前登記 box_bounding// printf("p2\n"); chg_add_boundary(chg_p,node_p); g_node_traverse(node_p,G_IN_ORDER,G_TRAVERSE_ALL,-1,ins_destory_data,NULL); g_node_destroy(node_p);};static GNode *ins_name_to_node_do(GNode* node_p,char** name_ary_p,int depth) { GNode *child = node_p; char *name_p = name_ary_p[depth]; while (child) { if (((instance_t*)(child->data))->name_p != NULL) { if (g_strcasecmp(((instance_t*)(child->data))->name_p,name_p)==0) {// 名字相等 ? if (name_ary_p[depth+1] == NULL) { // 最后一層 ? return child; } else { return ins_name_to_node_do(g_node_first_child(child),name_ary_p,depth+1); }; }; }; child = child->next; }; return 0;};#define MAX_DEPTH 20// 根據 a.b.c.d 式的名稱,返回對應節點的指針.// 例: 首先將 a.b.c.d 的名稱用 . 分解成包含 4 個字串的字串 array.// 4 個字串即為此對象分別在 4 層中的名字.用遞歸在每層中遍歷,當前層找到// 則遞歸進入下一層.GNode* ins_name_to_node(GNode* node_p,const char* name_p) { char **str_array; GNode *p = NULL; str_array = g_strsplit(name_p,".",MAX_DEPTH); p = ins_name_to_node_do(node_p,str_array,0); g_strfreev(str_array); return p;};// 取節點的全名.將其各層 父親 的名字串在一起,即為其全名.char* ins_node_to_name(GNode* node_p) { GNode* p; char *n1_p = NULL , *n2_p = NULL; p = node_p; while (p) { n2_p = g_strjoin(".",((instance_t*)(p->data))->name_p,n1_p,NULL); if (n1_p) free(n1_p); n1_p = n2_p; p = p->parent; } return n2_p;};// 各種屬性的讀取,設置.double ins_get_x(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->matrix.TranslateX / TWIPS_PER_POINT;};void ins_set_x(GNode* node_p,double value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->matrix.TranslateX = value * TWIPS_PER_POINT; data_p->dirty = TRUE;};double ins_get_y(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->matrix.TranslateY / TWIPS_PER_POINT;};void ins_set_y(GNode* node_p,double value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->matrix.TranslateY = value * TWIPS_PER_POINT; data_p->dirty = TRUE;};float ins_get_xscale(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->matrix.ScaleX;};void ins_set_xscale(GNode* node_p,float value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->matrix.ScaleX = value; data_p->dirty = TRUE;};float ins_get_yscale(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->matrix.ScaleX;};void ins_set_yscale(GNode* node_p,float value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->matrix.ScaleY = value; data_p->dirty = TRUE;};gboolean ins_get_visible(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->visible;};void ins_set_visible(GNode* node_p,gboolean value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->visible = value; data_p->dirty = TRUE;};long ins_get_currentframe(GNode* node_p) { mc_ins_t *data_p = (mc_ins_t*)(node_p->data); assert(data_p->ins_type == INS_MC); return data_p->next_frame;};long ins_get_totalframe(GNode* node_p) { mc_ins_t *data_p = (mc_ins_t*)(node_p->data); struct MovieClip *def_p = (struct MovieClip*)(data_p->define_p); assert(data_p->ins_type == INS_MC); return def_p->TotalFrames;};float ins_get_alpha(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); return data_p->cxform.AlphaMultTerm*100;};void ins_set_alpha(GNode* node_p,float value) { instance_t *data_p = (instance_t*)(node_p->data); data_p->cxform.AlphaMultTerm = value/100; data_p->dirty = TRUE;};long ins_get_width(GNode* node_p) { instance_t *data_p = (instance_t*)(node_p->data); //XXX 如果此對象有旋轉角度,則此數不準 return (data_p->boundary.Xmax - data_p->boundary.Xmin )/ TWIPS_PER_POINT;};void ins_set_width(GNode* node_p,long value);long ins_get_height(GNode* node_p);void ins_set_height(GNode* node_p,long value);float ins_get_rotation(GNode* node_p) {};void ins_set_rotation(GNode* node_p,float value) {};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -