[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Gnash-commit] gnash ChangeLog server/impl.cpp server/swf/Plac...
From: |
zou lunkai |
Subject: |
Re: [Gnash-commit] gnash ChangeLog server/impl.cpp server/swf/Plac... |
Date: |
Fri, 24 Aug 2007 14:01:41 +0800 |
+ else if (has_char == false && flag_move == false)
+ {
+ m_place_type = REMOVE;
+ }
PlaceObject2/3 could act as a REMOVE tag? Sounds interesting, never
met this situation before. Any difference compared to RemoveObject
tag?
On 8/24/07, Chad Musick <address@hidden> wrote:
> CVSROOT: /sources/gnash
> Module name: gnash
> Changes by: Chad Musick <cmusick> 07/08/24 05:55:52
>
> Modified files:
> . : ChangeLog
> server : impl.cpp
> server/swf : PlaceObject2Tag.cpp PlaceObject2Tag.h
>
> Log message:
> Adding support for PlaceObject3 SWF8 tag.
>
> CVSWeb URLs:
> http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4089&r2=1.4090
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/impl.cpp?cvsroot=gnash&r1=1.116&r2=1.117
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/PlaceObject2Tag.cpp?cvsroot=gnash&r1=1.17&r2=1.18
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/PlaceObject2Tag.h?cvsroot=gnash&r1=1.12&r2=1.13
>
> Patches:
> Index: ChangeLog
> ===================================================================
> RCS file: /sources/gnash/gnash/ChangeLog,v
> retrieving revision 1.4089
> retrieving revision 1.4090
> diff -u -b -r1.4089 -r1.4090
> --- ChangeLog 24 Aug 2007 05:49:45 -0000 1.4089
> +++ ChangeLog 24 Aug 2007 05:55:51 -0000 1.4090
> @@ -1,5 +1,14 @@
> 2007-08-24 Chad Musick <address@hidden>
>
> + * server/swf/PlaceObject2Tag.cpp,h: Add support for the
> + PlaceObject3 tag. This immediately improves some SWF 8
> + support. The tag still needs to do something with the
> + filters which it loads.
> + * server/impl.cpp: Add a loader for PlaceObject3, remove
> + loaders for DefineShape4, which isn't yet functional.
> +
> +2007-08-24 Chad Musick <address@hidden>
> +
> * server/swf.h: Add FOCAL_GRADIENT to fill styles.
>
> 2007-08-24 Chad Musick <address@hidden>
>
> Index: server/impl.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/impl.cpp,v
> retrieving revision 1.116
> retrieving revision 1.117
> diff -u -b -r1.116 -r1.117
> --- server/impl.cpp 22 Aug 2007 13:09:10 -0000 1.116
> +++ server/impl.cpp 24 Aug 2007 05:55:51 -0000 1.117
> @@ -17,7 +17,7 @@
> // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> //
>
> -/* $Id: impl.cpp,v 1.116 2007/08/22 13:09:10 cmusick Exp $ */
> +/* $Id: impl.cpp,v 1.117 2007/08/24 05:55:51 cmusick Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -244,11 +244,11 @@
>
> // TODO: Alexis reference says these are 83, 84. The 67,68 comes from
> Tamarin.
> // Figure out which one is correct (possibly both are).
> - register_tag_loader(SWF::DEFINESHAPE4_, fixme_loader); // 67
> + register_tag_loader(SWF::DEFINESHAPE4_, fixme_loader
> /*define_shape_loader*/); // 67
> register_tag_loader(SWF::DEFINEMORPHSHAPE2_, fixme_loader); // 68
>
> register_tag_loader(SWF::FILEATTRIBUTES, file_attributes_loader); // 69
> - register_tag_loader(SWF::PLACEOBJECT3, fixme_loader); // 70
> + register_tag_loader(SWF::PLACEOBJECT3, PlaceObject2Tag::loader); // 70
> register_tag_loader(SWF::IMPORTASSETS2, import_loader); // 71
>
> register_tag_loader(SWF::DOABC, fixme_loader); // 72 -- AS3 codeblock.
> @@ -260,7 +260,7 @@
> register_tag_loader(SWF::METADATA, metadata_loader); // 77
> register_tag_loader(SWF::DEFINESCALINGGRID, fixme_loader); // 78
> register_tag_loader(SWF::DOABCDEFINE, fixme_loader); // 79 -- AS3
> codeblock.
> - register_tag_loader(SWF::DEFINESHAPE4, fixme_loader); // 83
> + register_tag_loader(SWF::DEFINESHAPE4, fixme_loader
> /*define_shape_loader*/); // 83
> register_tag_loader(SWF::DEFINEMORPHSHAPE2, fixme_loader); // 84
>
> register_tag_loader(SWF::DEFINEFONTNAME, define_font_name_loader); //
> 88
>
> Index: server/swf/PlaceObject2Tag.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/swf/PlaceObject2Tag.cpp,v
> retrieving revision 1.17
> retrieving revision 1.18
> diff -u -b -r1.17 -r1.18
> --- server/swf/PlaceObject2Tag.cpp 9 Aug 2007 12:18:07 -0000 1.17
> +++ server/swf/PlaceObject2Tag.cpp 24 Aug 2007 05:55:52 -0000 1.18
> @@ -17,7 +17,7 @@
> // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> //
>
> -/* $Id: PlaceObject2Tag.cpp,v 1.17 2007/08/09 12:18:07 zoulunkai Exp $ */
> +/* $Id: PlaceObject2Tag.cpp,v 1.18 2007/08/24 05:55:52 cmusick Exp $ */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> @@ -29,6 +29,7 @@
> #include "swf_event.h"
> #include "log.h"
> #include "stream.h"
> +#include "filters.h"
>
> namespace gnash {
> namespace SWF {
> @@ -210,10 +211,16 @@
>
> // read SWF::PLACEOBJECT2
> void
> -PlaceObject2Tag::readPlaceObject2(stream* in, int movie_version)
> +PlaceObject2Tag::readPlaceObject2(stream* in, int movie_version, bool
> place_2)
> {
> in->align();
>
> + uint8_t blend_mode = 0;
> + uint8_t bitmask = 0;
> + bool has_bitmap_caching = false;
> + bool has_blend_mode = false;
> + bool has_filters = false;
> +
> bool has_actions = in->read_uint(1) ? true : false;
> bool has_clip_bracket = in->read_uint(1) ? true : false;
> bool has_name = in->read_uint(1) ? true : false;
> @@ -223,6 +230,14 @@
> bool has_char = in->read_uint(1) ? true : false;
> bool flag_move = in->read_uint(1) ? true : false;
>
> + if (!place_2 && movie_version >= 8)
> + {
> + static_cast<void> (in->read_uint(5)); // Ignore on purpose.
> + has_bitmap_caching = in->read_uint(1) ? true : false;
> + has_blend_mode = in->read_uint(1) ? true : false;
> + has_filters = in->read_uint(1) ? true : false;
> + }
> +
> m_depth = in->read_u16()+character::staticDepthOffset;
>
> if (has_char) m_character_id = in->read_u16();
> @@ -251,12 +266,29 @@
> else
> m_clip_depth = character::noClipDepthValue;
>
> + if (has_filters)
> + {
> + effect_filters::effect_filters_vec v; // TODO: Something should
> be done with the filters...
> + effect_filters::filter_factory::read(in, movie_version, true,
> &v);
> + }
> +
> + if (has_blend_mode)
> + {
> + blend_mode = in->read_u8();
> + }
> +
> + if (has_bitmap_caching)
> + {
> + // It is not certain that this actually exists, so if this reader
> + // is broken, it is probably here!
> + bitmask = in->read_u8();
> + }
> +
> if (has_actions)
> {
> readPlaceActions(in, movie_version);
> }
>
> -
> if (has_char == true && flag_move == true)
> {
> // Remove whatever's at m_depth, and put m_character there.
> @@ -272,6 +304,10 @@
> // Put m_character at m_depth.
> m_place_type = PLACE;
> }
> + else if (has_char == false && flag_move == false)
> + {
> + m_place_type = REMOVE;
> + }
>
> IF_VERBOSE_PARSE (
> log_parse(_(" PLACEOBJECT2: depth = %d (%d)"), m_depth,
> m_depth-character::staticDepthOffset);
> @@ -307,7 +343,7 @@
> }
> else
> {
> - readPlaceObject2(in, movie_version);
> + readPlaceObject2(in, movie_version, tag == SWF::PLACEOBJECT3
> ? false : true);
> }
> }
>
> @@ -349,6 +385,9 @@
> m_ratio,
> m_clip_depth);
> break;
> +
> + case REMOVE:
> + m->remove_display_object(m_depth, 0); // 0 since it is unused.
> }
> }
>
> @@ -366,7 +405,7 @@
> void
> PlaceObject2Tag::loader(stream* in, tag_type tag, movie_definition* m)
> {
> - assert(tag == SWF::PLACEOBJECT || tag == SWF::PLACEOBJECT2);
> + assert(tag == SWF::PLACEOBJECT || tag == SWF::PLACEOBJECT2 || tag ==
> SWF::PLACEOBJECT3);
>
> IF_VERBOSE_PARSE
> (
>
> Index: server/swf/PlaceObject2Tag.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/swf/PlaceObject2Tag.h,v
> retrieving revision 1.12
> retrieving revision 1.13
> diff -u -b -r1.12 -r1.13
> --- server/swf/PlaceObject2Tag.h 1 Jul 2007 10:54:35 -0000 1.12
> +++ server/swf/PlaceObject2Tag.h 24 Aug 2007 05:55:52 -0000 1.13
> @@ -19,7 +19,7 @@
> //
> //
>
> -/* $Id: PlaceObject2Tag.h,v 1.12 2007/07/01 10:54:35 bjacques Exp $ */
> +/* $Id: PlaceObject2Tag.h,v 1.13 2007/08/24 05:55:52 cmusick Exp $ */
>
> #ifndef GNASH_SWF_PLACEOBJECT2TAG_H
> #define GNASH_SWF_PLACEOBJECT2TAG_H
> @@ -97,6 +97,10 @@
> /// Return true if this tag transforms a character
> bool isMove() const { return m_place_type == MOVE; }
>
> + /// Return true if this tag removes a character.
> + // This is set by having no char and no place in the place tag.
> + bool isRemove() const { return m_place_type == REMOVE; }
> +
> static void loader(stream* in, tag_type tag, movie_definition* m);
>
> int getRatio() const { return m_ratio;}
> @@ -118,7 +122,8 @@
> {
> PLACE,
> MOVE,
> - REPLACE
> + REPLACE,
> + REMOVE
> } m_place_type;
>
> const movie_definition& _movie_def;
> @@ -131,8 +136,8 @@
> // read placeObject2 actions
> void readPlaceActions(stream* in, int movie_version);
>
> - // read SWF::PLACEOBJECT2
> - void readPlaceObject2(stream* in, int movie_version);
> + // read SWF::PLACEOBJECT2 or SWF::PLACEOBJECT3
> + void readPlaceObject2(stream* in, int movie_version, bool place_2);
>
> };
>
>
>
> _______________________________________________
> Gnash-commit mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/gnash-commit
>