gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...


From: Bastiaan Jacques
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
Date: Thu, 22 Mar 2007 16:56:36 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Bastiaan Jacques <bjacques>     07/03/22 16:56:36

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp as_object.h 
                         button_character_instance.cpp character.cpp 
                         character.h sprite_instance.cpp 

Log message:
                * server/as_object.cpp: in set_member_default(), only setValue()
                on properties that aren't read-only. Add an init_property()
                method specifically for read-only properties which takes only
                a setter. Also add a method asPropName() that converts property
                names to lowercase, which is a very common pattern in this
                class.
                * server/button_character_instance.cpp,
                server/character{.cpp, .h}, server/character_instance.cpp:
                Use the new init_property() for read-only properties. Don't
                check if read-only properties are being set in getters.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2673&r2=1.2674
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.43&r2=1.44
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.199&r2=1.200

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2673
retrieving revision 1.2674
diff -u -b -r1.2673 -r1.2674
--- ChangeLog   22 Mar 2007 13:19:04 -0000      1.2673
+++ ChangeLog   22 Mar 2007 16:56:36 -0000      1.2674
@@ -1,3 +1,16 @@
+2007-03-22 Bastiaan Jacques <address@hidden>
+
+       * server/as_object.cpp: in set_member_default(), only setValue()
+       on properties that aren't read-only. Add an init_property()
+       method specifically for read-only properties which takes only
+       a setter. Also add a method asPropName() that converts property
+       names to lowercase, which is a very common pattern in this
+       class.
+       * server/button_character_instance.cpp,
+       server/character{.cpp, .h}, server/character_instance.cpp:
+       Use the new init_property() for read-only properties. Don't
+       check if read-only properties are being set in getters.
+
 2007-03-22 Sandro Santilli <address@hidden>
 
        * server/asobj/Number.cpp: don't attach Number interface

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- server/as_object.cpp        20 Mar 2007 15:01:20 -0000      1.43
+++ server/as_object.cpp        22 Mar 2007 16:56:36 -0000      1.44
@@ -198,9 +198,16 @@
                try 
                {
                        //log_msg("Found a getter/setter property for key %s", 
key.c_str());
-                       // TODO: have setValue check for read-only property 
-                       //       and warn if failed
+                       if (prop->isReadOnly())
+                       {
+                               IF_VERBOSE_ASCODING_ERRORS(
+                                       log_aserror("Attempt to set read-only 
property '%s'",
+                                                   key.c_str());
+                               );
+                       } else
+                       {
                        prop->setValue(*this, val);
+                       }
                        return;
                }
                catch (ActionException& exc)
@@ -290,6 +297,34 @@
        assert(success);
 }
 
+void
+as_object::init_property(const std::string& key, as_function& getter)
+{
+       init_property(key, getter, getter);
+
+       as_prop_flags& flags = getOwnProperty(key)->getFlags();
+
+       // ActionScript must not change the flags of this builtin property.
+       flags.set_is_protected(true);
+
+       // Make the property read-only; that is, the default no-op handler will
+       // be triggered when ActionScript tries to set it.
+       flags.set_read_only();
+}
+
+std::string
+as_object::asPropName(std::string name)
+{
+       std::string orig = name;
+       if ( _vm.getSWFVersion() < 7 )
+       {
+               boost::to_lower(orig, _vm.getLocale());
+       }
+
+       return orig;
+}
+
+
 bool
 as_object::set_member_flags(const std::string& name,
                int setTrue, int setFalse)

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- server/as_object.h  20 Mar 2007 15:57:56 -0000      1.49
+++ server/as_object.h  22 Mar 2007 16:56:36 -0000      1.50
@@ -213,6 +213,18 @@
        void init_property(const std::string& key, as_function& getter,
                as_function& setter);
 
+       /// \brief
+       /// Use this method for read-only properties.
+       //
+       /// This method achieves the same as the above init_property method.
+       /// Additionally, it sets the property as read-only so that a default
+       /// handler will be triggered when ActionScript attempts to set the
+       /// property.
+       /// 
+       /// The arguments are the same as the above init_property arguments,
+       /// although the setter argument is omitted.
+       void init_property(const std::string& key, as_function& getter);
+
        /// Get a member as_value by name
        //
        /// The default behaviour is to call set_member_default,
@@ -401,6 +413,8 @@
        ///
        void set_prototype(boost::intrusive_ptr<as_object> proto);
        
+       std::string asPropName(std::string name);
+       
        /// @{ Common ActionScript methods for characters
        /// TODO: make protected
 

Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- server/button_character_instance.cpp        20 Mar 2007 15:01:20 -0000      
1.35
+++ server/button_character_instance.cpp        22 Mar 2007 16:56:36 -0000      
1.36
@@ -179,11 +179,11 @@
        gettersetter = new builtin_function(&character::yscale_getset, NULL);
        o.init_property("_yscale", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&character::xmouse_getset, NULL);
-       o.init_property("_xmouse", *gettersetter, *gettersetter);
+       gettersetter = new builtin_function(&character::xmouse_get, NULL);
+       o.init_property("_xmouse", *gettersetter);
 
-       gettersetter = new builtin_function(&character::ymouse_getset, NULL);
-       o.init_property("_ymouse", *gettersetter, *gettersetter);
+       gettersetter = new builtin_function(&character::ymouse_get, NULL);
+       o.init_property("_ymouse", *gettersetter);
 
        gettersetter = new builtin_function(&character::alpha_getset, NULL);
        o.init_property("_alpha", *gettersetter, *gettersetter);

Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- server/character.cpp        20 Mar 2007 15:01:20 -0000      1.26
+++ server/character.cpp        22 Mar 2007 16:56:36 -0000      1.27
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: character.cpp,v 1.26 2007/03/20 15:01:20 strk Exp $ */
+/* $Id: character.cpp,v 1.27 2007/03/22 16:56:36 bjacques Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -536,13 +536,10 @@
 }
 
 as_value
-character::xmouse_getset(const fn_call& fn)
+character::xmouse_get(const fn_call& fn)
 {
        boost::intrusive_ptr<character> ptr = 
ensureType<character>(fn.this_ptr);
 
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
                // Local coord of mouse IN PIXELS.
                int x, y, buttons;
                VM::get().getRoot().get_mouse_state(x, y, buttons);
@@ -554,25 +551,14 @@
                        
                m.transform_by_inverse(&b, a);
 
-               rv = as_value(TWIPS_TO_PIXELS(b.m_x));
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_xmouse'");
-               );
-       }
-       return rv;
+       return as_value(TWIPS_TO_PIXELS(b.m_x));
 }
 
 as_value
-character::ymouse_getset(const fn_call& fn)
+character::ymouse_get(const fn_call& fn)
 {
        boost::intrusive_ptr<character> ptr = 
ensureType<character>(fn.this_ptr);
 
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
                // Local coord of mouse IN PIXELS.
                int x, y, buttons;
                VM::get().getRoot().get_mouse_state(x, y, buttons);
@@ -584,15 +570,7 @@
                        
                m.transform_by_inverse(&b, a);
 
-               rv = as_value(TWIPS_TO_PIXELS(b.m_y));
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_ymouse'");
-               );
-       }
-       return rv;
+       return as_value(TWIPS_TO_PIXELS(b.m_y));
 }
 
 as_value
@@ -727,21 +705,13 @@
 {
        boost::intrusive_ptr<character> ptr = 
ensureType<character>(fn.this_ptr);
 
-       as_value rv;
-       if ( fn.nargs == 0 ) // getter
-       {
                boost::intrusive_ptr<as_object> p = ptr->get_parent();
-               if ( p )
+       as_value rv;
+       if (p)
                {
                        rv = as_value(p);
                }
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_parent'");
-               );
-       }
+
        return rv;
 }
 

Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- server/character.h  19 Mar 2007 17:11:14 -0000      1.58
+++ server/character.h  22 Mar 2007 16:56:36 -0000      1.59
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: character.h,v 1.58 2007/03/19 17:11:14 bjacques Exp $ */
+/* $Id: character.h,v 1.59 2007/03/22 16:56:36 bjacques Exp $ */
 
 #ifndef GNASH_CHARACTER_H
 #define GNASH_CHARACTER_H
@@ -169,9 +169,9 @@
 
        static as_value yscale_getset(const fn_call& fn);
 
-       static as_value xmouse_getset(const fn_call& fn);
+       static as_value xmouse_get(const fn_call& fn);
 
-       static as_value ymouse_getset(const fn_call& fn);
+       static as_value ymouse_get(const fn_call& fn);
 
        static as_value alpha_getset(const fn_call& fn);
 

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.199
retrieving revision 1.200
diff -u -b -r1.199 -r1.200
--- server/sprite_instance.cpp  21 Mar 2007 11:01:57 -0000      1.199
+++ server/sprite_instance.cpp  22 Mar 2007 16:56:36 -0000      1.200
@@ -1066,79 +1066,35 @@
 
 
 static as_value
-sprite_currentframe_getset(const fn_call& fn)
+sprite_currentframe_get(const fn_call& fn)
 {
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                return as_value(ptr->get_current_frame() + 1);
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property 
'_currentframe'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
-sprite_totalframes_getset(const fn_call& fn)
+sprite_totalframes_get(const fn_call& fn)
 {
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                return as_value(ptr->get_frame_count());
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_totalframes'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
-sprite_framesloaded_getset(const fn_call& fn)
+sprite_framesloaded_get(const fn_call& fn)
 {
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                return as_value(ptr->get_loaded_frames());
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property 
'_framesloaded'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
-sprite_target_getset(const fn_call& fn)
+sprite_target_get(const fn_call& fn)
 {
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                return as_value(ptr->getTargetPath().c_str());
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_target'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
@@ -1176,8 +1132,6 @@
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
        UNUSED(ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                static bool warned = false;
                if ( ! warned )
                {
@@ -1194,15 +1148,6 @@
                {
                        return as_value();
                }
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_droptarget'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
@@ -1210,18 +1155,7 @@
 {
        boost::intrusive_ptr<sprite_instance> ptr = 
ensureType<sprite_instance>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
                return as_value(ptr->get_movie_definition()->get_url().c_str());
-       }
-       else // setter
-       {
-               IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror("Attempt to set read-only property '_url'");
-               );
-       }
-
-       return as_value();
 }
 
 static as_value
@@ -1367,6 +1301,7 @@
        gettersetter = new builtin_function(&character::x_getset, NULL);
        o.init_property("_x", *gettersetter, *gettersetter);
 
+
        gettersetter = new builtin_function(&character::y_getset, NULL);
        o.init_property("_y", *gettersetter, *gettersetter);
 
@@ -1376,11 +1311,11 @@
        gettersetter = new builtin_function(&character::yscale_getset, NULL);
        o.init_property("_yscale", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&character::xmouse_getset, NULL);
-       o.init_property("_xmouse", *gettersetter, *gettersetter);
+       gettersetter = new builtin_function(&character::xmouse_get, NULL);
+       o.init_property("_xmouse", *gettersetter);
 
-       gettersetter = new builtin_function(&character::ymouse_getset, NULL);
-       o.init_property("_ymouse", *gettersetter, *gettersetter);
+       gettersetter = new builtin_function(&character::ymouse_get, NULL);
+       o.init_property("_ymouse", *gettersetter);
 
        gettersetter = new builtin_function(&character::alpha_getset, NULL);
        o.init_property("_alpha", *gettersetter, *gettersetter);
@@ -1400,16 +1335,16 @@
        gettersetter = new builtin_function(&character::parent_getset, NULL);
        o.init_property("_parent", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&sprite_currentframe_getset, NULL);
+       gettersetter = new builtin_function(&sprite_currentframe_get, NULL);
        o.init_property("_currentframe", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&sprite_totalframes_getset, NULL);
+       gettersetter = new builtin_function(&sprite_totalframes_get, NULL);
        o.init_property("_totalframes", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&sprite_framesloaded_getset, NULL);
+       gettersetter = new builtin_function(&sprite_framesloaded_get, NULL);
        o.init_property("_framesloaded", *gettersetter, *gettersetter);
 
-       gettersetter = new builtin_function(&sprite_target_getset, NULL);
+       gettersetter = new builtin_function(&sprite_target_get, NULL);
        o.init_property("_target", *gettersetter, *gettersetter);
 
        gettersetter = new builtin_function(&sprite_name_getset, NULL);




reply via email to

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