gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ./ChangeLog server/MovieClipLoader.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ./ChangeLog server/MovieClipLoader.cpp
Date: Tue, 16 May 2006 08:22:00 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Sandro Santilli <address@hidden>        06/05/16 08:22:00

Modified files:
        .              : ChangeLog 
        server         : MovieClipLoader.cpp 

Log message:
        * server/MovieClipLoader.cpp: fixed relative url resolution
        to use target's parent url, not target url.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.329&tr2=1.330&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/MovieClipLoader.cpp.diff?tr1=1.19&tr2=1.20&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.329 gnash/ChangeLog:1.330
--- gnash/ChangeLog:1.329       Tue May 16 08:05:13 2006
+++ gnash/ChangeLog     Tue May 16 08:22:00 2006
@@ -1,5 +1,7 @@
 2006-05-16 Sandro Santilli <address@hidden>
 
+       * server/MovieClipLoader.cpp: fixed relative url resolution
+       to use target's parent url, not target url.
        * server/gnash.h, server/impl.cpp: changed definition
        of file_opener_callback, create_movie and
        create_library_movie to take an URL parameter.
Index: gnash/server/MovieClipLoader.cpp
diff -u gnash/server/MovieClipLoader.cpp:1.19 
gnash/server/MovieClipLoader.cpp:1.20
--- gnash/server/MovieClipLoader.cpp:1.19       Tue May 16 08:05:13 2006
+++ gnash/server/MovieClipLoader.cpp    Tue May 16 08:22:00 2006
@@ -70,6 +70,7 @@
 #include "impl.h"
 #include "URL.h"
 #include "GnashException.h"
+#include "sprite_instance.h"
 
 #include <string>
 
@@ -224,29 +225,41 @@
        assert(ptr);
   
        tu_string tu_url = fn.arg(0).to_string(); 
-       as_object *target = (as_object *)fn.arg(1).to_object();
+       as_object *target_object = fn.arg(1).to_object();
+       if ( ! target_object )
+       {
+               log_error("load target is not an object.\n");
+               fn.result->set_bool(false);
+               return;
+       }
+
+       sprite_instance* target = dynamic_cast<sprite_instance*>(target_object);
+       if ( ! target )
+       {
+               log_error("load target is not a sprite_instance (%s)\n",
+                       typeid(*target).name());
+               fn.result->set_bool(false);
+               return;
+       }
 
-       log_msg("load clip: %s, target is: %p (%s)\n", tu_url.c_str(),
-               (void*)target, typeid(*target).name());
+       log_msg("load clip: %s, target is: %p\n",
+               tu_url.c_str(), (void*)target);
+
+       // Get a pointer to target's sprite parent (for URL resolution)
+       movie* parent = target->get_parent();
+       assert(parent);
 
        //
        // Extract root movie URL 
        // @@ could be cached somewhere...
        //
-       as_value target_url;
-       if ( ! target->get_member("_url", &target_url) )
+       as_value parent_url;
+       if ( ! parent->get_member("_url", &parent_url) )
        {
-               log_msg("FIXME: no _url member in target!");
+               log_msg("FIXME: no _url member in target parent!");
        }
 
-       log_msg(" target._url: %s\n", target_url.to_string());
-
-       if (target == NULL)
-       {
-               //log_error("target doesn't exist:\n");
-               fn.result->set_bool(false);
-               return;    
-       }
+       log_msg(" target's parent url: %s\n", parent_url.to_string());
 
        //
        // Resolve relative urls
@@ -258,7 +271,7 @@
        // wrap in a try/catch block w/out hiding
        // the variable inside the block.
        //
-       URL url(tu_url.c_str(), URL(target_url.to_string()));
+       URL url(tu_url.c_str(), URL(parent_url.to_string()));
        
        log_msg(" resolved url: %s\n", url.str().c_str());
                         
@@ -362,7 +375,7 @@
                float ratio = tar->get_ratio();
                uint16_t clip_depth = tar->get_clip_depth();
 
-               movie* parent = tar->get_parent();
+               //movie* parent = tar->get_parent();
                movie* new_movie = 
static_cast<movie*>(extern_movie)->get_root_movie();
 
                assert(parent != NULL);




reply via email to

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