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

📄 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 页
字号:
#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//    printf("p1\n");    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;    };//    printf("node %s change dirty\n",data_p->name_p);    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 事件,则调之.        if ((mc_data_p->actions_p) && (mc_data_p->actions_p->ClipEventLoadP)) {            to_exec_t 	*to_exec_p;            // mc on load event

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -