[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/character.h server/movie...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/character.h server/movie... |
Date: |
Wed, 26 Dec 2007 12:35:14 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/12/26 12:35:14
Modified files:
. : ChangeLog
server : character.h movie_instance.cpp
sprite_instance.cpp sprite_instance.h
testsuite/actionscript.all: MovieClip.as MovieClipLoader.as
Log message:
Implement MovieClip._lockroot.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5260&r2=1.5261
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.118&r2=1.119
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_instance.cpp?cvsroot=gnash&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.421&r2=1.422
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.161&r2=1.162
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClip.as?cvsroot=gnash&r1=1.110&r2=1.111
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClipLoader.as?cvsroot=gnash&r1=1.10&r2=1.11
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5260
retrieving revision 1.5261
diff -u -b -r1.5260 -r1.5261
--- ChangeLog 26 Dec 2007 10:43:51 -0000 1.5260
+++ ChangeLog 26 Dec 2007 12:35:12 -0000 1.5261
@@ -1,5 +1,12 @@
2007-12-26 Sandro Santilli <address@hidden>
+ * server/: movie_instance.cpp, sprite_instance.{cpp,h}:
+ Implement _lockroot
+ * testsuite/actionscript.all/: MovieClip.as, MovieClipLoader.as:
+ Update expected results.
+
+2007-12-26 Sandro Santilli <address@hidden>
+
* testsuite/swfdec/gen_run_swfdec_testsuite.sh: skip tests requiring
user interaction (see task #7556).
* testsuite/actionscript.all/MovieClip.as: add test for _lockroot
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -b -r1.118 -r1.119
--- server/character.h 23 Dec 2007 22:29:56 -0000 1.118
+++ server/character.h 26 Dec 2007 12:35:13 -0000 1.119
@@ -19,7 +19,7 @@
//
//
-/* $Id: character.h,v 1.118 2007/12/23 22:29:56 strk Exp $ */
+/* $Id: character.h,v 1.119 2007/12/26 12:35:13 strk Exp $ */
#ifndef GNASH_CHARACTER_H
#define GNASH_CHARACTER_H
@@ -723,12 +723,14 @@
else return false;
}
- /// Return the "relative" root of this character
+ /// Return the relative or absolute root of this character
//
/// The "relative" is the movie_instance created by
/// the same SWF definition that contained the
/// definition of this character.
///
+ /// The "absolute" is top of parent's tree.
+ ///
/// TODO: what about programmatically created characters ?
/// which would their "relative" root be ?
///
Index: server/movie_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_instance.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- server/movie_instance.cpp 19 Dec 2007 20:40:31 -0000 1.22
+++ server/movie_instance.cpp 26 Dec 2007 12:35:13 -0000 1.23
@@ -51,8 +51,6 @@
//GNASH_REPORT_FUNCTION;
- assert ( get_root()->get_root() == this );
-
//_def->stopLoader();
// Load first frame (1-based index)
@@ -75,8 +73,6 @@
{
//GNASH_REPORT_FUNCTION;
- assert ( get_root()->get_root() == this );
-
//_def->stopLoader();
// Load next frame if available (+2 as m_current_frame is 0-based)
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.421
retrieving revision 1.422
diff -u -b -r1.421 -r1.422
--- server/sprite_instance.cpp 26 Dec 2007 08:04:59 -0000 1.421
+++ server/sprite_instance.cpp 26 Dec 2007 12:35:13 -0000 1.422
@@ -1536,6 +1536,9 @@
o.init_member("getSWFVersion", new
builtin_function(sprite_getSWFVersion));
o.init_member("enabled", true); // see MovieClip.as testcase
+ gettersetter = new builtin_function(&sprite_instance::lockroot_getset,
NULL);
+ o.init_property("_lockroot", *gettersetter, *gettersetter); // see
MovieClip.as testcase
+
if ( target_version < 6 ) return;
// SWF6 or higher
@@ -1789,6 +1792,9 @@
m_has_mouse_event(false),
_text_variables(),
m_sound_stream_id(-1),
+ _userCxform(),
+ _droptarget(),
+ _lockroot(false),
m_def(def)
{
assert(m_def != NULL);
@@ -1846,11 +1852,10 @@
//
if (name_key == NSV::PROP_uROOT)
{
- //if ( isUnloaded() ) return false; // see
movieclip_destruction_test3.sc
// Let ::get_root() take care of _lockroot
- val->set_as_object( get_root() );
-
+ movie_instance* relRoot = get_root();
+ val->set_as_object( relRoot );
return true;
}
@@ -3584,6 +3589,9 @@
url.parse_querystring(url.querystring(), vars);
extern_movie->setVariables(vars);
+ // Set lockroot to our value of it
+ extern_movie->set_member( PROP_uLOCKROOT, getLockRoot() );
+
save_extern_movie(extern_movie.get());
const char* name = get_name().c_str();
@@ -3618,6 +3626,7 @@
assert(get_ref_count() > 1);
#endif // ndef GNASH_USE_GC
+ // how about lockRoot here ?
root.loadLevel(level, url); // extern_movie.get());
}
@@ -3899,4 +3908,48 @@
return cf;
}
+movie_instance*
+sprite_instance::get_root() const
+{
+ movie_instance* relRoot = m_root;
+ character* rootParent = relRoot->get_parent();
+ if ( rootParent )
+ {
+ // if the relative root has a parent we descend
+ // to it unless SWF version of relRoot is >= 7
+ // AND _lockroot is true
+ if ( relRoot->getSWFVersion() >= 7 )
+ {
+ //string_table& st = _vm.getStringTable();
+ //as_value lockRoot =
relRoot->getMember(st.find("_lockroot"));
+ //if ( lockRoot.to_bool() )
+ if ( relRoot->getLockRoot() )
+ {
+ return relRoot;
+ }
+ }
+
+ return rootParent->get_root();
+ }
+ return relRoot;
+}
+
+as_value
+sprite_instance::lockroot_getset(const fn_call& fn)
+{
+ boost::intrusive_ptr<sprite_instance> ptr =
ensureType<sprite_instance>(fn.this_ptr);
+
+ as_value rv;
+ if ( fn.nargs == 0 ) // getter
+ {
+ rv.set_bool(ptr->getLockRoot());
+ }
+ else // setter
+ {
+ ptr->setLockRoot(fn.arg(0).to_bool());
+ }
+ return rv;
+
+}
+
} // namespace gnash
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -b -r1.161 -r1.162
--- server/sprite_instance.h 23 Dec 2007 22:29:57 -0000 1.161
+++ server/sprite_instance.h 26 Dec 2007 12:35:13 -0000 1.162
@@ -113,13 +113,14 @@
virtual void has_mouse_event();
/// \brief
- /// Return this sprite's relative root as
+ /// Return this sprite's root as
/// specified at contruction time
+ //
+ /// Relative or absolute is determined by
+ /// the _lockroot property, see getLockRoot
+ /// and setLockRoot.
///
- virtual movie_instance* get_root() const
- {
- return m_root;
- }
+ virtual movie_instance* get_root() const;
/// \brief
/// Return the sprite_definition (or movie_definition)
@@ -839,6 +840,19 @@
///
void constructAsScriptObject();
+
+ /// Return true if get_root() should return the *relative* root,
+ /// false otherwise.
+ bool getLockRoot() const { return _lockroot; }
+
+ /// Set whether get_root() should return the *relative* root,
+ /// false otherwise. True for relative root.
+ ///
+ void setLockRoot(bool lr) { _lockroot=lr; }
+
+ /// Getter-setter for MovieClip._lockroot
+ static as_value lockroot_getset(const fn_call& fn);
+
private:
/// Register this sprite as a listener of core broadcasters
@@ -1022,6 +1036,8 @@
std::string _droptarget;
+ bool _lockroot;
+
protected:
void place_character(character* ch, int depth,
Index: testsuite/actionscript.all/MovieClip.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClip.as,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -b -r1.110 -r1.111
--- testsuite/actionscript.all/MovieClip.as 26 Dec 2007 10:50:19 -0000
1.110
+++ testsuite/actionscript.all/MovieClip.as 26 Dec 2007 12:35:13 -0000
1.111
@@ -20,7 +20,7 @@
// compile this test case with Ming makeswf, and then
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: MovieClip.as,v 1.110 2007/12/26 10:50:19 strk Exp $";
+rcsid="$Id: MovieClip.as,v 1.111 2007/12/26 12:35:13 strk Exp $";
#include "check.as"
@@ -83,7 +83,7 @@
#if OUTPUT_VERSION >= 6
check(MovieClip.prototype.hasOwnProperty('loadMovie'));
-xcheck(MovieClip.prototype.hasOwnProperty('_lockroot'));
+check(MovieClip.prototype.hasOwnProperty('_lockroot'));
check(!MovieClip.prototype.hasOwnProperty('loadMovieNum'));
check(!MovieClip.prototype.hasOwnProperty('valueOf'));
check(!MovieClip.prototype.hasOwnProperty('toString'));
@@ -256,14 +256,14 @@
check(mc._ymouse != undefined);
check(mc._yscale != undefined);
check_equals(typeof(MovieClip.prototype._lockroot), 'undefined');
-xcheck_equals(typeof(mc._lockroot), 'boolean');
-xcheck_equals(mc._lockroot, false);
+check_equals(typeof(mc._lockroot), 'boolean');
+check_equals(mc._lockroot, false);
mc._lockroot = 56;
-xcheck_equals(typeof(mc._lockroot), 'boolean');
-xcheck_equals(mc._lockroot, true);
+check_equals(typeof(mc._lockroot), 'boolean');
+check_equals(mc._lockroot, true);
mc._lockroot = "";
-xcheck_equals(typeof(mc._lockroot), 'boolean');
-xcheck_equals(mc._lockroot, false);
+check_equals(typeof(mc._lockroot), 'boolean');
+check_equals(mc._lockroot, false);
#if OUTPUT_VERSION > 5
check_equals(mc._name, "");
@@ -349,7 +349,7 @@
xcheck(!mc.hasOwnProperty("_soundbuftime"));
xcheck(!mc.hasOwnProperty("_focusrect"));
xcheck(!mc.hasOwnProperty("_framesloaded"));
-xcheck(!mc.hasOwnProperty("_lockroot"));
+check(!mc.hasOwnProperty("_lockroot"));
xcheck(!mc.hasOwnProperty("_highquality"));
#endif //if OUTPUT_VERSION >= 6
Index: testsuite/actionscript.all/MovieClipLoader.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClipLoader.as,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- testsuite/actionscript.all/MovieClipLoader.as 25 Dec 2007 18:56:06
-0000 1.10
+++ testsuite/actionscript.all/MovieClipLoader.as 26 Dec 2007 12:35:14
-0000 1.11
@@ -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.10 2007/12/25 18:56:06 strk Exp $";
+rcsid="$Id: MovieClipLoader.as,v 1.11 2007/12/26 12:35:14 strk Exp $";
#include "check.as"
@@ -234,13 +234,14 @@
{
with (target)
{
+ note("_lockroot: "+_lockroot);
note("---- Target's root is "+_root);
- xcheck_equals(_root, _level0);
+ check_equals(_root, _level0);
_lockroot = true;
- check_equals(_root, _level0.loadtarget);
+ xcheck_equals(_root, _level0.loadtarget); // no idea
why this fails, could be due to the assignment above doing unexpected things
(assigning to pre-rebound dangling char ref?)..
note("---- After setting _lockroot to true, target's
root is "+_root);
_lockroot = false;
- xcheck_equals(_root, _level0);
+ check_equals(_root, _level0);
note("---- After setting _lockroot to false, target's
root is "+_root);
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/character.h server/movie...,
Sandro Santilli <=