gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/asobj/MovieClipLoader.cp...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/asobj/MovieClipLoader.cp...
Date: Tue, 08 Jan 2008 21:34:39 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/01/08 21:34:39

Modified files:
        .              : ChangeLog 
        server/asobj   : MovieClipLoader.cpp 
        testsuite/actionscript.all: MovieClipLoader.as 

Log message:
        fix MovieClipLoader.getProgress()

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5344&r2=1.5345
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClipLoader.as?cvsroot=gnash&r1=1.14&r2=1.15

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5344
retrieving revision 1.5345
diff -u -b -r1.5344 -r1.5345
--- ChangeLog   8 Jan 2008 21:04:25 -0000       1.5344
+++ ChangeLog   8 Jan 2008 21:34:38 -0000       1.5345
@@ -1,5 +1,11 @@
 2008-01-08 Sandro Santilli <address@hidden>
 
+       * server/asobj/MovieClipLoader.cpp: fix MovieClipLoader.getProgress()
+       * testsuite/actionscript.all/MovieClipLoader.as: test
+         MovieClipLoader.getProgress().
+
+2008-01-08 Sandro Santilli <address@hidden>
+
        * server/impl.cpp: have MovieLibrary read cache limit from Rc file.
          See bug #21825.
        * server/sprite_instance.cpp (sprite_beginFill): don't ignore

Index: server/asobj/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- server/asobj/MovieClipLoader.cpp    25 Dec 2007 18:56:06 -0000      1.42
+++ server/asobj/MovieClipLoader.cpp    8 Jan 2008 21:34:38 -0000       1.43
@@ -93,20 +93,6 @@
        return o.get();
 }
 
-
-// progress info
-struct mcl {
-       int bytes_loaded;
-       int bytes_total;
-};
-
-
-/// Progress object to use as return of MovieClipLoader.getProgress()
-struct mcl_as_object : public as_object
-{
-       struct mcl data;
-};
-
 class MovieClipLoader: public as_object
 {
 public:
@@ -115,8 +101,6 @@
 
        ~MovieClipLoader();
 
-       struct mcl *getProgress(as_object *ao);
-
        /// MovieClip
        bool loadClip(const std::string& url, sprite_instance& target);
 
@@ -146,15 +130,12 @@
        std::string     _filespec;
        int           _progress;
        bool          _error;
-       struct mcl    _mcl;
 };
 
 MovieClipLoader::MovieClipLoader()
        :
        as_object(getMovieClipLoaderInterface())
 {
-       _mcl.bytes_loaded = 0;
-       _mcl.bytes_total = 0;  
 
        as_array_object* ar = new as_array_object();
        ar->push(this);
@@ -166,16 +147,6 @@
        GNASH_REPORT_FUNCTION;
 }
 
-// progress of the downloaded file(s).
-struct mcl *
-MovieClipLoader::getProgress(as_object* /*ao*/)
-{
-  GNASH_REPORT_FUNCTION;
-
-  return &_mcl;
-}
-
-
 bool
 MovieClipLoader::loadClip(const std::string& url_str, sprite_instance& target)
 {
@@ -205,12 +176,10 @@
        callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadStart"), 
targetVal);
 
        // Dispatch onLoadProgress
-       struct mcl *mcl_data = getProgress(&target);
-       // the callback since we're done loading the file
-       mcl_data->bytes_loaded = target.get_bytes_loaded();
-       mcl_data->bytes_total = target.get_bytes_total();
+       size_t bytesLoaded = target.get_bytes_loaded();
+       size_t bytesTotal = target.get_bytes_total();
        callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadProgress"), 
targetVal,
-               mcl_data->bytes_loaded, mcl_data->bytes_total);
+               bytesLoaded, bytesTotal);
 
        // Dispatch onLoadComplete
        callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadComplete"), 
targetVal,
@@ -329,14 +298,37 @@
 
        boost::intrusive_ptr<as_object> target = fn.arg(0).to_object();
   
-       struct mcl *mcl_data = ptr->getProgress(target.get());
+       if ( ! target.get() )
+       {
+               IF_VERBOSE_ASCODING_ERRORS(
+               log_aserror(_("MovieClipLoader.getProgress(%s): first argument 
is not an object"),
+                       fn.arg(0).to_debug_string().c_str());
+               );
+               return as_value();
+       }
 
-       boost::intrusive_ptr<mcl_as_object> mcl_obj ( new mcl_as_object );
+       sprite_instance* sp = target->to_movie();
+       if ( ! sp )
+       {
+               IF_VERBOSE_ASCODING_ERRORS(
+               log_aserror(_("MovieClipLoader.getProgress(%s): first argument 
is not an sprite"),
+                       fn.arg(0).to_debug_string().c_str());
+               );
+               return as_value();
+       }
+
+
+       boost::intrusive_ptr<as_object> mcl_obj ( new as_object() );
+
+       size_t bytesLoaded = sp->get_bytes_loaded();
+       size_t bytesTotal = sp->get_bytes_total();
 
-       // We want these to be enumerable
        string_table& st = ptr->getVM().getStringTable();
-       mcl_obj->set_member(st.find(PROPNAME("bytesLoaded")), 
mcl_data->bytes_loaded);
-       mcl_obj->set_member(st.find(PROPNAME("bytesTotal")),  
mcl_data->bytes_total);
+
+       // We want these to be enumerable
+       mcl_obj->set_member(st.find(PROPNAME("bytesLoaded")), bytesLoaded);
+       mcl_obj->set_member(st.find(PROPNAME("bytesTotal")),  bytesTotal);
+
   
        return as_value(mcl_obj.get()); // will keep alive
 }

Index: testsuite/actionscript.all/MovieClipLoader.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClipLoader.as,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- testsuite/actionscript.all/MovieClipLoader.as       7 Jan 2008 20:31:11 
-0000       1.14
+++ testsuite/actionscript.all/MovieClipLoader.as       8 Jan 2008 21:34:38 
-0000       1.15
@@ -21,7 +21,7 @@
 // compile this test case with Ming makeswf, and then
 // execute it like this gnash -1 -r 0 -v out.swf
 
-rcsid="$Id: MovieClipLoader.as,v 1.14 2008/01/07 20:31:11 strk Exp $";
+rcsid="$Id: MovieClipLoader.as,v 1.15 2008/01/08 21:34:38 strk Exp $";
 
 #include "check.as"
 
@@ -286,6 +286,14 @@
 
 function test3()
 {
+       // getProgress can be called using *any* target
+       // and will return the target's actual size
+       var prog = mcl.getProgress(_level0);
+       check_equals(typeof(prog), 'object');
+       check_equals(prog.__proto__, undefined);
+       check_equals(prog.bytesLoaded, prog.bytesTotal);
+       check_equals(prog.bytesTotal, _level0.getBytesTotal());
+
        resetState();
        state.nextFunction = undefined;
        expected.target = _root.loadtarget;
@@ -301,7 +309,7 @@
        // subtract the number of progress callback runs reported when playing 
from the totals to get the correct number
        // BUT MAKE SURE nextTestOrEnd CONTAINS THE CORRECT 
testsPerProgressCallback INFO !!
        //
-       expected.totals = 64;
+       expected.totals = 68;
        // gnash doesn't call onLoadInit if the data at the url is not an SWF 
or JPG
        // (or whatever else can become a movie_instance), while the PP does.
        // So in this testcase, the attempt to load vars.txt is invalid for 
Gnash
@@ -316,6 +324,7 @@
        loadtarget._x = 200;
        loadtarget._alpha = 20;
        check( mcl.loadClip( MEDIA(green.jpg), 'loadtarget' ) );
+
 }
 
 // Due to a bug in Gnash we must stop() before calling test1.




reply via email to

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