gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...
Date: Thu, 27 Sep 2007 10:44:45 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/09/27 10:44:45

Modified files:
        .              : ChangeLog 
        server         : movie_root.cpp movie_root.h 

Log message:
                * server/movie_root.{cpp,h}: add the concept of an 'invalidated'
                  stage/movie_root. The Stage is only invalidated when the 
background
                  color changes, dunno if it should also be invalidated by 
changes
                  in the _levels.. maybe I'm using a confusing terminology 
here...
                  Anyway this fixes bug #21169 and probably allow for cleanups
                  in the gui code, where some paranoia is used to tell the first
                  ::display call apart from subsequent, exactly for the 
invalidated
                  bounds on startup problem.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4440&r2=1.4441
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.99&r2=1.100
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.76&r2=1.77

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4440
retrieving revision 1.4441
diff -u -b -r1.4440 -r1.4441
--- ChangeLog   27 Sep 2007 09:27:40 -0000      1.4440
+++ ChangeLog   27 Sep 2007 10:44:45 -0000      1.4441
@@ -1,5 +1,16 @@
 2007-09-27 Sandro Santilli <address@hidden>
 
+       * server/movie_root.{cpp,h}: add the concept of an 'invalidated'
+         stage/movie_root. The Stage is only invalidated when the background
+         color changes, dunno if it should also be invalidated by changes
+         in the _levels.. maybe I'm using a confusing terminology here...
+         Anyway this fixes bug #21169 and probably allow for cleanups 
+         in the gui code, where some paranoia is used to tell the first
+         ::display call apart from subsequent, exactly for the invalidated
+         bounds on startup problem.
+
+2007-09-27 Sandro Santilli <address@hidden>
+
        * server/movie_root.cpp (restart): rework restart mechanism
          by actually re-instantiating the root from it's definition.
 

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- server/movie_root.cpp       27 Sep 2007 09:27:41 -0000      1.99
+++ server/movie_root.cpp       27 Sep 2007 10:44:45 -0000      1.100
@@ -79,7 +79,8 @@
        m_active_input_text(NULL),
        m_time_remainder(0.0f),
        m_drag_state(),
-       _allowRescale(true)
+       _allowRescale(true),
+       _invalidated(true)
 {
 }
 
@@ -212,15 +213,8 @@
        // Run the garbage collector again
        GC::get().collect();
 #endif
-}
 
-void
-movie_root::clear_invalidated()
-{
-       for (Levels::iterator i=_movies.begin(), e=_movies.end(); i!=e; ++i)
-       {
-               i->second->clear_invalidated();
-       }
+       setInvalidated();
 }
 
 boost::intrusive_ptr<Stage>
@@ -727,6 +721,8 @@
        // should we cache this ? it's immutable after all !
        const rect& frame_size = getLevel(0)->get_frame_size();
 
+       clearInvalidated();
+
        render::begin_display(
                m_background_color,
                m_viewport_x0, m_viewport_y0,
@@ -1063,6 +1059,12 @@
 void
 movie_root::add_invalidated_bounds(InvalidatedRanges& ranges, bool force)
 {
+       if ( isInvalidated() )
+       {
+               ranges.setWorld();
+               return;
+       }
+
        for (Levels::reverse_iterator i=_movies.rbegin(), e=_movies.rend(); 
i!=e; ++i)
        {
                i->second->add_invalidated_bounds(ranges, force);
@@ -1310,5 +1312,31 @@
        std::for_each(_liveChars.begin(), _liveChars.end(), 
boost::bind(advanceLiveChar, _1, delta_time));
 }
 
+void
+movie_root::set_background_color(const rgba& color)
+{
+       //GNASH_REPORT_FUNCTION;
+
+        if ( m_background_color != color )
+       {
+               setInvalidated();
+               m_background_color = color;
+       }
+}
+
+void
+movie_root::set_background_alpha(float alpha)
+{
+       //GNASH_REPORT_FUNCTION;
+
+       uint8_t newAlpha = iclamp(frnd(alpha * 255.0f), 0, 255);
+
+        if ( m_background_color.m_a != newAlpha )
+       {
+               setInvalidated();
+               m_background_color.m_a = newAlpha;
+       }
+}
+
 } // namespace gnash
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- server/movie_root.h 13 Sep 2007 16:26:13 -0000      1.76
+++ server/movie_root.h 27 Sep 2007 10:44:45 -0000      1.77
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: movie_root.h,v 1.76 2007/09/13 16:26:13 strk Exp $ */
+/* $Id: movie_root.h,v 1.77 2007/09/27 10:44:45 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -422,15 +422,9 @@
         return getLevel(0)->get_character(character_id);
     }
 
-    void set_background_color(const rgba& color)
-    {
-        m_background_color = color;
-    }
+    void set_background_color(const rgba& color);
 
-    void set_background_alpha(float alpha)
-    {
-        m_background_color.m_a = iclamp(frnd(alpha * 255.0f), 0, 255);
-    }
+    void set_background_alpha(float alpha);
 
     float get_background_alpha() const
     {
@@ -537,9 +531,6 @@
 
     bool testInvariant() const;
 
-    // Clear invalidated flag for all levels 
-    void clear_invalidated();
-
     /// Push an executable code to the ActionQueue
     void pushAction(std::auto_ptr<ExecutableCode> code);
 
@@ -753,6 +744,30 @@
     ///
     boost::intrusive_ptr<key_as_object> getKeyObject();
 
+    /// Boundaries of the Stage are always world boundaries
+    /// and are only invalidated by changes in the background
+    /// color.
+    void setInvalidated() { _invalidated=true; }
+
+    /// Every ::display call clears the invalidated flag
+    //
+    /// See setInvalidated();
+    ///
+    void clearInvalidated() { _invalidated=false; }
+
+    /// An invalidated stage will trigger complete redraw
+    //
+    /// So, this method should return true everytime a complete
+    /// redraw is needed. This is tipically only needed when
+    /// the background changes.
+    ///
+    /// See setInvalidated() and clearInvalidated().
+    ///
+    bool isInvalidated() { return _invalidated; }
+
+    /// See setInvalidated
+    bool _invalidated;
+
 };
 
 




reply via email to

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