gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash/server dlist.cpp dlist.h sprite_instance....


From: Vitaly Alexeev
Subject: [Gnash-commit] gnash/server dlist.cpp dlist.h sprite_instance....
Date: Wed, 20 Sep 2006 11:44:20 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Vitaly Alexeev <alexeev>        06/09/20 11:44:20

Modified files:
        server         : dlist.cpp dlist.h sprite_instance.cpp 
                         sprite_instance.h 

Log message:
        added swapDepths() method

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.cpp?cvsroot=gnash&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.h?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.22&r2=1.23

Patches:
Index: dlist.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- dlist.cpp   26 Aug 2006 02:08:31 -0000      1.24
+++ dlist.cpp   20 Sep 2006 11:44:19 -0000      1.25
@@ -368,6 +368,17 @@
        _characters.clear();
 }
        
+void DisplayList::swap_characters(character* ch1, character* ch2)
+{
+       container_type::iterator it1 = find(_characters.begin(), 
_characters.end(), ch1);
+       container_type::iterator it2 = find(_characters.begin(), 
_characters.end(), ch2);
+
+       if (it1 != _characters.end() && it2 != _characters.end())
+       {
+               iter_swap(it1, it2);
+       }
+}
+       
 void DisplayList::clear_unaffected(std::vector<uint16>& affected_depths)
 {
        //GNASH_REPORT_FUNCTION;

Index: dlist.h
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- dlist.h     25 Aug 2006 18:44:21 -0000      1.8
+++ dlist.h     20 Sep 2006 11:44:19 -0000      1.9
@@ -124,6 +124,7 @@
                float ratio,
                uint16_t clip_depth);
 
+       void swap_characters(character* ch, character* ch2);
 
        /// Updates the transform properties of the object at
        /// the specified depth.

Index: sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- sprite_instance.cpp 19 Sep 2006 17:45:32 -0000      1.51
+++ sprite_instance.cpp 20 Sep 2006 11:44:19 -0000      1.52
@@ -117,6 +117,62 @@
        sprite->set_play_state(movie_interface::STOP);
 }
 
+//swapDepths(target:Object) : Void
+static void sprite_swap_depths(const fn_call& fn)
+{
+       assert(dynamic_cast<sprite_instance*>(fn.this_ptr));
+       sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
+       if (sprite == NULL)
+       {
+           sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
+       }
+       assert(sprite);
+       
+       if (fn.nargs != 1)
+       {
+           log_error("swapDepths needs one arg\n");
+           return;
+       }
+
+       sprite_instance* target;
+       if (fn.arg(0).get_type() == as_value::OBJECT)
+       {
+               target = (sprite_instance*) fn.arg(0).to_object();
+       }
+       else
+       if (fn.arg(0).get_type() == as_value::NUMBER)
+       {
+               int target_depth = int(fn.arg(0).to_number());
+               sprite_instance* parent = (sprite_instance*) 
sprite->get_parent();
+               target = (sprite_instance*) 
parent->get_character_at_depth(target_depth);
+       }
+       else
+       {
+    log_error("swapDepths has received invalid arg\n");
+               return;
+       }
+
+       if (sprite == NULL || target == NULL)
+       {
+    log_error("It is impossible to swap NULL character\n");
+               return;
+       }
+
+       if (sprite->get_parent() == target->get_parent() && 
sprite->get_parent() != NULL)
+       {
+               int target_depth = target->get_depth();
+               target->set_depth(sprite->get_depth());
+               sprite->set_depth(target_depth);
+
+               sprite_instance* parent = (sprite_instance*) 
sprite->get_parent();
+               parent->swap_characters(sprite, target);
+       }
+       else
+       {
+    log_error("MovieClips should have the same parent\n");
+       }
+}
+
 //duplicateMovieClip(name:String, depth:Number, [initObject:Object]) : 
MovieClip
 static void sprite_duplicate_movieclip(const fn_call& fn)
 {
@@ -568,17 +624,22 @@
        as_builtins.set_member("hitTest", &sprite_hit_test);
        as_builtins.set_member("createTextField", &sprite_create_text_field);
        as_builtins.set_member("duplicateMovieClip", 
&sprite_duplicate_movieclip);
+       as_builtins.set_member("swapDepths", &sprite_swap_depths);
 
        // @TODO
        //as_builtins.set_member("startDrag", &sprite_start_drag);
        //as_builtins.set_member("stopDrag", &sprite_stop_drag);
        //as_builtins.set_member("getURL", &sprite_get_url);
-       //as_builtins.set_member("swapDepths", &sprite_swap_depths);
        // ... many more, see MovieClip class ...
 
        done=true;
 }
 
+character* sprite_instance::get_character_at_depth(int depth)
+{
+       return m_display_list.get_character_at_depth(depth);
+}
+
 // Set *val to the value of the named member and
 // return true, if we have the named member.
 // Otherwise leave *val alone and return false.
@@ -1701,6 +1762,11 @@
        do_display_callback();
 }
 
+void sprite_instance::swap_characters(character* ch1, character* ch2)
+{
+       m_display_list.swap_characters(ch1, ch2);
+}
+
 character*
 sprite_instance::add_display_object(
                uint16_t character_id,

Index: sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- sprite_instance.h   28 Aug 2006 11:14:20 -0000      1.22
+++ sprite_instance.h   20 Sep 2006 11:44:19 -0000      1.23
@@ -259,6 +259,9 @@
        /// Display (render?) this Sprite/MovieClip, unless invisible
        void    display();
 
+       void swap_characters(character* ch1, character* ch2);
+       character* get_character_at_depth(int depth);
+
        /// Add an object to the DisplayList. 
        //
        /// @param replace_if_dept_is_occupied




reply via email to

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