gnash-commit
[Top][All Lists]
Advanced

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

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


From: Zou Lunkai
Subject: [Gnash-commit] gnash/server dlist.cpp sprite_instance.cpp
Date: Wed, 22 Aug 2007 04:54:57 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Zou Lunkai <zoulunkai>  07/08/22 04:54:57

Modified files:
        server         : dlist.cpp sprite_instance.cpp 

Log message:
        * server/dlist.cpp, server/sprite_instance.cpp: handle hiden characters 
as masks, passed UdoG's test files.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.cpp?cvsroot=gnash&r1=1.76&r2=1.77
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.309&r2=1.310

Patches:
Index: dlist.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.cpp,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- dlist.cpp   21 Aug 2007 11:22:17 -0000      1.76
+++ dlist.cpp   22 Aug 2007 04:54:56 -0000      1.77
@@ -771,12 +771,23 @@
         character* ch = it->get();
         assert(ch);
 
-        if (ch->get_visible() == false)
+        // Check if this charater or any of its parents is a mask.
+        // Characters act as masks should always be rendered to the
+        // mask buffer despite their visibility.
+        character * parent = ch->get_parent();
+        bool renderAsMask = ch->isMask();
+        while(!renderAsMask && parent)
         {
-            // avoid stale old_invalidated_rect
+            renderAsMask = parent->isMask();
+            parent = parent->get_parent();
+        }
+        
+        // check for non-mask hiden characters
+        if( !renderAsMask && (ch->get_visible() == false))
+        {
+            // Avoid stale old_invalidated_rect
             ch->clear_invalidated(); 
-            // Don't display.
-            // TODO: test invisible characters as masks
+            // Don't display non-mask hiden characters
             continue;
         }
     

Index: sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.309
retrieving revision 1.310
diff -u -b -r1.309 -r1.310
--- sprite_instance.cpp 17 Aug 2007 18:02:35 -0000      1.309
+++ sprite_instance.cpp 22 Aug 2007 04:54:56 -0000      1.310
@@ -2723,14 +2723,13 @@
 {
        //GNASH_REPORT_FUNCTION;
 
-       if (get_visible() == false)
-       {
-               // We're invisible, so don't display!
-               
-               // Note: dlist.cpp will avoid to even call display() so this 
will probably
-               // never happen.
-               return;
-       }
+       // Note: 
+       // DisplayList::Display() will take care of the visibility checking.
+       //
+       // Whether a character should be rendered or not is dependent on its 
paraent.
+       // i.e. if its parent is a mask, this character should be rendered to 
the mask
+       // buffer even it is invisible.
+       //
        
        // check if the sprite (and it's childs) needs to be drawn
        InvalidatedRanges ranges;




reply via email to

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