gnash-commit
[Top][All Lists]
Advanced

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

Re: [Gnash-commit] gnash ChangeLog server/edit_text_character.cpp ...


From: zou lunkai
Subject: Re: [Gnash-commit] gnash ChangeLog server/edit_text_character.cpp ...
Date: Wed, 2 Apr 2008 14:17:52 +0800

>                * server/edit_text_character.{cpp,h}: always register
>                  the variable name, just don't set a value for it
>                  unless we have one defined.
>                * server/sprite_instance.cpp (get_member): don't use
>                  a registered textfield variable if there's no text
>                  defined for the corresponding textfield.

Seems not a clean way to go. All variables have values, even if you
don't set them, they should have default values. How do you
distinguish variables with no value and variables with default
value(undefined, null, etc)?

I'll test this soon later. I still insist that textField variables
with no initial value provided will not be registered:)

--zou


On 4/2/08, Sandro Santilli <address@hidden> wrote:
> CVSROOT:        /sources/gnash
> Module name:    gnash
> Changes by:     Sandro Santilli <strk>  08/04/01 18:51:31
>
> Modified files:
>        .              : ChangeLog
>        server         : edit_text_character.cpp edit_text_character.h
>                         sprite_instance.cpp
>
> Log message:
>                * server/edit_text_character.{cpp,h}: always register
>                  the variable name, just don't set a value for it
>                  unless we have one defined.
>                * server/sprite_instance.cpp (get_member): don't use
>                  a registered textfield variable if there's no text
>                  defined for the corresponding textfield.
>
> CVSWeb URLs:
> http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6140&r2=1.6141
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.160&r2=1.161
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.h?cvsroot=gnash&r1=1.71&r2=1.72
> http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.493&r2=1.494
>
> Patches:
> Index: ChangeLog
> ===================================================================
> RCS file: /sources/gnash/gnash/ChangeLog,v
> retrieving revision 1.6140
> retrieving revision 1.6141
> diff -u -b -r1.6140 -r1.6141
> --- ChangeLog   1 Apr 2008 18:36:21 -0000       1.6140
> +++ ChangeLog   1 Apr 2008 18:51:29 -0000       1.6141
> @@ -1,5 +1,14 @@
>  2008-04-01 Sandro Santilli <address@hidden>
>
> +       * server/edit_text_character.{cpp,h}: always register
> +         the variable name, just don't set a value for it
> +         unless we have one defined.
> +       * server/sprite_instance.cpp (get_member): don't use
> +         a registered textfield variable if there's no text
> +         defined for the corresponding textfield.
> +
> +2008-04-01 Sandro Santilli <address@hidden>
> +
>        * server/sprite_instance.{cpp,h}: streamline headers inclusion.
>        * server/edit_text_character.{cpp,h}: keep note about whether
>          text is defined, and don't register the text variable until
>
> Index: server/edit_text_character.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
> retrieving revision 1.160
> retrieving revision 1.161
> diff -u -b -r1.160 -r1.161
> --- server/edit_text_character.cpp      1 Apr 2008 18:36:21 -0000       1.160
> +++ server/edit_text_character.cpp      1 Apr 2008 18:51:30 -0000       1.161
> @@ -419,9 +419,10 @@
>        if ( _textDefined )
>        {
>                
> setTextValue(utf8::decodeCanonicalString(m_def->get_default_text(), version));
> -               registerTextVariable();
>        }
>
> +       registerTextVariable();
> +
>        m_dummy_style.push_back(fill_style());
>
>        reset_bounding_box(0, 0);
> @@ -1583,20 +1584,12 @@
>  void
>  edit_text_character::registerTextVariable()
>  {
> -//#define DEBUG_DYNTEXT_VARIABLES 1
> +#define DEBUG_DYNTEXT_VARIABLES 1
>
>  #ifdef DEBUG_DYNTEXT_VARIABLES
>        log_debug(_("registerTextVariable() called"));
>  #endif
>
> -       if ( ! _textDefined )
> -       {
> -#ifdef DEBUG_DYNTEXT_VARIABLES
> -               log_debug(_("registerTextVariable() no-op call (has no 
> text)"));
> -#endif
> -               return;
> -       }
> -
>        if ( _text_variable_registered )
>        {
>  #ifdef DEBUG_DYNTEXT_VARIABLES
> @@ -1642,16 +1635,23 @@
>                // as_environment& env = get_environment();
>                setTextValue(utf8::decodeCanonicalString(val.to_string(), 
> version));
>        }
> -       else
> +       else if ( _textDefined )
>        {
>                as_value newVal = as_value(utf8::encodeCanonicalString(_text, 
> version));
>  #ifdef DEBUG_DYNTEXT_VARIABLES
>                log_debug(_("target sprite (%s @ %p) does NOT have a member 
> named %s (no problem, we'll add it with value %s)"),
> -                       typeName(*target).c_str(), (void*)target, 
> _vm.getStringTable().value(key).c_str(),
> -                       newVal.to_debug_string().c_str());
> +                       typeName(*target), (void*)target, 
> _vm.getStringTable().value(key),
> +                       newVal.to_debug_string());
>  #endif
>                target->set_member(key, newVal);
>        }
> +       else
> +       {
> +#ifdef DEBUG_DYNTEXT_VARIABLES
> +               log_debug(_("target sprite (%s @ %p) does NOT have a member 
> named %s, and we don't have text defined"),
> +                       typeName(*target), (void*)target, 
> _vm.getStringTable().value(key));
> +#endif
> +       }
>
>        sprite_instance* sprite = target->to_movie();
>
> @@ -1660,7 +1660,7 @@
>                // add the textfield variable to the target sprite
>                // TODO: have set_textfield_variable take a string_table::key 
> instead ?
>  #ifdef DEBUG_DYNTEXT_VARIABLES
> -               log_debug("Calling set_textfield_variable(%s) against sprite 
> %s", _vm.getStringTable().value(key).c_str(), sprite->getTarget().c_str());
> +               log_debug("Calling set_textfield_variable(%s) against sprite 
> %s", _vm.getStringTable().value(key), sprite->getTarget());
>  #endif
>                
> sprite->set_textfield_variable(_vm.getStringTable().value(key), this);
>
>
> Index: server/edit_text_character.h
> ===================================================================
> RCS file: /sources/gnash/gnash/server/edit_text_character.h,v
> retrieving revision 1.71
> retrieving revision 1.72
> diff -u -b -r1.71 -r1.72
> --- server/edit_text_character.h        1 Apr 2008 18:36:21 -0000       1.71
> +++ server/edit_text_character.h        1 Apr 2008 18:51:30 -0000       1.72
> @@ -115,8 +115,8 @@
>        /// Return value of our text.
>        std::string get_text_value() const;
>
> -       /// Return true if this TextField has text defined
> -       bool getTextDefined();
> +       /// Return true if text is defined
> +       bool getTextDefined() const { return _textDefined; }
>
>        /// We have a "text" member.
>        void set_member(string_table::key name, const as_value& val,
>
> Index: server/sprite_instance.cpp
> ===================================================================
> RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
> retrieving revision 1.493
> retrieving revision 1.494
> diff -u -b -r1.493 -r1.494
> --- server/sprite_instance.cpp  1 Apr 2008 18:36:22 -0000       1.493
> +++ server/sprite_instance.cpp  1 Apr 2008 18:51:30 -0000       1.494
> @@ -2375,11 +2375,13 @@
>     for (TextFieldPtrVect::const_iterator i=etc->begin(), e=etc->end(); i!=e; 
> ++i)
>     {
>        TextFieldPtr tf = *i;
> +       if ( tf->getTextDefined() )
> +       {
>        val->set_string(tf->get_text_value());
> -       // break ?
> -    }
>     return true;
>   }
> +    }
> +  }
>
>   return false;
>
>
>
> _______________________________________________
> Gnash-commit mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/gnash-commit
>




reply via email to

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