⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instance.c.svn-base

📁 A Flash Player with ActionScript support. Write in C and C++. It have two part, one is Player and an
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
            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 + -