📄 fad.sprite.c
字号:
/** * libFAD - Flash Animation Decode library * Copyright (C) 2005-2006 VGSystem Technologies, Inc. * * libFAD is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: fad.sprite.c,v 1.22 2006/03/08 07:39:12 wrxzzj Exp $ */#include "fad.sprite.h"typedef struct _sprite_mc_s { fad_object_t base; fad_frame_t frame; fad_stream_t stream; u8_t *buff;} sprite_mc_t;static fad_object_t* _sprite_mc_do_copy(fad_object_t *fo) { sprite_mc_t *sm = (sprite_mc_t* )fo, *new = NULL; new = calloc(1, sizeof(sprite_mc_t)); *new = *sm; return (fad_object_t *)new;}static void _sprite_mc_do_free(fad_object_t *fo) { sprite_mc_t* sm = (sprite_mc_t* )fo; fad_frame_finish(&sm->frame);}static void _sprite_mc_get_rect(fad_object_t *fo, rect_t *rt) { sprite_mc_t* sm = (sprite_mc_t* )fo;#ifdef LIBFAD_DIRTY_AREA *rt = sm->frame.dirty_rect;#endif}static u8_t _sprite_mc_do_render(fad_object_t* fo, fad_render_t* render, dl_node_t *node) { sprite_mc_t* sm = (sprite_mc_t* )fo; u8_t ret = FAD_TRUE; FAD_ERROR("sprite moive clip render start, fo = %x, frame = %x, matrix(%f, %f, %f, %f, %f, %f).\n", fo, &sm->frame, node->mx.xx, node->mx.yx, node->mx.x0, node->mx.yy, node->mx.xy, node->mx.y0); while(sm->frame.sta != FAD_STA_DORENDER) { fad_frame_decode(&sm->frame, &sm->stream); if(sm->frame.sta == FAD_STA_FINISH) { fad_stream_buffer(&sm->stream, sm->buff); sm->frame.sta = FAD_STA_DOTAG; if(sm->frame.total_frame <= 1) break; } } ret = fad_frame_render_graphics(&sm->frame, node); fad_frame_render_audio(&sm->frame, &sm->stream); if(sm->frame.total_frame > 1) { if(sm->frame.output_frame < sm->frame.total_frame) ret = FAD_FALSE; } FAD_ERROR("sprite moive clip render end, fo = %x, ret = %d, sm->frame.output_frame = %d, sm->frame.total_frame = %d.\n", fo, ret, sm->frame.output_frame, sm->frame.total_frame); return ret;}s32_t sprite_mc_decode(fad_frame_t* frame, fad_stream_t* s) { u16_t id, frame_count; sprite_mc_t* sm = NULL; id = bits_get_u16(&s->bits); sm = calloc(1, sizeof(sprite_mc_t)); if(sm == NULL) { s->err = FAD_ERROR_MEM; return -1; } fad_frame_init(&sm->frame); fad_stream_init(&sm->stream, s->dict); sm->base.get_rect = _sprite_mc_get_rect; sm->base.do_render = _sprite_mc_do_render; sm->base.do_free = _sprite_mc_do_free; sm->base.do_copy = _sprite_mc_do_copy; sm->base.type = FO_TYPE_SPRITE; sm->frame.total_frame = bits_get_u16(&s->bits); sm->frame.render = frame->render; sm->frame.sta = FAD_STA_DOTAG; FAD_FRAME_SET_SPRITE(sm->frame.attr); sm->buff = (u8_t *)bits_tell(&s->bits); fad_stream_buffer(&sm->stream, sm->buff); s->dict->put(s->dict, sm, id); FAD_ERROR("append sprite to dictionary, id = %d, frame_count = %d, frame = %x, main_frame.attr = %x\n", id, sm->frame.total_frame, &sm->frame, frame->attr); /** while(sm->frame.sta != FAD_STA_DORENDER) { fad_frame_decode(&sm->frame, &sm->stream); if(sm->frame.sta == FAD_STA_FINISH) break; }*/ return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -