[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash/server dlist.cpp dlist.h sprite_instance....,
Vitaly Alexeev <=