gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/impl.cpp server/swf/Plac...


From: Chad Musick
Subject: [Gnash-commit] gnash ChangeLog server/impl.cpp server/swf/Plac...
Date: Fri, 24 Aug 2007 05:55:52 +0000

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);
 
 };
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]