gnash-commit
[Top][All Lists]
Advanced

[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:
 




reply via email to

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