[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_... |
Date: |
Tue, 08 Apr 2008 21:59:24 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 08/04/08 21:59:24
Modified files:
. : ChangeLog
server : as_object.cpp as_object.h
edit_text_character.cpp sprite_instance.cpp
testsuite/actionscript.all: TextField.as
Log message:
* server/as_object.{cpp,h}: add init_readonly_property taking
string_table::key directly.
* server/sprite_instance.cpp (attachMovieClipProperties): use
named
strings to avoid 22 string_table lookups for each created
sprite.
* server/edit_text_character.cpp: parseAutoSizeValue must be
case-insensitive; implement TextField.length.
* testsuite/actionscript.all/TextField.as: successes
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6222&r2=1.6223
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.114&r2=1.115
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.103&r2=1.104
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.163&r2=1.164
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.497&r2=1.498
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/TextField.as?cvsroot=gnash&r1=1.50&r2=1.51
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6222
retrieving revision 1.6223
diff -u -b -r1.6222 -r1.6223
--- ChangeLog 8 Apr 2008 20:33:30 -0000 1.6222
+++ ChangeLog 8 Apr 2008 21:59:22 -0000 1.6223
@@ -1,5 +1,15 @@
2008-04-08 Sandro Santilli <address@hidden>
+ * server/as_object.{cpp,h}: add init_readonly_property taking
+ string_table::key directly.
+ * server/sprite_instance.cpp (attachMovieClipProperties): use named
+ strings to avoid 22 string_table lookups for each created sprite.
+ * server/edit_text_character.cpp: parseAutoSizeValue must be
+ case-insensitive; implement TextField.length.
+ * testsuite/actionscript.all/TextField.as: successes
+
+2008-04-08 Sandro Santilli <address@hidden>
+
* testsuite/misc-ming.all/DefineEditTextTest.c: more tests
for _parent, _xscale, _yscale, _xmouse and _ymouse.
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -b -r1.114 -r1.115
--- server/as_object.cpp 7 Apr 2008 18:25:42 -0000 1.114
+++ server/as_object.cpp 8 Apr 2008 21:59:23 -0000 1.115
@@ -818,6 +818,15 @@
}
void
+as_object::init_readonly_property(const string_table::key& k, as_function&
getter,
+ int initflags, string_table::key nsname)
+{
+ init_property(k, getter, getter, initflags | as_prop_flags::readOnly
+ | as_prop_flags::isProtected, nsname);
+ assert(_members.getProperty(k, nsname));
+}
+
+void
as_object::init_readonly_property(const std::string& key, as_c_function_ptr
getter,
int initflags, string_table::key nsname)
{
@@ -828,6 +837,15 @@
assert(_members.getProperty(k, nsname));
}
+void
+as_object::init_readonly_property(const string_table::key& k,
as_c_function_ptr getter,
+ int initflags, string_table::key nsname)
+{
+ init_property(k, getter, getter, initflags | as_prop_flags::readOnly
+ | as_prop_flags::isProtected, nsname);
+ assert(_members.getProperty(k, nsname));
+}
+
std::string
as_object::asPropName(string_table::key name)
{
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -b -r1.103 -r1.104
--- server/as_object.h 5 Apr 2008 10:19:26 -0000 1.103
+++ server/as_object.h 8 Apr 2008 21:59:23 -0000 1.104
@@ -527,6 +527,10 @@
int
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum,
string_table::key nsname = 0);
+ void init_readonly_property(const string_table::key& key, as_function&
getter,
+ int
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum,
+ string_table::key nsname = 0);
+
/// \brief
/// Use this method for read-only properties.
//
@@ -545,6 +549,10 @@
int
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum,
string_table::key nsname = 0);
+ void init_readonly_property(const string_table::key& key,
as_c_function_ptr getter,
+ int
flags=as_prop_flags::dontDelete|as_prop_flags::dontEnum,
+ string_table::key nsname = 0);
+
/// \brief
/// Add a watch trigger, overriding any other defined for same name.
//
Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -b -r1.163 -r1.164
--- server/edit_text_character.cpp 8 Apr 2008 20:23:34 -0000 1.163
+++ server/edit_text_character.cpp 8 Apr 2008 21:59:23 -0000 1.164
@@ -87,6 +87,7 @@
static as_value textfield_wordWrap_getset(const fn_call& fn);
static as_value textfield_html_getset(const fn_call& fn);
static as_value textfield_selectable_getset(const fn_call& fn);
+static as_value textfield_length_getset(const fn_call& fn);
//
@@ -338,6 +339,8 @@
o.init_property("html", *getset, *getset);
getset = new builtin_function(textfield_selectable_getset);
o.init_property("selectable", *getset, *getset);
+ getset = new builtin_function(textfield_length_getset);
+ o.init_property("length", *getset, *getset);
if ( target_version < 7 ) return;
@@ -2042,6 +2045,26 @@
}
static as_value
+textfield_length_getset(const fn_call& fn)
+{
+ boost::intrusive_ptr<edit_text_character> ptr =
ensureType<edit_text_character>(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ const std::string& s = ptr->get_text_value();
+ return as_value(s.length()); // TOCHECK: utf-8 ?
+ }
+ else // setter
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set length property of TextField
%s"), ptr->getTarget());
+ );
+ }
+
+ return as_value();
+}
+
+static as_value
textfield_autoSize_getset(const fn_call& fn)
{
boost::intrusive_ptr<edit_text_character> ptr =
ensureType<edit_text_character>(fn.this_ptr);
@@ -2105,15 +2128,17 @@
edit_text_character::AutoSizeValue
edit_text_character::parseAutoSizeValue(const std::string& val)
{
- if ( val == "left" )
+ StringNoCaseEqual cmp;
+
+ if ( cmp(val, "left") )
{
return autoSizeLeft;
}
- if ( val == "right" )
+ if ( cmp(val, "right") )
{
return autoSizeRight;
}
- if ( val == "center" )
+ if ( cmp(val, "center") )
{
return autoSizeCenter;
}
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.497
retrieving revision 1.498
diff -u -b -r1.497 -r1.498
--- server/sprite_instance.cpp 4 Apr 2008 10:51:54 -0000 1.497
+++ server/sprite_instance.cpp 8 Apr 2008 21:59:23 -0000 1.498
@@ -2036,70 +2036,70 @@
as_c_function_ptr gettersetter;
gettersetter = character::x_getset;
- o.init_property("_x", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uX, gettersetter, gettersetter);
gettersetter = character::y_getset;
- o.init_property("_y", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uY, gettersetter, gettersetter);
gettersetter = character::xscale_getset;
- o.init_property("_xscale", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uXSCALE, gettersetter, gettersetter);
gettersetter = character::yscale_getset;
- o.init_property("_yscale", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uYSCALE, gettersetter, gettersetter);
gettersetter = character::xmouse_get;
- o.init_readonly_property("_xmouse", gettersetter);
+ o.init_readonly_property(NSV::PROP_uXMOUSE, gettersetter);
gettersetter = character::ymouse_get;
- o.init_readonly_property("_ymouse", gettersetter);
+ o.init_readonly_property(NSV::PROP_uYMOUSE, gettersetter);
gettersetter = character::alpha_getset;
- o.init_property("_alpha", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uALPHA, gettersetter, gettersetter);
gettersetter = character::visible_getset;
- o.init_property("_visible", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uVISIBLE, gettersetter, gettersetter);
gettersetter = character::width_getset;
- o.init_property("_width", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uWIDTH, gettersetter, gettersetter);
gettersetter = character::height_getset;
- o.init_property("_height", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uHEIGHT, gettersetter, gettersetter);
gettersetter = character::rotation_getset;
- o.init_property("_rotation", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uROTATION, gettersetter, gettersetter);
gettersetter = character::parent_getset;
- o.init_property("_parent", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uPARENT, gettersetter, gettersetter);
gettersetter = sprite_currentframe_get;
- o.init_property("_currentframe", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uCURRENTFRAME, gettersetter, gettersetter);
gettersetter = sprite_totalframes_get;
- o.init_property("_totalframes", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uTOTALFRAMES, gettersetter, gettersetter);
gettersetter = sprite_framesloaded_get;
- o.init_property("_framesloaded", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uFRAMESLOADED, gettersetter, gettersetter);
gettersetter = character::target_getset;
- o.init_property("_target", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uTARGET, gettersetter, gettersetter);
gettersetter = character::name_getset;
- o.init_property("_name", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uNAME, gettersetter, gettersetter);
gettersetter = sprite_droptarget_getset;
- o.init_property("_droptarget", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uDROPTARGET, gettersetter, gettersetter);
gettersetter = sprite_url_getset;
- o.init_property("_url", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uURL, gettersetter, gettersetter);
gettersetter = sprite_highquality_getset;
- o.init_property("_highquality", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uHIGHQUALITY, gettersetter, gettersetter);
gettersetter = sprite_focusrect_getset;
- o.init_property("_focusrect", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uFOCUSRECT, gettersetter, gettersetter);
gettersetter = sprite_soundbuftime_getset;
- o.init_property("_soundbuftime", gettersetter, gettersetter);
+ o.init_property(NSV::PROP_uSOUNDBUFTIME, gettersetter, gettersetter);
}
Index: testsuite/actionscript.all/TextField.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/TextField.as,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- testsuite/actionscript.all/TextField.as 8 Apr 2008 20:23:35 -0000
1.50
+++ testsuite/actionscript.all/TextField.as 8 Apr 2008 21:59:24 -0000
1.51
@@ -20,7 +20,7 @@
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: TextField.as,v 1.50 2008/04/08 20:23:35 strk Exp $";
+rcsid="$Id: TextField.as,v 1.51 2008/04/08 21:59:24 strk Exp $";
#include "check.as"
#if OUTPUT_VERSION > 5
@@ -58,7 +58,7 @@
check( !TextField.prototype.hasOwnProperty('hscroll') );
xcheck( !TextField.prototype.hasOwnProperty('html') );
check( !TextField.prototype.hasOwnProperty('htmlText') );
-check( !TextField.prototype.hasOwnProperty('length') );
+xcheck( !TextField.prototype.hasOwnProperty('length') );
check( !TextField.prototype.hasOwnProperty('maxChars') );
check( !TextField.prototype.hasOwnProperty('maxhscroll') );
check( !TextField.prototype.hasOwnProperty('maxscroll') );
@@ -133,7 +133,7 @@
xcheck( TextField.prototype.hasOwnProperty('hscroll') );
check( TextField.prototype.hasOwnProperty('html') );
xcheck( TextField.prototype.hasOwnProperty('htmlText') );
-xcheck( TextField.prototype.hasOwnProperty('length') );
+check( TextField.prototype.hasOwnProperty('length') );
xcheck( TextField.prototype.hasOwnProperty('maxChars') );
xcheck( TextField.prototype.hasOwnProperty('maxhscroll') );
xcheck( TextField.prototype.hasOwnProperty('maxscroll') );
@@ -149,6 +149,7 @@
check( TextField.prototype.hasOwnProperty('type') );
check( TextField.prototype.hasOwnProperty('variable') );
check( TextField.prototype.hasOwnProperty('wordWrap') );
+check( TextField.prototype.hasOwnProperty('length') );
check( ! TextField.prototype.hasOwnProperty('valueOf') );
check( ! TextField.prototype.hasOwnProperty('toString') );
@@ -180,7 +181,7 @@
tf.autoSize = o;
check_equals(tf.autoSize, 'center'); // toString is called for object args
tf.autoSize = 'lEft';
-xcheck_equals(tf.autoSize, 'left'); // arg is not case sensitive
+check_equals(tf.autoSize, 'left'); // arg is not case sensitive
tf.autoSize = new Boolean(true);
check_equals(tf.autoSize, 'none'); // a Boolean is the same as any other object
@@ -311,18 +312,20 @@
tf.text = "Hello world";
check_equals(tf.htmlText, 'Hello world');
+//-------------------------------------------------------------------------
// Check TextField.length (number of characters in text)
+//-------------------------------------------------------------------------
-xcheck_equals(typeof(tf.length), 'number');
+check_equals(typeof(tf.length), 'number');
check(!tf.hasOwnProperty('length'));
tf.text = "";
-xcheck_equals(tf.length, 0);
+check_equals(tf.length, 0);
tf.length = 10; // you don't change lenght like this, you assign to text
instead
-xcheck_equals(tf.length, 0);
+check_equals(tf.length, 0);
tf.text = "Hello world";
-xcheck_equals(tf.length, 11);
+check_equals(tf.length, 11);
tf.htmlText = "Hello <b>world</b>";
-xcheck_equals(tf.length, 18); // the tags are also counted
+check_equals(tf.length, 18); // the tags are also counted
// Check TextField.maxChars
@@ -514,7 +517,7 @@
check_equals(tf.text, 'Hello World');
tf.text = "hello world";
check_equals(tf.text, 'hello world');
-xcheck_equals(tf.length, 11); // number of characters in "hello world"
+check_equals(tf.length, 11); // number of characters in "hello world"
// Check TextField.textColor
@@ -847,9 +850,9 @@
#if OUTPUT_VERSION < 8
- check_totals(397);
-#else
check_totals(398);
+#else
+ check_totals(399);
#endif
#else // OUTPUT_VERSION <= 5