CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/12/19 18:40:07
Modified files: . : ChangeLog server : edit_text_character.cpp edit_text_character.h testsuite/actionscript.all: TextField.as Log message: implement TextField.removeTextField(). CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5219&r2=1.5220 http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.138&r2=1.139 http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.h?cvsroot=gnash&r1=1.61&r2=1.62 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/TextField.as?cvsroot=gnash&r1=1.37&r2=1.38 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.5219 retrieving revision 1.5220 diff -u -b -r1.5219 -r1.5220 --- ChangeLog 19 Dec 2007 16:38:48 -0000 1.5219 +++ ChangeLog 19 Dec 2007 18:40:06 -0000 1.5220 @@ -1,5 +1,12 @@ 2007-12-18 Sandro Santilli <[EMAIL PROTECTED]> + * server/edit_text_character.{cpp,h}: + implement removeTextField(). + * testsuite/actionscript.all/TextField.as: update expected + results (2 xpass, 2 fail - used to suceed by luck). + +2007-12-18 Sandro Santilli <[EMAIL PROTECTED]> + * testsuite/actionscript.all/TextField.as: add tests for TextField soft references (unimplemented in Gnash). Index: server/edit_text_character.cpp =================================================================== RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v retrieving revision 1.138 retrieving revision 1.139 diff -u -b -r1.138 -r1.139 --- server/edit_text_character.cpp 19 Dec 2007 09:40:54 -0000 1.138 +++ server/edit_text_character.cpp 19 Dec 2007 18:40:07 -0000 1.139 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: edit_text_character.cpp,v 1.138 2007/12/19 09:40:54 strk Exp $ */ +/* $Id: edit_text_character.cpp,v 1.139 2007/12/19 18:40:07 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -267,11 +267,12 @@ textfield_removeTextField(const fn_call& fn) { boost::intrusive_ptr<edit_text_character> text = ensureType<edit_text_character>(fn.this_ptr); - UNUSED(text); + + text->removeTextField(); static bool warned = false; if ( ! warned ) { - log_unimpl("TextField.removeTextField()"); + log_debug("TextField.removeTextField() TESTING"); warned = true; } @@ -458,6 +459,36 @@ } void +edit_text_character::removeTextField() +{ + int depth = get_depth(); + if ( depth < 0 || depth > 1048575 ) + { + //IF_VERBOSE_ASCODING_ERRORS( + log_debug(_("CHECKME: removeTextField(%s): TextField depth (%d) out of the " + "'dynamic' zone [0..1048575], won't remove"), + getTarget().c_str(), depth); + //); + return; + } + + character* parent = get_parent(); + assert(parent); // every TextField must have a parent, right ? + + sprite_instance* parentSprite = parent->to_movie(); + + if ( ! parentSprite ) + { + log_error("FIXME: attempt to remove a TextField being a child of a %s", typeName(*parent).c_str()); + return; + } + + // second argument is arbitrary, see comments above + // the function declaration in sprite_instance.h + parentSprite->remove_display_object(depth, 0); +} + +void edit_text_character::show_cursor(const matrix& mat) { boost::uint16_t x = static_cast<boost::uint16_t>(m_xcursor); Index: server/edit_text_character.h =================================================================== RCS file: /sources/gnash/gnash/server/edit_text_character.h,v retrieving revision 1.61 retrieving revision 1.62 diff -u -b -r1.61 -r1.62 --- server/edit_text_character.h 18 Dec 2007 23:39:59 -0000 1.61 +++ server/edit_text_character.h 19 Dec 2007 18:40:07 -0000 1.62 @@ -278,6 +278,16 @@ return isSelectable(); } + /// Remove this textfield from the stage + // + /// This is to implement TextField.removeTextField, will + /// basically forward the request to its parent. + /// Eventually this and sprite_instance::removeMovieClip + /// will be merged in a single function to be later used + /// also for AS3 removeChild(). + /// + void removeTextField(); + private: /// Set focus Index: testsuite/actionscript.all/TextField.as =================================================================== RCS file: /sources/gnash/gnash/testsuite/actionscript.all/TextField.as,v retrieving revision 1.37 retrieving revision 1.38 diff -u -b -r1.37 -r1.38 --- testsuite/actionscript.all/TextField.as 19 Dec 2007 16:38:49 -0000 1.37 +++ testsuite/actionscript.all/TextField.as 19 Dec 2007 18:40:07 -0000 1.38 @@ -19,7 +19,7 @@ // compile this test case with Ming makeswf, and then // execute it like this gnash -1 -r 0 -v out.swf -rcsid="$Id: TextField.as,v 1.37 2007/12/19 16:38:49 strk Exp $"; +rcsid="$Id: TextField.as,v 1.38 2007/12/19 18:40:07 strk Exp $"; #include "check.as" @@ -609,19 +609,19 @@ check_equals(softref.prop, 5); check_equals(softref.getDepth(), 23); hardref.removeTextField(); -xcheck_equals(typeof(hardref), 'undefined'); +check_equals(typeof(hardref), 'undefined'); xcheck_equals(typeof(softref), 'movieclip'); // becomes a movieclip ?? xcheck_equals(typeof(softref.prop), 'undefined'); createEmptyMovieClip("hardref", 24); -xcheck_equals(typeof(hardref), 'movieclip'); +check_equals(typeof(hardref), 'movieclip'); hardref.prop = 7; xcheck_equals(typeof(softref), 'movieclip'); -check_equals(softref.prop, 7); +xcheck_equals(softref.prop, 7); hardref.removeMovieClip(); createTextField("hardref", 25, 10, 10, 160, 200); hardref.prop = 9; check_equals(typeof(softref), 'object'); // changes type on rebind -check_equals(softref.prop, 9); +xcheck_equals(softref.prop, 9); //------------------------------------------------------------------------- _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit