[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/dlist.cpp server/dlist.h...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/dlist.cpp server/dlist.h... |
Date: |
Wed, 10 Jan 2007 11:21:50 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/01/10 11:21:50
Modified files:
. : ChangeLog
server : dlist.cpp dlist.h sprite_instance.cpp
sprite_instance.h
Log message:
* server/dlist.{h,cpp}: added sort() method to resort
when depth of characters is externally changed.
* server/sprite_instance.{h,cpp}: simplified state save
of frame0 displaylist, with the side-effect of properly
keeping ref-counting of frame0 character instances.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2070&r2=1.2071
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.cpp?cvsroot=gnash&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.h?cvsroot=gnash&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.120&r2=1.121
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.53&r2=1.54
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2070
retrieving revision 1.2071
diff -u -b -r1.2070 -r1.2071
--- ChangeLog 10 Jan 2007 00:09:56 -0000 1.2070
+++ ChangeLog 10 Jan 2007 11:21:50 -0000 1.2071
@@ -1,5 +1,13 @@
2007-01-10 Sandro Santilli <address@hidden>
+ * server/dlist.{h,cpp}: added sort() method to resort
+ when depth of characters is externally changed.
+ * server/sprite_instance.{h,cpp}: simplified state save
+ of frame0 displaylist, with the side-effect of properly
+ keeping ref-counting of frame0 character instances.
+
+2007-01-10 Sandro Santilli <address@hidden>
+
* libbase/: extension.cpp, sharedlib.cpp: hush compiler warnings
about unused parameters.
* server/asobj/Global.cpp (ctor): stubbed organization of
Index: server/dlist.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- server/dlist.cpp 2 Jan 2007 03:43:12 -0000 1.42
+++ server/dlist.cpp 10 Jan 2007 11:21:50 -0000 1.43
@@ -639,6 +639,23 @@
}
+
+/// This method is not in the header in the hope DisplayItemDepthLess
+/// will be inlined by compiler
+
+struct DisplayItemDepthLess {
+ bool operator() (const DisplayItem& d1, const DisplayItem& d2)
+ {
+ return d1->get_depth() < d2->get_depth();
+ }
+};
+
+void
+DisplayList::sort()
+{
+ _characters.sort(DisplayItemDepthLess());
+}
+
} // namespace gnash
Index: server/dlist.h
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/dlist.h 2 Jan 2007 03:43:12 -0000 1.21
+++ server/dlist.h 10 Jan 2007 11:21:50 -0000 1.22
@@ -229,6 +229,19 @@
///
int getNextHighestDepth() const;
+ /// Sort list by depth (lower depths first)
+ //
+ /// You only need calling this method if depth
+ /// of characters on the list has been externally
+ /// changed. Usually it is DisplayList itself
+ /// assigning depths, so won't need to call it.
+ ///
+ /// A notable use for this is backing up a specific
+ /// state and restoring it later. Restore step would
+ /// need reordering.
+ ///
+ void sort ();
+
private:
typedef std::list<DisplayItem> container_type;
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.120
retrieving revision 1.121
diff -u -b -r1.120 -r1.121
--- server/sprite_instance.cpp 9 Jan 2007 23:30:37 -0000 1.120
+++ server/sprite_instance.cpp 10 Jan 2007 11:21:50 -0000 1.121
@@ -1140,31 +1140,6 @@
}
};
-/// A DisplayList visitor used to collect character pointers into a vector
-//
-class CharsAdder {
-
- std::vector<character*>& _chars;
-
-public:
-
- /// Initialize by passing the vector to be initialized
- //
- /// Consider using DisplayList::size() to reserve the
- /// appropriate number of slots in the vector !
- ///
- CharsAdder(std::vector<character*>& chars)
- :
- _chars(chars)
- {}
-
- bool operator() (character* ch)
- {
- _chars.push_back(ch);
- return true;
- }
-};
-
//------------------------------------------------
// sprite_instance
//------------------------------------------------
@@ -2206,7 +2181,11 @@
if ( frame == 0 && has_looped() )
{
- m_display_list.clear_except(_init_chars);
+ // Resort frame0 DisplayList as depth of
+ // characters in it might have been
+ // externally changed.
+ _frame0_chars.sort();
+ m_display_list = _frame0_chars;
}
// Execute this frame's init actions, if necessary.
@@ -2263,12 +2242,8 @@
if ( frame == 0 && ! has_looped() )
{
- _init_chars.reserve(m_display_list.size());
- CharsAdder adder(_init_chars);
- // the const_cast is just to avoid defining a const version
- // of DisplayList::visitForward, CharsAdder will NOT
- // modify the DisplayList elements in any way
- const_cast<DisplayList&>(m_display_list).visitForward(adder);
+ // Save DisplayList state
+ _frame0_chars = m_display_list;
}
testInvariant();
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- server/sprite_instance.h 2 Jan 2007 03:43:12 -0000 1.53
+++ server/sprite_instance.h 10 Jan 2007 11:21:50 -0000 1.54
@@ -17,7 +17,7 @@
//
//
-/* $Id: sprite_instance.h,v 1.53 2007/01/02 03:43:12 strk Exp $ */
+/* $Id: sprite_instance.h,v 1.54 2007/01/10 11:21:50 strk Exp $ */
// Stateful live Sprite instance
@@ -230,11 +230,10 @@
/// Execution of 1st frame tags is specially handled:
///
/// - After executing them for the first time
- /// the _init_chars vector is initialized.
+ /// the DisplayList state is saved.
///
/// - Before subsequent executions (loop mode)
- /// the DisplayList is cleared of all but chars
- /// in the _init_chars vector.
+ /// the DisplayList is restored from saved state.
///
/// @param frame
/// Frame number. 0-based
@@ -679,13 +678,12 @@
///
static bool sameEvents(const Events& eventsMap, const SWFEventsVector&
eventsVect);
- /// \brief
- /// Characters placed to the DisplayList by control tags in first frame.
+ /// The DisplayList resulting by execution of tags in first frame.
//
- /// These are the only ones that do not get automatically removed from
- /// the DisplayList on restart. See execute_frame_tags.
+ /// It will be used to reinitialized actual DisplayList on restart.
+ /// See execute_frame_tags.
///
- std::vector<character*> _init_chars;
+ DisplayList _frame0_chars;
protected: