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; _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit