[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/trunk r11531: Strike another blow for re-e
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] /srv/bzr/gnash/trunk r11531: Strike another blow for re-entrancy by removing the overridden get_member |
Date: |
Thu, 01 Oct 2009 12:39:03 +0200 |
User-agent: |
Bazaar (1.16.1) |
------------------------------------------------------------
revno: 11531 [merge]
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Thu 2009-10-01 12:39:03 +0200
message:
Strike another blow for re-entrancy by removing the overridden get_member
and set_member in TextField. This involves implementing the 'magic'
DisplayObject properties (properties not in the inheritance chain) more
correctly.
To do this, the core must know which objects are DisplayObjects. This
is done using a flag rather than relying on RTTI.
Approximately 200 more passes in the testsuite from better TextField
dimensions handling (though it never has been and still is not even
nearly correct) and from correct object properties.
TextFields and Buttons now also gain properties that they should have but
which were absent before.
modified:
libcore/Button.cpp
libcore/DisplayObject.cpp
libcore/DisplayObject.h
libcore/MovieClip.cpp
libcore/TextField.cpp
libcore/TextField.h
libcore/Video.cpp
libcore/as_object.cpp
libcore/as_object.h
libcore/asobj/flash/display/MovieClip_as.cpp
testsuite/actionscript.all/MovieClip.as
testsuite/actionscript.all/TextField.as
testsuite/misc-haxe.all/classes.all/text/TextField_as.hx
testsuite/misc-ming.all/DefineEditTextTest.c
testsuite/misc-ming.all/DeviceFontTest.c
testsuite/misc-ming.all/EmbeddedFontTest.c
testsuite/misc-ming.all/NetStream-SquareTest.c
=== modified file 'libcore/Button.cpp'
--- a/libcore/Button.cpp 2009-08-27 05:46:44 +0000
+++ b/libcore/Button.cpp 2009-09-30 15:20:47 +0000
@@ -252,59 +252,15 @@
return (!ch || (!includeUnloaded && ch->unloaded()));
}
+void
+attachButtonProperties(as_object& o)
+{
+ attachDisplayObjectProperties(o);
+}
+
static void
attachButtonInterface(as_object& o)
{
-
- as_c_function_ptr gettersetter;
-
- o.init_property(NSV::PROP_uQUALITY, DisplayObject::quality,
- DisplayObject::quality);
-
- o.init_property(NSV::PROP_uHIGHQUALITY, DisplayObject::highquality,
- DisplayObject::highquality);
-
- gettersetter = &DisplayObject::x_getset;
- o.init_property(NSV::PROP_uX, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::y_getset;
- o.init_property(NSV::PROP_uY, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::xscale_getset;
- o.init_property(NSV::PROP_uXSCALE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::yscale_getset;
- o.init_property(NSV::PROP_uYSCALE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::xmouse_get;
- o.init_readonly_property(NSV::PROP_uXMOUSE, *gettersetter);
-
- gettersetter = &DisplayObject::ymouse_get;
- o.init_readonly_property(NSV::PROP_uYMOUSE, *gettersetter);
-
- gettersetter = &DisplayObject::alpha_getset;
- o.init_property(NSV::PROP_uALPHA, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::visible_getset;
- o.init_property(NSV::PROP_uVISIBLE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::width_getset;
- o.init_property(NSV::PROP_uWIDTH, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::height_getset;
- o.init_property(NSV::PROP_uHEIGHT, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::rotation_getset;
- o.init_property(NSV::PROP_uROTATION, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::parent_getset;
- o.init_property(NSV::PROP_uPARENT, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::target_getset;
- o.init_property(NSV::PROP_uTARGET, *gettersetter, *gettersetter);
-
- gettersetter = DisplayObject::name_getset;
- o.init_property(NSV::PROP_uNAME, gettersetter, gettersetter);
const int unprotected = 0;
o.init_member(NSV::PROP_ENABLED, true, unprotected);
@@ -324,6 +280,9 @@
set_prototype(getButtonInterface());
+ // TODO: should be done in a creation function.
+ attachButtonProperties(*this);
+
// check up presence Key events
if (_def->hasKeyPressHandler()) {
getRoot(*this).add_key_listener(this);
=== modified file 'libcore/DisplayObject.cpp'
--- a/libcore/DisplayObject.cpp 2009-07-14 06:01:56 +0000
+++ b/libcore/DisplayObject.cpp 2009-10-01 08:50:26 +0000
@@ -34,6 +34,7 @@
#include "namedStrings.h"
#include "gnash.h" // Quality
#include "GnashNumeric.h"
+#include "Global_as.h"
#ifdef USE_SWFTREE
# include "tree.hh"
@@ -55,9 +56,17 @@
const BlendModeMap& getBlendModeMap();
bool blendModeMatches(const BlendModeMap::value_type& val,
const std::string& mode);
+
+ typedef as_value(*Getter)(DisplayObject&);
+ typedef std::map<string_table::key, Getter> Getters;
+ typedef void(*Setter)(DisplayObject&, const as_value&);
+ typedef std::map<string_table::key, Setter> Setters;
+
+ const Getters displayObjectGetters();
+ const Setters displayObjectSetters();
+
}
-
// Define static const members.
const int DisplayObject::lowerAccessibleBound;
const int DisplayObject::upperAccessibleBound;
@@ -92,6 +101,9 @@
{
assert((!parent && m_id == -1) || ((parent) && m_id >= 0));
assert(m_old_invalidated_ranges.isNull());
+
+ // This informs the core that the object is a DisplayObject.
+ setDisplayObject();
}
/*protected static*/
@@ -108,8 +120,7 @@
DisplayObject::getWorldMatrix(bool includeRoot) const
{
SWFMatrix m;
- if (m_parent)
- {
+ if (m_parent) {
m = m_parent->getWorldMatrix(includeRoot);
}
if (m_parent || includeRoot) m.concatenate(getMatrix());
@@ -268,395 +279,9 @@
m_old_invalidated_ranges.add(ranges);
}
-//---------------------------------------------------------------------
-//
-// Shared ActionScript getter-setters
-//
-//---------------------------------------------------------------------
-
-as_value
-DisplayObject::quality(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- movie_root& mr = getRoot(*ptr);
-
- if (!fn.nargs)
- {
- switch (mr.getQuality())
- {
- case QUALITY_BEST:
- return as_value("BEST");
- case QUALITY_HIGH:
- return as_value("HIGH");
- case QUALITY_MEDIUM:
- return as_value("MEDIUM");
- case QUALITY_LOW:
- return as_value("LOW");
- }
- }
-
- /// Setter
-
- if (!fn.arg(0).is_string()) return as_value();
-
- const std::string& q = fn.arg(0).to_string();
-
- StringNoCaseEqual noCaseCompare;
-
- if (noCaseCompare(q, "BEST")) mr.setQuality(QUALITY_BEST);
- else if (noCaseCompare(q, "HIGH")) {
- mr.setQuality(QUALITY_HIGH);
- }
- else if (noCaseCompare(q, "MEDIUM")) {
- mr.setQuality(QUALITY_MEDIUM);
- }
- else if (noCaseCompare(q, "LOW")) {
- mr.setQuality(QUALITY_LOW);
- }
-
- return as_value();
-}
-
-as_value
-DisplayObject::highquality(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- movie_root& mr = getRoot(*ptr);
-
- if (!fn.nargs)
- {
- switch (mr.getQuality())
- {
- case QUALITY_BEST:
- return as_value(2.0);
- case QUALITY_HIGH:
- return as_value(1.0);
- case QUALITY_MEDIUM:
- case QUALITY_LOW:
- return as_value(0.0);
- }
- }
-
- double q = fn.arg(0).to_number();
-
- if (q < 0) mr.setQuality(QUALITY_HIGH);
- else if (q > 2) mr.setQuality(QUALITY_BEST);
- else {
- int i = static_cast<int>(q);
- switch(i)
- {
- case 0:
- mr.setQuality(QUALITY_LOW);
- break;
- case 1:
- mr.setQuality(QUALITY_HIGH);
- break;
- case 2:
- mr.setQuality(QUALITY_BEST);
- break;
- }
- }
-
- return as_value();
-}
-
-
-as_value
-DisplayObject::x_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- SWFMatrix m = ptr->getMatrix();
- rv = as_value(twipsToPixels(m.get_x_translation()));
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._x to %s, refused"),
- ptr->getTarget(), val);
- );
- return rv;
- }
-
- const double newx = val.to_number();
-
- // NaN is skipped, Infinite isn't
- if (isNaN(newx))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._x to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, newx);
- );
- return rv;
- }
-
- SWFMatrix m = ptr->getMatrix();
- // NOTE: infinite_to_zero is wrong here, see
actionscript.all/setProperty.as
- m.set_x_translation(pixelsToTwips(infinite_to_zero(newx)));
- ptr->setMatrix(m); // no need to update caches when only
changing translation
- ptr->transformedByScript(); // m_accept_anim_moves = false;
- }
- return rv;
-
-}
-
-as_value
-DisplayObject::y_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- SWFMatrix m = ptr->getMatrix();
- rv = as_value(twipsToPixels(m.get_y_translation()));
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._y to %s, refused"),
- ptr->getTarget(), val);
- );
- return rv;
- }
-
- const double newy = val.to_number();
-
- // NaN is skipped, infinite isn't
- if (isNaN(newy))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._y to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, newy);
- );
- return rv;
- }
-
- SWFMatrix m = ptr->getMatrix();
- // NOTE: infinite_to_zero is wrong here,
- // see actionscript.all/setProperty.as
- m.set_y_translation(pixelsToTwips(infinite_to_zero(newy)));
- ptr->setMatrix(m); // no need to update caches when only
changing translation
- ptr->transformedByScript(); // m_accept_anim_moves = false;
- }
- return rv;
-
-}
-
-as_value
-DisplayObject::xscale_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- return as_value(ptr->_xscale);
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Handle bogus values
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 on to_number
- if (val.is_undefined() || val.is_null())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._xscale to %s,
refused"),
- ptr->getTarget(), val);
- );
- return as_value();
- }
-
- const double scale_percent = val.to_number();
-
- // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
- if (isNaN(scale_percent))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._xscale to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, scale_percent);
- );
- return as_value();
- }
-
- // input is in percent
- ptr->set_x_scale(scale_percent);
- }
- return rv;
-
-}
-
-as_value
-DisplayObject::yscale_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- return ptr->_yscale;
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null())
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._yscale to %s,
refused"),
- ptr->getTarget(), val);
- );
- return as_value();
- }
-
- const double scale_percent = val.to_number();
-
- // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
- if (isNaN(scale_percent))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._yscale to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, scale_percent);
- );
- return as_value();
- }
-
-
- // input is in percent
- ptr->set_y_scale(scale_percent);
- }
- return rv;
-
-}
-
-as_value
-DisplayObject::xmouse_get(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- // Local coord of mouse IN PIXELS.
- boost::int32_t x, y, buttons;
- getRoot(*ptr).get_mouse_state(x, y, buttons);
-
- SWFMatrix m = ptr->getWorldMatrix();
- point a(pixelsToTwips(x), pixelsToTwips(y));
-
- m.invert().transform(a);
- return as_value(twipsToPixels(a.x));
-}
-
-as_value
-DisplayObject::ymouse_get(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- // Local coord of mouse IN PIXELS.
- boost::int32_t x, y, buttons;
- getRoot(*ptr).get_mouse_state(x, y, buttons);
-
- SWFMatrix m = ptr->getWorldMatrix();
- point a(pixelsToTwips(x), pixelsToTwips(y));
- m.invert().transform(a);
- return as_value(twipsToPixels(a.y));
-}
-
-as_value
-DisplayObject::alpha_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- rv = as_value(ptr->get_cxform().aa / 2.56);
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._alpha to %s,
refused"),
- ptr->getTarget(), val);
- );
- return rv;
- }
-
- // The new internal alpha value is input / 100.0 * 256.
- // We test for finiteness later, but the multiplication
- // won't make any difference.
- const double newAlpha = val.to_number() * 2.56;
-
- // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
- if (isNaN(newAlpha))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._alpha to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, newAlpha);
- );
- return rv;
- }
-
- cxform cx = ptr->get_cxform();
-
- // Overflows are *not* truncated, but set to -32768.
- if (newAlpha > std::numeric_limits<boost::int16_t>::max() ||
- newAlpha < std::numeric_limits<boost::int16_t>::min())
- {
- cx.aa = std::numeric_limits<boost::int16_t>::min();
- }
- else
- {
- cx.aa = static_cast<boost::int16_t>(newAlpha);
- }
-
- ptr->set_cxform(cx);
- ptr->transformedByScript();
- }
- return rv;
-
+void
+attachDisplayObjectProperties(as_object& o)
+{
}
as_value
@@ -728,93 +353,6 @@
}
-
-/// _visible can be set with true/false, but also
-/// 0 and 1.
-as_value
-DisplayObject::visible_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if (!fn.nargs) // getter
- {
- rv = as_value(ptr->visible());
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._visible to %s,
refused"),
- ptr->getTarget(), val);
- );
- return rv;
- }
-
- /// We cast to number and rely (mostly) on C++'s automatic
- /// cast to bool, as string "0" should be converted to
- /// its numeric equivalent, not interpreted as 'true', which
- /// SWF7+ does for strings.
- double d = val.to_number();
-
- // Infinite or NaN is skipped
- if (isInf(d) || isNaN(d))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._visible to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, d);
- );
- return rv;
- }
-
- ptr->set_visible(d);
-
- ptr->transformedByScript();
- }
- return rv;
-
-}
-
-as_value
-DisplayObject::width_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- // Bounds are used for both getter and setter
- rect bounds = ptr->getBounds();
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- SWFMatrix m = ptr->getMatrix();
- m.transform(bounds);
- double w = twipsToPixels( bounds.width() );
- rv = as_value(w);
- }
- else // setter
- {
- const double newwidth = pixelsToTwips(fn.arg(0).to_number());
- if ( newwidth <= 0 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Setting _width=%g of DisplayObject %s
(%s)"),
- newwidth/20, ptr->getTarget(), typeName(*ptr));
- );
- }
-
- ptr->set_width(newwidth);
- }
- return rv;
-}
-
void
DisplayObject::set_visible(bool visible)
{
@@ -830,174 +368,60 @@
}
_visible = visible;
}
+
void
-DisplayObject::set_width(double newwidth)
+DisplayObject::setWidth(double newwidth)
{
- rect bounds = getBounds();
-#if 0
- if ( bounds.is_null() ) {
- log_unimpl("FIXME: when setting _width of null-bounds
DisplayObject it seems we're supposed to change _yscale too (see
MovieClip.as)");
- }
-#endif
+ const rect& bounds = getBounds();
const double oldwidth = bounds.width();
- assert(oldwidth >= 0); // can't be negative can it?
-
- double yscale = std::abs(_yscale / 100.0); // see MovieClip.as. TODO:
this is likely same as m.get_y_scale..
- double xscale = oldwidth ? (newwidth / oldwidth) : 0; // avoid
division by zero
- double rotation = _rotation * PI / 180.0;
-
- SWFMatrix m = getMatrix();
- m.set_scale_rotation(xscale, yscale, rotation);
- setMatrix(m, true); // let caches be updated
+ assert(oldwidth >= 0);
+
+ const double xscale = oldwidth ? (newwidth / oldwidth) : 0;
+ const double rotation = _rotation * PI / 180.0;
+
+ SWFMatrix m = getMatrix();
+ const double yscale = m.get_y_scale();
+ m.set_scale_rotation(xscale, yscale, rotation);
+ setMatrix(m, true);
}
as_value
-DisplayObject::height_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- // Bounds are used for both getter and setter
- rect bounds = ptr->getBounds();
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- SWFMatrix m = ptr->getMatrix();
- m.transform(bounds);
- double h = twipsToPixels(bounds.height());
- rv = as_value(h);
- }
- else // setter
- {
-
- const double newheight = pixelsToTwips(fn.arg(0).to_number());
- if ( newheight <= 0 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Setting _height=%g of DisplayObject %s
(%s)"),
- newheight / 20, ptr->getTarget(),
typeName(*ptr));
- );
- }
-
- ptr->set_height(newheight);
- }
-
- return rv;
-}
-
-void
-DisplayObject::set_height(double newheight)
-{
- const rect bounds = getBounds();
-
-#if 0
- if ( bounds.is_null() ) {
- log_unimpl("FIXME: when setting _height of null-bounds
DisplayObject it seems we're supposed to change _xscale too (see
MovieClip.as)");
- }
-#endif
+getHeight(DisplayObject& o)
+{
+ rect bounds = o.getBounds();
+ const SWFMatrix m = o.getMatrix();
+ m.transform(bounds);
+ return twipsToPixels(bounds.height());
+}
+
+void
+setHeight(DisplayObject& o, const as_value& val)
+{
+ const double newheight = pixelsToTwips(val.to_number());
+ if (newheight <= 0) {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Setting _height=%g of DisplayObject %s (%s)"),
+ newheight / 20, o.getTarget(), typeName(o));
+ );
+ }
+ o.setHeight(newheight);
+}
+
+void
+DisplayObject::setHeight(double newheight)
+{
+ const rect& bounds = getBounds();
+
const double oldheight = bounds.height();
- assert(oldheight >= 0); // can't be negative can it?
+ assert(oldheight >= 0);
- double yscale = oldheight ? (newheight / oldheight) : 0; // avoid division
by zero
- double xscale = _xscale / 100.0;
- double rotation = _rotation * PI / 180.0;
+ const double yscale = oldheight ? (newheight / oldheight) : 0;
+ const double rotation = _rotation * PI / 180.0;
SWFMatrix m = getMatrix();
+ const double xscale = m.get_x_scale();
m.set_scale_rotation(xscale, yscale, rotation);
- setMatrix(m, true); // let caches be updated
-}
-
-as_value
-DisplayObject::rotation_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- as_value rv;
- if ( fn.nargs == 0 ) // getter
- {
- return ptr->_rotation;
- }
- else // setter
- {
- const as_value& val = fn.arg(0);
-
- // Undefined or null are ignored
- // NOTE: we explicitly check is_undefined and is_null
- // because for SWF4 they result in 0 (not NaN)
- // on to_number
- if (val.is_undefined() || val.is_null() )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._rotation to %s,
refused"),
- ptr->getTarget(), val);
- );
- return rv;
- }
-
- // input is in degrees
- double rotation_val = val.to_number();
-
- // NaN is skipped, Infinity isn't
- if (isNaN(rotation_val))
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set %s._rotation to %s "
- "(evaluating to number %g) refused"),
- ptr->getTarget(), val, rotation_val);
- );
- return rv;
- }
-
- ptr->set_rotation(rotation_val);
- }
- return rv;
-}
-
-as_value
-DisplayObject::parent_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- boost::intrusive_ptr<as_object> p = ptr->get_parent();
- as_value rv;
- if (p)
- {
- rv = as_value(p);
- }
- return rv;
-}
-
-as_value
-DisplayObject::target_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
ensureType<DisplayObject>(fn.this_ptr);
-
- return as_value(ptr->getTargetPath());
-}
-
-as_value
-DisplayObject::name_getset(const fn_call& fn)
-{
- boost::intrusive_ptr<DisplayObject> ptr =
- ensureType<DisplayObject>(fn.this_ptr);
-
- if ( fn.nargs == 0 ) // getter
- {
- const std::string& name = ptr->get_name();
- if ( getSWFVersion(*ptr) < 6 && name.empty() )
- {
- return as_value();
- }
- else
- {
- return as_value(name);
- }
- }
- else // setter
- {
- ptr->set_name(fn.arg(0).to_string().c_str());
- }
-
- return as_value();
+ setMatrix(m, true);
}
void
@@ -1138,6 +562,9 @@
return func;
}
+/// Set the real and cached x scale.
+//
+/// Cached rotation and y scale are not updated.
void
DisplayObject::set_x_scale(double scale_percent)
{
@@ -1167,25 +594,27 @@
transformedByScript();
}
+/// Set the real and cached rotation.
+//
+/// Cached scale values are not updated.
void
DisplayObject::set_rotation(double rot)
{
// Translate to the -180 .. 180 range
- rot = std::fmod (rot, 360.0);
+ rot = std::fmod(rot, 360.0);
if (rot > 180.0) rot -= 360.0;
else if (rot < -180.0) rot += 360.0;
- //log_debug("_rotation: %d", rot);
-
double rotation = rot * PI / 180.0;
- //log_debug("xscale cached: %d, yscale cached: %d", _xscale, _yscale);
-
- // TODO: check if there's any case we should use _yscale here
if (_xscale < 0 ) rotation += PI;
SWFMatrix m = getMatrix();
m.set_rotation(rotation);
+
+ // Update the matrix from the cached x scale to avoid accumulating
+ // errors.
+ m.set_x_scale(std::abs(scaleX() / 100.0));
setMatrix(m); // we update the cache ourselves
_rotation = rot;
@@ -1193,6 +622,10 @@
transformedByScript();
}
+
+/// Set the real and cached y scale.
+//
+/// Cached rotation and x scale are not updated.
void
DisplayObject::set_y_scale(double scale_percent)
{
@@ -1494,9 +927,507 @@
return get_root();
}
+bool
+getDisplayObjectProperty(as_object& obj, string_table::key key,
+ as_value& val)
+{
+
+ const Getters& getters = displayObjectGetters();
+
+ Getters::const_iterator it = getters.find(key);
+ if (it == getters.end()) return false;
+
+ DisplayObject& o = static_cast<DisplayObject&>(obj);
+
+ val = (*it->second)(o);
+ return true;
+}
+
+
+bool
+setDisplayObjectProperty(as_object& obj, string_table::key key,
+ const as_value& val)
+{
+
+ const Setters& setters = displayObjectSetters();
+
+ Setters::const_iterator it = setters.find(key);
+ if (it == setters.end()) return false;
+
+ DisplayObject& o = static_cast<DisplayObject&>(obj);
+
+ Setter s = it->second;
+
+ // Read-only.
+ if (!s) return true;
+
+ if (val.is_undefined() || val.is_null()) {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set property to %s, refused"),
+ o.getTarget(), val);
+ );
+ return true;
+ }
+
+ (*s)(o, val);
+ return true;
+
+}
namespace {
+as_value
+getQuality(DisplayObject& o)
+{
+ movie_root& mr = getRoot(o);
+ switch (mr.getQuality())
+ {
+ case QUALITY_BEST:
+ return as_value("BEST");
+ case QUALITY_HIGH:
+ return as_value("HIGH");
+ case QUALITY_MEDIUM:
+ return as_value("MEDIUM");
+ case QUALITY_LOW:
+ return as_value("LOW");
+ }
+
+ return as_value();
+
+}
+
+void
+setQuality(DisplayObject& o, const as_value& val)
+{
+ movie_root& mr = getRoot(o);
+
+ if (!val.is_string()) return;
+
+ const std::string& q = val.to_string();
+
+ StringNoCaseEqual noCaseCompare;
+
+ if (noCaseCompare(q, "BEST")) mr.setQuality(QUALITY_BEST);
+ else if (noCaseCompare(q, "HIGH")) {
+ mr.setQuality(QUALITY_HIGH);
+ }
+ else if (noCaseCompare(q, "MEDIUM")) {
+ mr.setQuality(QUALITY_MEDIUM);
+ }
+ else if (noCaseCompare(q, "LOW")) {
+ mr.setQuality(QUALITY_LOW);
+ }
+
+ return;
+}
+
+as_value
+getURL(DisplayObject& o)
+{
+ return as_value(o.get_root()->url());
+}
+
+as_value
+getHighQuality(DisplayObject& o)
+{
+ movie_root& mr = getRoot(o);
+ switch (mr.getQuality())
+ {
+ case QUALITY_BEST:
+ return as_value(2.0);
+ case QUALITY_HIGH:
+ return as_value(1.0);
+ case QUALITY_MEDIUM:
+ case QUALITY_LOW:
+ return as_value(0.0);
+ }
+ return as_value();
+}
+
+void
+setHighQuality(DisplayObject& o, const as_value& val)
+{
+ movie_root& mr = getRoot(o);
+
+ const double q = val.to_number();
+
+ if (q < 0) mr.setQuality(QUALITY_HIGH);
+ else if (q > 2) mr.setQuality(QUALITY_BEST);
+ else {
+ int i = static_cast<int>(q);
+ switch(i)
+ {
+ case 0:
+ mr.setQuality(QUALITY_LOW);
+ break;
+ case 1:
+ mr.setQuality(QUALITY_HIGH);
+ break;
+ case 2:
+ mr.setQuality(QUALITY_BEST);
+ break;
+ }
+ }
+
+}
+
+void
+setY(DisplayObject& o, const as_value& val)
+{
+
+ const double newy = val.to_number();
+
+ // NaN is skipped, Infinite isn't
+ if (isNaN(newy))
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._y to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, newy);
+ );
+ return;
+ }
+
+ SWFMatrix m = o.getMatrix();
+ // NOTE: infinite_to_zero is wrong here, see
actionscript.all/setProperty.as
+ m.set_y_translation(pixelsToTwips(infinite_to_zero(newy)));
+ o.setMatrix(m);
+ o.transformedByScript();
+}
+
+as_value
+getY(DisplayObject& o)
+{
+ SWFMatrix m = o.getMatrix();
+ return twipsToPixels(m.get_y_translation());
+}
+
+void
+setX(DisplayObject& o, const as_value& val)
+{
+
+ const double newx = val.to_number();
+
+ // NaN is skipped, Infinite isn't
+ if (isNaN(newx))
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._x to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, newx);
+ );
+ return;
+ }
+
+ SWFMatrix m = o.getMatrix();
+ // NOTE: infinite_to_zero is wrong here, see
actionscript.all/setProperty.as
+ m.set_x_translation(pixelsToTwips(infinite_to_zero(newx)));
+ o.setMatrix(m);
+ o.transformedByScript();
+}
+
+as_value
+getX(DisplayObject& o)
+{
+ SWFMatrix m = o.getMatrix();
+ return twipsToPixels(m.get_x_translation());
+}
+
+void
+setScaleX(DisplayObject& o, const as_value& val)
+{
+
+ const double scale_percent = val.to_number();
+
+ // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+ if (isNaN(scale_percent))
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._xscale to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, scale_percent);
+ );
+ return;
+ }
+
+ // input is in percent
+ o.set_x_scale(scale_percent);
+
+}
+
+as_value
+getScaleX(DisplayObject& o)
+{
+ return o.scaleX();
+}
+
+void
+setScaleY(DisplayObject& o, const as_value& val)
+{
+
+ const double scale_percent = val.to_number();
+
+ // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+ if (isNaN(scale_percent))
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._yscale to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, scale_percent);
+ );
+ return;
+ }
+
+ // input is in percent
+ o.set_y_scale(scale_percent);
+
+}
+
+as_value
+getScaleY(DisplayObject& o)
+{
+ return o.scaleY();
+}
+
+as_value
+getVisible(DisplayObject& o)
+{
+ return o.visible();
+}
+
+void
+setVisible(DisplayObject& o, const as_value& val)
+{
+
+ /// We cast to number and rely (mostly) on C++'s automatic
+ /// cast to bool, as string "0" should be converted to
+ /// its numeric equivalent, not interpreted as 'true', which
+ /// SWF7+ does for strings.
+ double d = val.to_number();
+
+ // Infinite or NaN is skipped
+ if (isInf(d) || isNaN(d)) {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._visible to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, d);
+ );
+ return;
+ }
+
+ o.set_visible(d);
+
+ o.transformedByScript();
+}
+
+as_value
+getAlpha(DisplayObject& o)
+{
+ return as_value(o.get_cxform().aa / 2.56);
+}
+
+void
+setAlpha(DisplayObject& o, const as_value& val)
+{
+
+ // The new internal alpha value is input / 100.0 * 256.
+ // We test for finiteness later, but the multiplication
+ // won't make any difference.
+ const double newAlpha = val.to_number() * 2.56;
+
+ // NaN is skipped, Infinite is not, see actionscript.all/setProperty.as
+ if (isNaN(newAlpha)) {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._alpha to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, newAlpha);
+ );
+ return;
+ }
+
+ cxform cx = o.get_cxform();
+
+ // Overflows are *not* truncated, but set to -32768.
+ if (newAlpha > std::numeric_limits<boost::int16_t>::max() ||
+ newAlpha < std::numeric_limits<boost::int16_t>::min()) {
+ cx.aa = std::numeric_limits<boost::int16_t>::min();
+ }
+ else {
+ cx.aa = static_cast<boost::int16_t>(newAlpha);
+ }
+
+ o.set_cxform(cx);
+ o.transformedByScript();
+
+}
+
+as_value
+getMouseX(DisplayObject& o)
+{
+ // Local coord of mouse IN PIXELS.
+ boost::int32_t x, y, buttons;
+ getRoot(o).get_mouse_state(x, y, buttons);
+
+ SWFMatrix m = o.getWorldMatrix();
+ point a(pixelsToTwips(x), pixelsToTwips(y));
+
+ m.invert().transform(a);
+ return as_value(twipsToPixels(a.x));
+}
+
+as_value
+getMouseY(DisplayObject& o)
+{
+ // Local coord of mouse IN PIXELS.
+ boost::int32_t x, y, buttons;
+ getRoot(o).get_mouse_state(x, y, buttons);
+
+ SWFMatrix m = o.getWorldMatrix();
+ point a(pixelsToTwips(x), pixelsToTwips(y));
+ m.invert().transform(a);
+ return as_value(twipsToPixels(a.y));
+}
+
+as_value
+getRotation(DisplayObject& o)
+{
+ return o.rotation();
+}
+
+
+void
+setRotation(DisplayObject& o, const as_value& val)
+{
+
+ // input is in degrees
+ const double rotation_val = val.to_number();
+
+ // NaN is skipped, Infinity isn't
+ if (isNaN(rotation_val))
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Attempt to set %s._rotation to %s "
+ "(evaluating to number %g) refused"),
+ o.getTarget(), val, rotation_val);
+ );
+ return;
+ }
+ o.set_rotation(rotation_val);
+}
+
+
+as_value
+getParent(DisplayObject& o)
+{
+ as_object* p = o.get_parent();
+ return p ? p : as_value();
+}
+
+as_value
+getTarget(DisplayObject& o)
+{
+ return o.getTargetPath();
+}
+
+as_value
+getNameProperty(DisplayObject& o)
+{
+ const std::string& name = o.get_name();
+ if (getSWFVersion(o) < 6 && name.empty()) return as_value();
+ return as_value(name);
+}
+
+void
+setName(DisplayObject& o, const as_value& val)
+{
+ o.set_name(val.to_string().c_str());
+}
+
+void
+setSoundBufTime(DisplayObject& /*o*/, const as_value& /*val*/)
+{
+ LOG_ONCE(log_unimpl("_soundbuftime setting"));
+}
+
+as_value
+getSoundBufTime(DisplayObject& /*o*/)
+{
+ return as_value(0.0);
+}
+
+as_value
+getWidth(DisplayObject& o)
+{
+ rect bounds = o.getBounds();
+ const SWFMatrix& m = o.getMatrix();
+ m.transform(bounds);
+ return twipsToPixels(bounds.width());
+}
+
+void
+setWidth(DisplayObject& o, const as_value& val)
+{
+ const double newwidth = pixelsToTwips(val.to_number());
+ if (newwidth <= 0) {
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Setting _width=%g of DisplayObject %s (%s)"),
+ newwidth/20, o.getTarget(), typeName(o));
+ );
+ }
+ o.setWidth(newwidth);
+}
+
+const Getters
+displayObjectGetters()
+{
+ static const Getters getters = boost::assign::map_list_of
+ (NSV::PROP_uX, getX)
+ (NSV::PROP_uY, getY)
+ (NSV::PROP_uXSCALE, getScaleX)
+ (NSV::PROP_uYSCALE, getScaleY)
+ (NSV::PROP_uROTATION, getRotation)
+ (NSV::PROP_uHIGHQUALITY, getHighQuality)
+ (NSV::PROP_uQUALITY, getQuality)
+ (NSV::PROP_uALPHA, getAlpha)
+ (NSV::PROP_uWIDTH, getWidth)
+ (NSV::PROP_uURL, getURL)
+ (NSV::PROP_uHEIGHT, getHeight)
+ (NSV::PROP_uNAME, getNameProperty)
+ (NSV::PROP_uVISIBLE, getVisible)
+ (NSV::PROP_uSOUNDBUFTIME, getSoundBufTime)
+ (NSV::PROP_uPARENT, getParent)
+ (NSV::PROP_uTARGET, getTarget)
+ (NSV::PROP_uXMOUSE, getMouseX)
+ (NSV::PROP_uYMOUSE, getMouseY);
+ return getters;
+}
+const Setters
+displayObjectSetters()
+{
+ const Setter n = 0;
+
+ static const Setters setters = boost::assign::map_list_of
+ (NSV::PROP_uX, setX)
+ (NSV::PROP_uY, setY)
+ (NSV::PROP_uXSCALE, setScaleX)
+ (NSV::PROP_uYSCALE, setScaleY)
+ (NSV::PROP_uROTATION, setRotation)
+ (NSV::PROP_uHIGHQUALITY, setHighQuality)
+ (NSV::PROP_uQUALITY, setQuality)
+ (NSV::PROP_uALPHA, setAlpha)
+ (NSV::PROP_uWIDTH, setWidth)
+ (NSV::PROP_uHEIGHT, setHeight)
+ (NSV::PROP_uNAME, setName)
+ (NSV::PROP_uVISIBLE, setVisible)
+ (NSV::PROP_uSOUNDBUFTIME, setSoundBufTime)
+ (NSV::PROP_uPARENT, n)
+ (NSV::PROP_uURL, n)
+ (NSV::PROP_uTARGET, n)
+ (NSV::PROP_uXMOUSE, n)
+ (NSV::PROP_uYMOUSE, n);
+ return setters;
+}
+
const BlendModeMap&
getBlendModeMap()
=== modified file 'libcore/DisplayObject.h'
--- a/libcore/DisplayObject.h 2009-07-10 15:44:55 +0000
+++ b/libcore/DisplayObject.h 2009-09-30 15:20:47 +0000
@@ -61,6 +61,18 @@
namespace gnash {
+/// Attaches common DisplayObject properties such as _height, _x, _visible
+//
+/// This should be called by DisplayObject subclasses to ensure that
+/// the correct properties are attached.
+void attachDisplayObjectProperties(as_object& o);
+
+bool setDisplayObjectProperty(as_object& obj, string_table::key key,
+ const as_value& val);
+
+bool getDisplayObjectProperty(as_object& obj, string_table::key key,
+ as_value& val);
+
/// DisplayObject is the base class for all DisplayList objects.
//
/// It represents a single active element in a movie. This class does not
@@ -245,24 +257,23 @@
/// Set the width of this DisplayObject, modifying its SWFMatrix
//
/// This is used when setting _width
- /// See width_getset
- ///
- /// @param w new width, in TWIPS. TODO: should this be an integer ?
- ///
- void set_width(double width);
+ ///
+ /// @param w new width, in TWIPS.
+ //
+ /// TextField does this differently (caches not updated).
+ virtual void setWidth(double width);
/// Set the height of this DisplayObject, modifying its SWFMatrix
//
/// This is used when setting _height
- /// See height_getset
- ///
- /// @param h new height, in TWIPS. TODO: should this be an integer ?
- ///
- void set_height(double height);
+ ///
+ /// @param h new height, in TWIPS.
+ ///
+ virtual void setHeight(double height);
const cxform& get_cxform() const { return m_color_transform; }
- void set_cxform(const cxform& cx)
+ void set_cxform(const cxform& cx)
{
if (cx != m_color_transform) {
set_invalidated(__FILE__, __LINE__);
@@ -936,59 +947,21 @@
/// Default is a no-op. TextField implements this function.
virtual void killFocus() {}
- /// Getter-setter for _highquality.
- static as_value highquality(const fn_call& fn);
-
- /// Getter-setter for _quality.
- static as_value quality(const fn_call& fn);
-
+ double rotation() const {
+ return _rotation;
+ }
+
+ double scaleX() const {
+ return _xscale;
+ }
+
+ double scaleY() const {
+ return _yscale;
+ }
+
/// Getter-setter for blendMode.
static as_value blendMode(const fn_call& fn);
- /// Getter-setter for _x
- static as_value x_getset(const fn_call& fn);
-
- /// Getter-setter for _y
- static as_value y_getset(const fn_call& fn);
-
- /// Getter-setter for _xscale
- static as_value xscale_getset(const fn_call& fn);
-
- /// Getter-setter for _yscale
- static as_value yscale_getset(const fn_call& fn);
-
- /// Getter-setter for _xmouse
- static as_value xmouse_get(const fn_call& fn);
-
- /// Getter-setter for _ymouse
- static as_value ymouse_get(const fn_call& fn);
-
- /// Getter-setter for _alpha
- static as_value alpha_getset(const fn_call& fn);
-
- /// Getter-setter for _visible
- static as_value visible_getset(const fn_call& fn);
-
- /// Getter-setter for _width
- static as_value width_getset(const fn_call& fn);
-
- /// Getter-setter for _height
- static as_value height_getset(const fn_call& fn);
-
- /// Getter-setter for _rotation
- static as_value rotation_getset(const fn_call& fn);
-
- /// Getter-setter for _parent
- static as_value parent_getset(const fn_call& fn);
-
- /// Getter-setter for _target
- static as_value target_getset(const fn_call& fn);
-
- /// Getter-setter for _name
- static as_value name_getset(const fn_call& fn);
-
- /// @} Common ActionScript getter-setters for DisplayObjects
-
protected:
/// Register currently computable target as
@@ -1099,6 +1072,7 @@
/// Will be set by set_invalidated() and used by
/// get_invalidated_bounds().
InvalidatedRanges m_old_invalidated_ranges;
+
private:
=== modified file 'libcore/MovieClip.cpp'
--- a/libcore/MovieClip.cpp 2009-09-29 11:09:52 +0000
+++ b/libcore/MovieClip.cpp 2009-09-30 15:20:47 +0000
@@ -548,7 +548,9 @@
}
return true;
}
-
+
+ if (getDisplayObjectProperty(*this, name_key, *val)) return true;
+
// Try items on our display list.
DisplayObject* ch;
if (getSWFVersion(*this) >= 7 ) {
=== modified file 'libcore/TextField.cpp'
--- a/libcore/TextField.cpp 2009-08-27 10:18:44 +0000
+++ b/libcore/TextField.cpp 2009-10-01 08:50:53 +0000
@@ -1015,237 +1015,6 @@
format_text();
}
-bool
-TextField::set_member(string_table::key name,
- const as_value& val, string_table::key nsname, bool ifFound)
-{
-
- // FIXME: Turn all standard members into getter/setter properties
- // of the TextField class. See attachTextFieldInterface()
- // @@ TODO need to inherit basic stuff like _x, _y, _xscale, _yscale etc ?
-
- switch (name)
- {
- default:
- break;
- case NSV::PROP_uX:
- {
- SWFMatrix m = getMatrix();
- double x = infinite_to_zero( val.to_number() );
- m.tx = pixelsToTwips(x);
- setMatrix(m); // no need to update caches when only changing
translation
-
- // m_accept_anim_moves = false;
- return true;
- }
- case NSV::PROP_uY:
- {
- SWFMatrix m = getMatrix();
- double y = infinite_to_zero( val.to_number() );
- m.ty = pixelsToTwips(y);
- setMatrix(m); // no need to update caches when only changing
translation
-
- // m_accept_anim_moves = false;
- return true;
- }
- case NSV::PROP_uWIDTH:
- {
- double nw = val.to_number();
- if (!isFinite(nw) )
- {
- // might be our fault, see the TODO above
- // (missing to pass as_environment out..)
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set TextField._width to %g"), nw);
- );
- return true;
- }
-
- if ( nw < 0 )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set TextField._width to a "
- "negative number: %g, toggling sign"), nw);
- );
- nw = -nw;
- }
-
- if ( _bounds.width() == pixelsToTwips(nw) )
- {
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("TextField width already == %g, nothing to do to "
- "change it", nw);
-#endif
- return true; // nothing to do
- }
- if ( _bounds.is_null() )
- {
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("NULL TextField bounds : %s", _bounds);
-#endif
- return true;
- }
-
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("Chaging TextField width to %g", nw);
-#endif
-
- set_invalidated();
-
- // Modify TextField drawing rectangle
- // TODO: check which anchor point we should use !
- boost::int32_t xmin = _bounds.get_x_min();
- boost::int32_t ymin = _bounds.get_y_min();
- boost::int32_t ymax = _bounds.get_y_max();
- boost::int32_t xmax = xmin + pixelsToTwips(nw);
-
- assert(xmin <= xmax);
- _bounds.set_to_rect(xmin, ymin, xmax, ymax);
- assert( _bounds.width() == pixelsToTwips(nw) );
-
- // previously truncated text might get visible now
- // TODO: if nested masks were implemented we would
- // not need to reformat text here
- format_text();
-
- return true;
- }
- case NSV::PROP_uHEIGHT:
- {
- double nh = val.to_number();
- if (!isFinite(nh) )
- {
- // might be our fault, see the TODO above (missing to pass
- // as_environment out..)
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set TextField._height to %g"), nh);
- );
- return true;
- }
-
- if ( nh < 0.0f )
- {
- IF_VERBOSE_ASCODING_ERRORS(
- log_aserror(_("Attempt to set TextField._height to a negative "
- "number: %g, toggling sign"), nh);
- );
- nh = -nh;
- }
-
- if ( _bounds.height() == pixelsToTwips(nh) )
- {
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("TextField height already == %g, nothing to do to "
- "change it", nh);
-#endif // GNASH_DEBUG_TEXTFIELDS
- return true; // nothing to do
- }
- if ( _bounds.is_null() )
- {
- return true;
- }
-
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("Changing TextField height to %g", nh);
-#endif // GNASH_DEBUG_TEXTFIELDS
- set_invalidated();
-
- // Modify TextField drawing rectangle
- // TODO: check which anchor point we should use !
- boost::int32_t xmin = _bounds.get_x_min();
- boost::int32_t xmax = _bounds.get_x_max();
- boost::int32_t ymin = _bounds.get_y_min();
- _bounds.set_to_rect(xmin, ymin, xmax, ymin + pixelsToTwips(nh) );
-
- assert(_bounds.height() == pixelsToTwips(nh));
-
- // previously truncated text might get visible now
- // TODO: if nested masks were implemented we would
- // not need to reformat text here
- format_text();
-
- return true;
- }
- case NSV::PROP_uVISIBLE:
- {
- set_visible(val.to_bool());
- return true;
- }
- case NSV::PROP_uALPHA:
- {
- // @@ TODO this should be generic to class DisplayObject!
- // Arg is in percent.
- cxform cx = get_cxform();
- cx.aa = (boost::int16_t)(val.to_number() * 2.56);
- set_cxform(cx);
- return true;
- }
- // @@ TODO see TextField members in Flash MX docs
- } // end switch
-
-
- return as_object::set_member(name, val, nsname, ifFound);
-}
-
-bool
-TextField::get_member(string_table::key name, as_value* val,
- string_table::key nsname)
-{
-
- // FIXME: Turn all standard members into getter/setter properties
- // of the TextField class. See attachTextFieldInterface()
-
- switch (name)
- {
- default:
- break;
- case NSV::PROP_uVISIBLE:
- {
- val->set_bool(visible());
- return true;
- }
- case NSV::PROP_uALPHA:
- {
- // @@ TODO this should be generic to class DisplayObject!
- const cxform& cx = get_cxform();
- val->set_double(cx.aa / 2.56);
- return true;
- }
- case NSV::PROP_uX:
- {
- SWFMatrix m = getMatrix();
- val->set_double(twipsToPixels(m.tx));
- return true;
- }
- case NSV::PROP_uY:
- {
- SWFMatrix m = getMatrix();
- val->set_double(twipsToPixels(m.ty));
- return true;
- }
- case NSV::PROP_uWIDTH:
- {
- val->set_double(twipsToPixels(get_width()));
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("Got TextField width == %s", *val);
-#endif // GNASH_DEBUG_TEXTFIELDS
- return true;
- }
- case NSV::PROP_uHEIGHT:
- {
- val->set_double(twipsToPixels(get_height()));
-#ifdef GNASH_DEBUG_TEXTFIELDS
- log_debug("Got TextField height == %s", *val);
-#endif // GNASH_DEBUG_TEXTFIELDS
- return true;
- }
- } // end switch
-
- return as_object::get_member(name, val, nsname);
-
-}
-
-
float
TextField::align_line(TextAlignment align,
int last_line_start_record, float x)
@@ -1502,9 +1271,9 @@
last_line_start_record);
// Expand bounding box to include the whole text (if autoSize)
- if ( _autoSize != autoSizeNone )
+ if (_autoSize != autoSizeNone)
{
- _bounds.expand_to_point(x+PADDING_TWIPS, y+PADDING_TWIPS);
+ _bounds.expand_to_point(x + PADDING_TWIPS, y + PADDING_TWIPS);
}
// Add the last line to our output.
@@ -1580,8 +1349,7 @@
// Expand bounding box to include last column of text ...
if ( _autoSize != autoSizeNone )
{
- _bounds.expand_to_point(x + PADDING_TWIPS,
- y + PADDING_TWIPS);
+ _bounds.expand_to_point(x + PADDING_TWIPS, y + PADDING_TWIPS);
}
// new paragraphs get the indent.
@@ -2680,12 +2448,12 @@
}
void
-TextField::setWordWrap(bool on)
+TextField::setWordWrap(bool wrap)
{
- if ( _wordWrap != on )
- {
+ if (_wordWrap != wrap) {
+
set_invalidated();
- _wordWrap=on;
+ _wordWrap = wrap;
format_text();
}
}
@@ -2984,6 +2752,26 @@
markDisplayObjectReachable();
}
+void
+TextField::setWidth(double newwidth)
+{
+ const rect& bounds = getBounds();
+ _bounds.set_to_rect(bounds.get_x_min(),
+ bounds.get_y_min(),
+ bounds.get_x_min() + newwidth,
+ bounds.get_y_max());
+}
+
+void
+TextField::setHeight(double newheight)
+{
+ const rect& bounds = getBounds();
+ _bounds.set_to_rect(bounds.get_x_min(),
+ bounds.get_y_min(),
+ bounds.get_x_max(),
+ bounds.get_y_min() + newheight);
+}
+
/// TextField interface functions
namespace {
@@ -3836,36 +3624,6 @@
// TextField is an AsBroadcaster
AsBroadcaster::initialize(o);
- int propFlags = PropFlags::dontDelete
- |PropFlags::dontEnum
- |PropFlags::readOnly
- |PropFlags::isProtected;
-
- // Parent seems to not be a normal property
- o.init_property(NSV::PROP_uPARENT, &DisplayObject::parent_getset,
- &DisplayObject::parent_getset);
-
- // Target seems to not be a normal property
- o.init_property(NSV::PROP_uTARGET, &DisplayObject::target_getset,
- &DisplayObject::target_getset);
-
- // _name should be a property of the instance, not the prototype
- o.init_property(NSV::PROP_uNAME, &DisplayObject::name_getset,
- &DisplayObject::name_getset);
-
- o.init_property(NSV::PROP_uXMOUSE,
- DisplayObject::xmouse_get, DisplayObject::xmouse_get, propFlags);
- o.init_property(NSV::PROP_uYMOUSE,
- DisplayObject::ymouse_get, DisplayObject::ymouse_get, propFlags);
- o.init_property(NSV::PROP_uHIGHQUALITY,
- DisplayObject::highquality, DisplayObject::highquality);
- o.init_property(NSV::PROP_uQUALITY,
- DisplayObject::quality, DisplayObject::quality);
- o.init_property(NSV::PROP_uXSCALE,
- DisplayObject::xscale_getset, DisplayObject::xscale_getset);
- o.init_property(NSV::PROP_uYSCALE,
- DisplayObject::yscale_getset, DisplayObject::yscale_getset);
-
// SWF6 or higher
const int swf6Flags = as_object::DefaultFlags | PropFlags::onlySWF6Up;
=== modified file 'libcore/TextField.h'
--- a/libcore/TextField.h 2009-08-27 05:46:44 +0000
+++ b/libcore/TextField.h 2009-09-30 15:20:47 +0000
@@ -196,12 +196,8 @@
/// end is never less than start.
void setSelection(int start, int end);
- /// We have a "text" member.
- bool set_member(string_table::key name, const as_value& val,
- string_table::key nsname = 0, bool ifFound=false);
-
- bool get_member(string_table::key name, as_value* val,
- string_table::key nsname = 0);
+ virtual void setWidth(double width);
+ virtual void setHeight(double height);
/// Draw the dynamic string.
void display(Renderer& renderer);
=== modified file 'libcore/Video.cpp'
--- a/libcore/Video.cpp 2009-08-27 10:47:30 +0000
+++ b/libcore/Video.cpp 2009-09-30 15:20:47 +0000
@@ -67,8 +67,13 @@
{
set_prototype(getVideoInterface(*this));
+
+ // TODO: For AS2 a genuine Video object can only be created from a
+ // SWF tag.
if (_embeddedStream)
{
+ // TODO: this should happen using the native creation function
+ // once Video is a Relay.
attachVideoProperties(*this);
initializeDecoder();
@@ -383,47 +388,7 @@
void
attachVideoProperties(as_object& o)
{
-
- as_c_function_ptr gettersetter;
-
- gettersetter = &DisplayObject::x_getset;
- o.init_property(NSV::PROP_uX, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::y_getset;
- o.init_property(NSV::PROP_uY, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::xscale_getset;
- o.init_property(NSV::PROP_uXSCALE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::yscale_getset;
- o.init_property(NSV::PROP_uYSCALE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::xmouse_get;
- o.init_readonly_property(NSV::PROP_uXMOUSE, *gettersetter);
-
- gettersetter = &DisplayObject::ymouse_get;
- o.init_readonly_property(NSV::PROP_uYMOUSE, *gettersetter);
-
- gettersetter = &DisplayObject::alpha_getset;
- o.init_property(NSV::PROP_uALPHA, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::visible_getset;
- o.init_property(NSV::PROP_uVISIBLE, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::width_getset;
- o.init_property(NSV::PROP_uWIDTH, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::height_getset;
- o.init_property(NSV::PROP_uHEIGHT, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::rotation_getset;
- o.init_property(NSV::PROP_uROTATION, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::parent_getset;
- o.init_property(NSV::PROP_uPARENT, *gettersetter, *gettersetter);
-
- gettersetter = &DisplayObject::target_getset;
- o.init_property(NSV::PROP_uTARGET, *gettersetter, *gettersetter);
+ attachDisplayObjectProperties(o);
}
as_value
@@ -504,13 +469,7 @@
as_value
video_ctor(const fn_call& /* fn */)
{
- log_debug("new Video() TESTING !");
-
- // I'm not sure We can rely on the def and parent values being accepted
- // as NULL. Not till we add some testing...
- boost::intrusive_ptr<DisplayObject> obj = new Video(NULL, NULL, -1);
- obj->setDynamic();
- return as_value(obj.get()); // will keep alive
+ return as_value(); // will keep alive
}
} // anonymous namespace
=== modified file 'libcore/as_object.cpp'
--- a/libcore/as_object.cpp 2009-09-29 08:44:54 +0000
+++ b/libcore/as_object.cpp 2009-09-30 15:20:47 +0000
@@ -38,6 +38,7 @@
#include "as_function.h"
#include "Global_as.h"
#include "GnashAlgorithm.h"
+#include "DisplayObject.h"
#include <set>
#include <string>
@@ -218,6 +219,7 @@
as_object::as_object(Global_as& gl)
:
+ _displayObject(false),
_relay(0),
_vm(getVM(gl)),
_members(_vm)
@@ -226,6 +228,7 @@
as_object::as_object()
:
+ _displayObject(false),
_relay(0),
_vm(VM::get()),
_members(_vm)
@@ -234,6 +237,7 @@
as_object::as_object(as_object* proto)
:
+ _displayObject(false),
_relay(0),
_vm(VM::get()),
_members(_vm)
@@ -243,6 +247,7 @@
as_object::as_object(boost::intrusive_ptr<as_object> proto)
:
+ _displayObject(false),
_relay(0),
_vm(VM::get()),
_members(_vm)
@@ -252,11 +257,7 @@
as_object::as_object(const as_object& other)
:
-#ifndef GNASH_USE_GC
- ref_counted(),
-#else
- GcResource(),
-#endif
+ _displayObject(other._displayObject),
_relay(0),
_vm(VM::get()),
_members(other._members)
@@ -326,14 +327,25 @@
}
}
-
+/// Current order of property lookup
+//
+/// If DisplayObject:
+/// DisplayObject magic properties
+/// (DisplayList, TextField variables?)
+/// Own properties up __proto__ chain
+/// __resolve.
bool
as_object::get_member(string_table::key name, as_value* val,
string_table::key nsname)
{
assert(val);
+
+ if (_displayObject) {
+ if (getDisplayObjectProperty(*this, name, *val)) return true;
+ }
+
Property* prop = findProperty(name, nsname);
-
+
if (!prop) {
/// If the property isn't found, try the __resolve property.
@@ -363,6 +375,7 @@
log_error(_("Caught exception: %s"), exc.what());
return false;
}
+
}
@@ -672,6 +685,11 @@
return true;
}
+ if (_displayObject) {
+ if (setDisplayObjectProperty(*this, key, val)) return true;
+ // Execute triggers?
+ }
+
// Else, add new property...
if (ifFound) return false;
=== modified file 'libcore/as_object.h'
--- a/libcore/as_object.h 2009-09-29 08:44:54 +0000
+++ b/libcore/as_object.h 2009-09-30 15:20:47 +0000
@@ -1030,6 +1030,14 @@
return _relay.get();
}
+ /// Indicate that this object is a DisplayObject
+ //
+ /// This enables DisplayObject properties such as _x and _y. A flag
+ /// is used to avoid RTTI on every get and set of properties.
+ void setDisplayObject() {
+ _displayObject = true;
+ }
+
protected:
/// Enumerate any non-proper properties
@@ -1098,6 +1106,12 @@
private:
+ /// DisplayObjects have properties not in the AS inheritance chain
+ //
+ /// These magic properties are invoked in get_member only if the
+ /// object is a DisplayObject
+ bool _displayObject;
+
/// The polymorphic Relay object for native types.
//
/// This is owned by the as_object and destroyed when the as_object's
=== modified file 'libcore/asobj/flash/display/MovieClip_as.cpp'
--- a/libcore/asobj/flash/display/MovieClip_as.cpp 2009-09-29 11:09:52
+0000
+++ b/libcore/asobj/flash/display/MovieClip_as.cpp 2009-10-01 08:50:41
+0000
@@ -107,9 +107,7 @@
as_value movieclip_totalFrames(const fn_call& fn);
as_value movieclip_framesLoaded(const fn_call& fn);
as_value movieclip_dropTarget(const fn_call& fn);
- as_value movieclip_url(const fn_call& fn);
as_value movieclip_focusRect(const fn_call& fn);
- as_value movieclip_soundbuftime(const fn_call& fn);
// =============================================
// AS3 methods
@@ -244,42 +242,6 @@
as_c_function_ptr gettersetter;
- gettersetter = DisplayObject::x_getset;
- o.init_property(NSV::PROP_uX, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::y_getset;
- o.init_property(NSV::PROP_uY, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::xscale_getset;
- o.init_property(NSV::PROP_uXSCALE, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::yscale_getset;
- o.init_property(NSV::PROP_uYSCALE, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::xmouse_get;
- o.init_readonly_property(NSV::PROP_uXMOUSE, gettersetter);
-
- gettersetter = DisplayObject::ymouse_get;
- o.init_readonly_property(NSV::PROP_uYMOUSE, gettersetter);
-
- gettersetter = DisplayObject::alpha_getset;
- o.init_property(NSV::PROP_uALPHA, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::visible_getset;
- o.init_property(NSV::PROP_uVISIBLE, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::width_getset;
- o.init_property(NSV::PROP_uWIDTH, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::height_getset;
- o.init_property(NSV::PROP_uHEIGHT, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::rotation_getset;
- o.init_property(NSV::PROP_uROTATION, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::parent_getset;
- o.init_property(NSV::PROP_uPARENT, gettersetter, gettersetter);
-
gettersetter = movieclip_currentFrame;
o.init_property(NSV::PROP_uCURRENTFRAME, gettersetter, gettersetter);
@@ -289,30 +251,12 @@
gettersetter = movieclip_framesLoaded;
o.init_property(NSV::PROP_uFRAMESLOADED, gettersetter, gettersetter);
- gettersetter = DisplayObject::target_getset;
- o.init_property(NSV::PROP_uTARGET, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::name_getset;
- o.init_property(NSV::PROP_uNAME, gettersetter, gettersetter);
-
gettersetter = movieclip_dropTarget;
o.init_property(NSV::PROP_uDROPTARGET, gettersetter, gettersetter);
- gettersetter = movieclip_url;
- o.init_property(NSV::PROP_uURL, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::quality;
- o.init_property(NSV::PROP_uQUALITY, gettersetter, gettersetter);
-
- gettersetter = DisplayObject::highquality;
- o.init_property(NSV::PROP_uHIGHQUALITY, gettersetter, gettersetter);
-
gettersetter = movieclip_focusRect;
o.init_property(NSV::PROP_uFOCUSRECT, gettersetter, gettersetter);
- gettersetter = movieclip_soundbuftime;
- o.init_property(NSV::PROP_uSOUNDBUFTIME, gettersetter, gettersetter);
-
}
as_object*
@@ -1479,28 +1423,28 @@
tgtwmat.invert().transform(bounds);
}
- // Magic numbers here... dunno why
- double xMin = 6710886.35;
- double yMin = 6710886.35;
- double xMax = 6710886.35;
- double yMax = 6710886.35;
+ double xMin, yMin, xMax, yMax;
- if ( !bounds.is_null() )
- {
+ if (!bounds.is_null()) {
// Round to the twip
xMin = twipsToPixels(bounds.get_x_min());
yMin = twipsToPixels(bounds.get_y_min());
xMax = twipsToPixels(bounds.get_x_max());
yMax = twipsToPixels(bounds.get_y_max());
}
-
- boost::intrusive_ptr<as_object> bounds_obj(new as_object());
- bounds_obj->init_member("xMin", as_value(xMin));
- bounds_obj->init_member("yMin", as_value(yMin));
- bounds_obj->init_member("xMax", as_value(xMax));
- bounds_obj->init_member("yMax", as_value(yMax));
-
- return as_value(bounds_obj.get());
+ else {
+ const double magicMin = 6710886.35;
+ xMin = yMin = xMax = yMax = magicMin;
+ }
+
+ // This is a bare object.
+ as_object* bounds_obj = new as_object();
+ bounds_obj->init_member("xMin", xMin);
+ bounds_obj->init_member("yMin", yMin);
+ bounds_obj->init_member("xMax", xMax);
+ bounds_obj->init_member("yMax", yMax);
+
+ return as_value(bounds_obj);
}
as_value
@@ -2573,14 +2517,6 @@
return ptr->getDropTarget();
}
-as_value
-movieclip_url(const fn_call& fn)
-{
- boost::intrusive_ptr<MovieClip> ptr = ensureType<MovieClip>(fn.this_ptr);
-
- return as_value(ptr->get_root()->url());
-}
-
// TODO: move this to DisplayObject class, _focusrect seems a generic property
as_value
movieclip_focusRect(const fn_call& fn)
@@ -2601,24 +2537,6 @@
return as_value();
}
-as_value
-movieclip_soundbuftime(const fn_call& fn)
-{
- boost::intrusive_ptr<MovieClip> ptr =
- ensureType<MovieClip>(fn.this_ptr);
- UNUSED(ptr);
-
- if ( fn.nargs == 0 ) // getter
- {
- // Number of seconds before sound starts to stream.
- return as_value(0.0);
- }
- else // setter
- {
- LOG_ONCE( log_unimpl("MovieClip._soundbuftime setting") );
- }
- return as_value();
-}
as_value
movieclip_transform(const fn_call& fn)
=== modified file 'testsuite/actionscript.all/MovieClip.as'
--- a/testsuite/actionscript.all/MovieClip.as 2009-08-27 15:16:25 +0000
+++ b/testsuite/actionscript.all/MovieClip.as 2009-09-30 15:20:47 +0000
@@ -146,7 +146,7 @@
check_equals(typeof(this), 'movieclip');
check_equals(typeof(_parent), 'undefined');
#if OUTPUT_VERSION > 5
- xcheck(!mc.hasOwnProperty('_parent'));
+ check(!mc.hasOwnProperty('_parent'));
check(!MovieClip.prototype.hasOwnProperty('_parent'));
#endif
check_equals(_root, this);
@@ -403,47 +403,47 @@
// focused test on _* properties
check_equals(typeof(mc._x), 'number');
-xcheck(!mc.hasOwnProperty("_x"));
+check(!mc.hasOwnProperty("_x"));
check(!mc.__proto__.hasOwnProperty("_x"));
check(!MovieClip.prototype.hasOwnProperty("_x"));
check_equals(typeof(mc._y), 'number');
-xcheck(!mc.hasOwnProperty("_y"));
+check(!mc.hasOwnProperty("_y"));
check(!mc.__proto__.hasOwnProperty("_y"));
check(!MovieClip.prototype.hasOwnProperty("_y"));
check_equals(typeof(mc._height), 'number');
-xcheck(!mc.hasOwnProperty("_height"));
+check(!mc.hasOwnProperty("_height"));
check(!mc.__proto__.hasOwnProperty("_height"));
check(!MovieClip.prototype.hasOwnProperty("_height"));
check_equals(typeof(mc._width), 'number');
-xcheck(!mc.hasOwnProperty("_width"));
+check(!mc.hasOwnProperty("_width"));
check(!mc.__proto__.hasOwnProperty("_width"));
check(!MovieClip.prototype.hasOwnProperty("_width"));
check_equals(typeof(mc._xscale), 'number');
-xcheck(!mc.hasOwnProperty("_xscale"));
+check(!mc.hasOwnProperty("_xscale"));
check(!mc.__proto__.hasOwnProperty("_xscale"));
check(!MovieClip.prototype.hasOwnProperty("_xscale"));
check_equals(typeof(mc._yscale), 'number');
-xcheck(!mc.hasOwnProperty("_yscale"));
+check(!mc.hasOwnProperty("_yscale"));
check(!mc.__proto__.hasOwnProperty("_yscale"));
check(!MovieClip.prototype.hasOwnProperty("_yscale"));
check_equals(typeof(mc._xmouse), 'number');
-xcheck(!mc.hasOwnProperty("_xmouse"));
+check(!mc.hasOwnProperty("_xmouse"));
check(!mc.__proto__.hasOwnProperty("_xmouse"));
check(!MovieClip.prototype.hasOwnProperty("_xmouse"));
check_equals(typeof(mc._ymouse), 'number');
-xcheck(!mc.hasOwnProperty("_ymouse"));
+check(!mc.hasOwnProperty("_ymouse"));
check(!mc.__proto__.hasOwnProperty("_ymouse"));
check(!MovieClip.prototype.hasOwnProperty("_ymouse"));
check_equals(typeof(mc._rotation), 'number');
-xcheck(!mc.hasOwnProperty("_rotation"));
+check(!mc.hasOwnProperty("_rotation"));
check(!mc.__proto__.hasOwnProperty("_rotation"));
check(!MovieClip.prototype.hasOwnProperty("_rotation"));
@@ -454,13 +454,13 @@
check(!mc.hasOwnProperty("_level"));
check(!mc.__proto__.hasOwnProperty("_level"));
-xcheck(!mc.hasOwnProperty("_target"));
-xcheck(!mc.hasOwnProperty("_url"));
-xcheck(!mc.hasOwnProperty("_soundbuftime"));
+check(!mc.hasOwnProperty("_target"));
+check(!mc.hasOwnProperty("_url"));
+check(!mc.hasOwnProperty("_soundbuftime"));
xcheck(!mc.hasOwnProperty("_focusrect"));
xcheck(!mc.hasOwnProperty("_framesloaded"));
check(!mc.hasOwnProperty("_lockroot"));
-xcheck(!mc.hasOwnProperty("_highquality"));
+check(!mc.hasOwnProperty("_highquality"));
#endif //if OUTPUT_VERSION >= 6
//----------------------------------------------
@@ -532,7 +532,7 @@
check_equals(mc2.getBytesTotal(), 0);
check_equals(mc2._url, _root._url);
-xcheck(!mc2.hasOwnProperty('_parent'));
+check(!mc2.hasOwnProperty('_parent'));
#if OUTPUT_VERSION > 6 // {
check_equals(getInstanceAtDepth(50), mc2);
=== modified file 'testsuite/actionscript.all/TextField.as'
--- a/testsuite/actionscript.all/TextField.as 2009-08-21 21:19:40 +0000
+++ b/testsuite/actionscript.all/TextField.as 2009-10-01 08:49:33 +0000
@@ -299,7 +299,7 @@
check_equals(typeof(tf._highquality), 'number');
check(!tf.hasOwnProperty('_highquality'));
-xcheck(!tf.__proto__.hasOwnProperty('_highquality'));
+check(!tf.__proto__.hasOwnProperty('_highquality'));
check_equals(tf._highquality, 1);
tf._highquality = 0;
check_equals(tf._highquality, 0);
@@ -418,7 +418,7 @@
check_equals(typeof(tf._name), 'string');
check(!tf.hasOwnProperty('_name'));
-xcheck(!tf.__proto__.hasOwnProperty('_name'));
+check(!tf.__proto__.hasOwnProperty('_name'));
check_equals(tf._name, 'tf');
tfref = tf;
tf._name = 'changed';
@@ -437,7 +437,7 @@
check_equals(typeof(tf._parent), 'movieclip');
check(!tf.hasOwnProperty('_parent'));
-xcheck(!tf.__proto__.hasOwnProperty('_parent'));
+check(!tf.__proto__.hasOwnProperty('_parent'));
check_equals(tf._parent, _root);
bk = tf._parent;
tf._parent = 23;
@@ -490,7 +490,7 @@
// TODO: check this, might be a string
check_equals(typeof(tf._quality), 'string');
check(!tf.hasOwnProperty('_quality'));
-xcheck(!tf.__proto__.hasOwnProperty('_quality'));
+check(!tf.__proto__.hasOwnProperty('_quality'));
check(!tf.__proto__.__proto__.hasOwnProperty('_quality'));
check(!tf.__proto__.__proto__.__proto__.hasOwnProperty('_quality'));
check_equals(tf._quality, "HIGH");
@@ -539,13 +539,18 @@
// Check TextField._rotation
-xcheck_equals(typeof(tf._rotation), 'number');
+check_equals(typeof(tf._rotation), 'number');
check(!tf.hasOwnProperty('_rotation'));
check(!tf.__proto__.hasOwnProperty('_rotation'));
-xcheck_equals(tf._rotation, 0);
+check_equals(tf._rotation, 0);
+check_equals(tf._width, 500);
tf._rotation = 10;
check_equals(tf._rotation, 10);
+check_equals(tf._width, 579.2);
+check_equals(tf._xscale, 100.0);
tf._rotation = 0;
+check_equals(tf._width, 500.0);
+check_equals(tf._xscale, 100.0);
// Check TextField.scroll
@@ -569,7 +574,7 @@
// Check TextField._soundbuftime
-xcheck_equals(typeof(tf._soundbuftime), 'number');
+check_equals(typeof(tf._soundbuftime), 'number');
check( ! tf.hasOwnProperty('_soundbuftime') );
check( ! tf.__proto__.hasOwnProperty('_soundbuftime') );
xcheck_equals(tf._soundbuftime, 5); // the default is 5, it seems
@@ -598,7 +603,7 @@
check_equals(typeof(tf._target), 'string');
check( ! tf.hasOwnProperty('_target') );
-xcheck( ! tf.__proto__.hasOwnProperty('_target') );
+check( ! tf.__proto__.hasOwnProperty('_target') );
check_equals(tf._target, '/tf');
// TODO: check the effect of changing _name on the _target value
tf._target = "fake_target"; // read-only
@@ -659,12 +664,12 @@
// Check TextField._url (url of the SWF that created the textfield)
-xcheck_equals(typeof(tf._url), 'string');
+check_equals(typeof(tf._url), 'string');
check( ! tf.hasOwnProperty('_url') );
check( ! tf.__proto__.hasOwnProperty('_url') );
-xcheck_equals(tf._url, _root._url);
+check_equals(tf._url, _root._url);
tf._url = "fake url";
-xcheck_equals(tf._url, _root._url); // read-only
+check_equals(tf._url, _root._url); // read-only
//-------------------------------------------------------------------------
// Check TextField.variable (variable name associated with the textfield)
@@ -816,7 +821,7 @@
check_equals(typeof(tf._xmouse), 'number');
check( ! tf.hasOwnProperty('_xmouse') );
-xcheck( ! tf.__proto__.hasOwnProperty('_xmouse') );
+check( ! tf.__proto__.hasOwnProperty('_xmouse') );
currXmouse = tf._xmouse; // unsafe, if user moves the mouse while running the
test
tf._xmouse = "a string";
check_equals(typeof(tf._xmouse), 'number');
@@ -828,7 +833,7 @@
check_equals(typeof(tf._xscale), 'number');
check( ! tf.hasOwnProperty('_xscale') );
-xcheck( ! tf.__proto__.hasOwnProperty('_xscale') );
+check( ! tf.__proto__.hasOwnProperty('_xscale') );
check_equals(tf._xscale, 100);
// check how .textWidth and ._width change when changing _xscale
currTextWidth = tf.textWidth;
@@ -836,7 +841,7 @@
tf._xscale = 200;
note("textWidth: _xscale=100: "+currTextWidth+"; _xscale=200: "+tf.textWidth);
// check_equals(tf.textWidth, currTextWidth*2); // not clear what does
textWidth depend on
-xcheck_equals(tf._width, currWidth*2);
+check_equals(tf._width, currWidth*2);
tf._xscale = 100;
//-------------------------------------------------------------------------
@@ -856,7 +861,7 @@
check_equals(typeof(tf._ymouse), 'number');
check( ! tf.hasOwnProperty('_ymouse') );
-xcheck( ! tf.__proto__.hasOwnProperty('_ymouse') );
+check( ! tf.__proto__.hasOwnProperty('_ymouse') );
currYmouse = tf._ymouse;
tf._ymouse = "a string";
check_equals(typeof(tf._ymouse), 'number');
@@ -868,7 +873,7 @@
check_equals(typeof(tf._yscale), 'number');
check( ! tf.hasOwnProperty('_yscale') );
-xcheck( ! tf.__proto__.hasOwnProperty('_yscale') );
+check( ! tf.__proto__.hasOwnProperty('_yscale') );
check_equals(tf._yscale, 100);
// check how .textHeight and ._height change based on _yscale
currTextHeight = tf.textHeight;
@@ -876,7 +881,7 @@
tf._yscale = 200;
note("textHeight: _yscale=100: "+currTextHeight+"; _yscale=200:
"+tf.textHeight);
// check_equals(tf.textHeight, currTextHeight*2); // not clear what does
textHeight depend on
-xcheck_equals(tf._height, currHeight*2);
+check_equals(tf._height, currHeight*2);
tf._yscale = 100;
//-------------------------------------------------------------------------
@@ -901,9 +906,9 @@
check_equals(tf._width, 10);
#if OUTPUT_VERSION < 8
- xcheck_equals(origTextWidth, tf.textWidth);
+ check_equals(origTextWidth, tf.textWidth);
#else
- check(origTextWidth > tf.textWidth);
+ xcheck(origTextWidth > tf.textWidth);
#endif
// test that adding a newline doesn't change the bounds width
@@ -1096,11 +1101,11 @@
//------------------------------------------------------------
#if OUTPUT_VERSION == 6
- check_totals(477);
+ check_totals(482);
#elif OUTPUT_VERSION == 7
- check_totals(480);
+ check_totals(485);
#elif OUTPUT_VERSION == 8
- check_totals(481);
+ check_totals(486);
#endif
#endif
=== modified file 'testsuite/misc-haxe.all/classes.all/text/TextField_as.hx'
--- a/testsuite/misc-haxe.all/classes.all/text/TextField_as.hx 2009-08-21
21:19:40 +0000
+++ b/testsuite/misc-haxe.all/classes.all/text/TextField_as.hx 2009-10-01
08:58:27 +0000
@@ -107,24 +107,6 @@
DejaGnu.fail("[line "+here.lineNumber+"] ");
}
#end
- //xcheck(!_level0.__shared_assets.instance1._xtrace_win instanceof
TextField);
-#if !flash9
- //if(!untyped
__instanceof__(_level0.__shared_assets.instance1._xtrace_win, TextField)) {
- //DejaGnu.xpass("[line "+here.lineNumber+"] THIS IS AN EXPECTED
FAILURE!!!");
- //} else {
- //DejaGnu.xfail("[line "+here.lineNumber+"] ");
- //}
- //xcheck_equals(typeof(_level0.__shared_assets.instance1._xtrace_win),
- //"movieclip");
- if(typeof(untyped _level0.__shared_assets.instance1._xtrace_win) ==
"movieclip") {
- DejaGnu.xpass("[line "+here.lineNumber+"] ");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] ");
- }
- //note(_level0.__shared_assets.instance1._xtrace_win.toString());
- DejaGnu.note(untyped
_level0.__shared_assets.instance1._xtrace_win.toString());
- //#endif
-#end //if !flash9
#end
//check_equals(typeof(TextField), 'function');
@@ -242,115 +224,7 @@
DejaGnu.fail("[line "+here.lineNumber+"]
TextField.prototype._listeners.length should be 0, is "+untyped
TextField.prototype._listeners.length);
}
#end
- //// NOTE: the following will be true after a call to createTextField !
Seek forward to see..
- //xcheck( !TextField.prototype.hasOwnProperty('background'));
- if(!untyped TextField.prototype.hasOwnProperty('background')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'background'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'background'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('backgroundColor'));
- if(!untyped TextField.prototype.hasOwnProperty('backgroundColor')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'backgroundColor'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'backgroundColor'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('autoSize') );
- if(!untyped TextField.prototype.hasOwnProperty('autoSize')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'autoSize'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'autoSize'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('border') );
- if(!untyped TextField.prototype.hasOwnProperty('border')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'border'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'border'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('borderColor') );
- if(!untyped TextField.prototype.hasOwnProperty('borderColor')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'borderColor'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'borderColor'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('embedFonts') );
- if(!untyped TextField.prototype.hasOwnProperty('embedFonts')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'embedFonts'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'embedFonts'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('htmlText') );
- if(!untyped TextField.prototype.hasOwnProperty('htmlText')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'htmlText'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'htmlText'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('length') );
- if(!untyped TextField.prototype.hasOwnProperty('length')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'length'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'length'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('maxChars') );
- if(!untyped TextField.prototype.hasOwnProperty('maxChars')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'maxChars'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'maxChars'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('multiline') );
- if(!untyped TextField.prototype.hasOwnProperty('multiline')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'multiline'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'multiline'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('restrict') );
- if(!untyped TextField.prototype.hasOwnProperty('restrict')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'restrict'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'restrict'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('selectable') );
- if(!untyped TextField.prototype.hasOwnProperty('selectable')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'selectable'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'selectable'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('text') );
- if(!untyped TextField.prototype.hasOwnProperty('text')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'text'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'text'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('textColor') );
- if(!untyped TextField.prototype.hasOwnProperty('textColor')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'textColor'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'textColor'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('textHeight') ); //
should be available on first instantiation
- if(!untyped TextField.prototype.hasOwnProperty('textHeight')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'textHeight'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'textHeight'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('textWidth') ); // should
be available on first instantiation
- if(!untyped TextField.prototype.hasOwnProperty('textWidth')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'textWidth'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'textWidth'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('type') ); // should be
available on first instantiation
- if(!untyped TextField.prototype.hasOwnProperty('type')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'type'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'type'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('wordWrap') );
- if(!untyped TextField.prototype.hasOwnProperty('wordWrap')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'wordWrap'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'wordWrap'");
- }
+
#if flash9
//xcheck( !TextField.prototype.hasOwnProperty('bottomScrollV') );
if(!untyped TextField.prototype.hasOwnProperty('bottomScrollV')) {
@@ -394,55 +268,6 @@
} else {
DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'scrollV'");
}
-#else
- //xcheck( !TextField.prototype.hasOwnProperty('bottomScroll') );
- if(!untyped TextField.prototype.hasOwnProperty('bottomScroll')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'bottomScroll'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'bottomScroll'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('hscroll') );
- if(!untyped TextField.prototype.hasOwnProperty('hscroll')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'hscroll'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'hscroll'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('html') );
- if(!untyped TextField.prototype.hasOwnProperty('html')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'html'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'html'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('maxhscroll') );
- if(!untyped TextField.prototype.hasOwnProperty('maxhscroll')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'maxhscroll'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'maxhscroll'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('maxscroll') );
- if(!untyped TextField.prototype.hasOwnProperty('maxscroll')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'maxscroll'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'maxscroll'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('password') );
- if(!untyped TextField.prototype.hasOwnProperty('password')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'password'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'password'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('scroll') );
- if(!untyped TextField.prototype.hasOwnProperty('scroll')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'scroll'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'scroll'");
- }
- //xcheck( !TextField.prototype.hasOwnProperty('variable') );
- if(!untyped TextField.prototype.hasOwnProperty('variable')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] TextField.prototype
has own property 'variable'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] TextField.prototype
does not have own property 'variable'");
- }
#end
//// this is a static method
@@ -1465,9 +1290,9 @@
}
//xcheck(!tf.__proto__.hasOwnProperty('_highquality'));
if(!untyped tf.__proto__.hasOwnProperty('_highquality')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_highquality'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_highquality'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_highquality'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_highquality'");
}
//check_equals(tf._highquality, 1);
if(untyped tf._highquality == 1) {
@@ -2133,9 +1958,9 @@
}
//xcheck(!tf.__proto__.hasOwnProperty('_name'));
if(!untyped tf.__proto__.hasOwnProperty('_name')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_name'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_name'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_name'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_name'");
}
//check_equals(tf._name, 'tf');
if(untyped tf._name == 'tf') {
@@ -2242,9 +2067,9 @@
}
//xcheck(!tf.__proto__.hasOwnProperty('_parent'));
if(!untyped tf.__proto__.hasOwnProperty('_parent')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_parent'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_parent'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_parent'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_parent'");
}
//check_equals(tf._parent, _root);
if(untyped tfref._parent == _root) {
@@ -2496,9 +2321,9 @@
}
//xcheck(!tf.__proto__.hasOwnProperty('_quality'));
if(!untyped tf.__proto__.hasOwnProperty('_quality')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_quality'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_quality'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_quality'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_quality'");
}
//check(!tf.__proto__.__proto__.hasOwnProperty('_quality'));
if(!untyped tf.__proto__.__proto__.hasOwnProperty('_quality')) {
@@ -2627,9 +2452,9 @@
_root.createTextField("tf", 99, 10, 10, 500, 500);
//xcheck_equals(typeof(tf._rotation), 'number');
if(typeof(untyped tf._rotation) == 'number') {
- DejaGnu.xpass("[line "+here.lineNumber+"] typeof
tf._rotation is 'number'");
+ DejaGnu.pass("[line "+here.lineNumber+"] typeof
tf._rotation is 'number'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] typeof
tf._rotation should be 'number', is "+typeof(untyped tf._rotation));
+ DejaGnu.fail("[line "+here.lineNumber+"] typeof
tf._rotation should be 'number', is "+typeof(untyped tf._rotation));
}
//check(!tf.hasOwnProperty('_rotation'));
if(!untyped tf.hasOwnProperty('_rotation')) {
@@ -2645,9 +2470,9 @@
}
//xcheck_equals(tf._rotation, 0);
if(untyped tf._rotation == 0) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf._rotation
is 0");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf._rotation
is 0");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf._rotation
should be 0, is "+untyped tf._rotation);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf._rotation
should be 0, is "+untyped tf._rotation);
}
//tf._rotation = 10;
untyped tf._rotation = 10;
@@ -2785,9 +2610,9 @@
#if !flash9
//xcheck_equals(typeof(tf._soundbuftime), 'number');
if(typeof(untyped tf._soundbuftime) == 'number') {
- DejaGnu.xpass("[line "+here.lineNumber+"] typeof
tf._soundbuftime is 'number'");
+ DejaGnu.pass("[line "+here.lineNumber+"] typeof
tf._soundbuftime is 'number'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] typeof
tf._soundbuftime should be 'number', is "+typeof(untyped tf._soundbuftime));
+ DejaGnu.fail("[line "+here.lineNumber+"] typeof
tf._soundbuftime should be 'number', is "+typeof(untyped tf._soundbuftime));
}
//check( ! tf.hasOwnProperty('_soundbuftime') );
if(!untyped tf.hasOwnProperty('_soundbuftime')) {
@@ -2834,12 +2659,14 @@
} else {
DejaGnu.fail("[line "+here.lineNumber+"] tf has own
property 'tabEnabled'");
}
+#if !flash9
//check( ! tf.__proto__.hasOwnProperty('tabEnabled') );
if(!untyped tf.__proto__.hasOwnProperty('tabEnabled')) {
DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property 'tabEnabled'");
} else {
DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property 'tabEnabled'");
}
+#end
//tf.tabEnabled = false;
untyped tf.tabEnabled = false;
//check_equals(tf.tabEnabled, false);
@@ -2877,10 +2704,10 @@
DejaGnu.fail("[line "+here.lineNumber+"] tf has own
property 'tabIndex'");
}
//check( ! tf.__proto__.hasOwnProperty('tabIndex') );
- if(!untyped tf.__proto__.hasOwnProperty('tabIndex')) {
- DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property 'tabIndex'");
+ if(untyped tf.__proto__.hasOwnProperty('tabIndex')) {
+ DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
has own property 'tabIndex'");
} else {
- DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property 'tabIndex'");
+ DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
does not have own property 'tabIndex'");
}
//tf.tabIndex = 9;
untyped tf.tabIndex = 9;
@@ -2911,9 +2738,9 @@
///TODO: This test fails...
//check( ! tf.__proto__.hasOwnProperty('_target') );
if(!untyped tf.__proto__.hasOwnProperty('_target')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_target'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_target'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_target'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_target'");
}
//check_equals(tf._target, '/tf');
if(untyped tf._target == '/tf') {
@@ -3184,9 +3011,9 @@
#if !flash9
//xcheck_equals(typeof(tf._url), 'string');
if(typeof(untyped tf._url) == 'string') {
- DejaGnu.xpass("[line "+here.lineNumber+"] typeof
tf._url is 'string'");
+ DejaGnu.pass("[line "+here.lineNumber+"] typeof tf._url
is 'string'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] typeof
tf._url should be 'string', is "+typeof(untyped tf._url));
+ DejaGnu.fail("[line "+here.lineNumber+"] typeof tf._url
should be 'string', is "+typeof(untyped tf._url));
}
//check( ! tf.hasOwnProperty('_url') );
if(!untyped tf.hasOwnProperty('_url')) {
@@ -3202,17 +3029,17 @@
}
//xcheck_equals(tf._url, _root._url);
if(untyped tf._url == _root._url) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf._url is
_root._url");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf._url is
_root._url");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf._url
should be _root._url, is "+untyped tf._url);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf._url should
be _root._url, is "+untyped tf._url);
}
//tf._url = "fake url";
untyped tf._url = "fake url";
//xcheck_equals(tf._url, _root._url); // read-only
if(untyped tf._url == _root._url) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf._url is
_root._url");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf._url is
_root._url");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf._url
should be _root._url, is "+untyped tf._url);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf._url should
be _root._url, is "+untyped tf._url);
}
#end
}
@@ -3332,54 +3159,6 @@
} else {
DejaGnu.fail("[line "+here.lineNumber+"] tf.text should
be 'back-propagated', is "+untyped tf.text);
}
- //tf.text = "back-to-object"; // instead, assigning to
TextField.text updates the object
- untyped tf.text = "back-to-object";
- ///TODO: This test fails...
- //check_equals(o.t, "back-to-object");
- if(untyped o.t == 'back-to-object') {
- DejaGnu.xpass("[line "+here.lineNumber+"] o.t is
'back-to-object'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] o.t should be
'back-to-object', is "+untyped o.t);
- }
- //o.t = "from object again"; // but updates to the object still
don't update the TextField
- o.t = "from object again";
- //check_equals(tf.text, "back-to-object"); // assigning to the
object doesn't trigger update of text ?
- if(untyped tf.text == 'back-to-object') {
- DejaGnu.pass("[line "+here.lineNumber+"] tf.text is
'back-to-object'");
- } else {
- DejaGnu.fail("[line "+here.lineNumber+"] tf.text should
be 'back-to-object', is "+untyped tf.text);
- }
- //tf.variable = "_level0.o.t"; // We re-assign
TextField.variable, now the variable exists
- untyped tf.variable = "_level0.o.t";
- //xcheck_equals(tf.text, "from object again"); // this time
the TextField.text is updated
- if(untyped tf.text == 'from object again') {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.text is
'from object again'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.text
should be 'from object again', is "+untyped tf.text);
- }
- //check_equals(o.t, "from object again");
- if(untyped o.t == 'from object again') {
- DejaGnu.pass("[line "+here.lineNumber+"] o.t is 'from
object again'");
- } else {
- DejaGnu.fail("[line "+here.lineNumber+"] o.t should be
'from object again', is "+untyped o.t);
- }
- //o.t = "and forever";
- untyped o.t = "and forever";
- //xcheck_equals(tf.text, "from object again"); // but updating
o.t still doesn't trigger update of the text ?
- if(untyped tf.text == 'from object again') {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.text is
'from object again'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.text
should be 'from object again', is "+untyped tf.text);
- }
- //tf.text = "and forever back";
- untyped tf.text = "and forever back";
- ///TODO: This test fails...
- //check_equals(o.t, "and forever back"); // while updating
textfield's text updates o.t
- if(untyped o.t == 'and forever back') {
- DejaGnu.xpass("[line "+here.lineNumber+"] o.t is 'and
forever back'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] o.t should be
'and forever back', is "+untyped o.t);
- }
#end
}
@@ -3902,9 +3681,9 @@
///TODO: This test fails...
//check( ! tf.__proto__.hasOwnProperty('_xmouse') );
if(!untyped tf.__proto__.hasOwnProperty('_xmouse')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_xmouse'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_xmouse'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_xmouse'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_xmouse'");
}
//currXmouse = tf._xmouse; // unsafe, if user moves the mouse
while running the test
var currXmouse = untyped tf._xmouse;
@@ -3994,9 +3773,9 @@
///TODO: This test fails...
//check( ! tf.__proto__.hasOwnProperty('_xscale') );
if(!untyped tf.__proto__.hasOwnProperty('_xscale')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_xscale'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_xscale'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_xscale'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_xscale'");
}
//check_equals(tf._xscale, 100);
if(untyped tf._xscale == 100) {
@@ -4016,9 +3795,9 @@
//// check_equals(tf.textWidth, currTextWidth*2); // not clear
what does textWidth depend on
//xcheck_equals(tf._width, currWidth*2);
if(untyped tf._width == currWidth*2) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf._width is
"+currWidth*2);
+ DejaGnu.pass("[line "+here.lineNumber+"] tf._width is
"+currWidth*2);
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf._width
should be "+currWidth*2+", is "+untyped tf._width);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf._width
should be "+currWidth*2+", is "+untyped tf._width);
}
//tf._xscale = 100;
untyped tf._xscale = 100;
@@ -4157,9 +3936,9 @@
///TODO: This test fails...
//check( ! tf.__proto__.hasOwnProperty('_ymouse') );
if(!untyped tf.__proto__.hasOwnProperty('_ymouse')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_ymouse'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_ymouse'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_ymouse'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_ymouse'");
}
//currYmouse = tf._ymouse; // unsafe, if user moves the mouse
while running the test
var currYmouse = untyped tf._ymouse;
@@ -4249,9 +4028,9 @@
///TODO: This test fails...
//check( ! tf.__proto__.hasOwnProperty('_yscale') );
if(!untyped tf.__proto__.hasOwnProperty('_yscale')) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_yscale'");
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.__proto__
does not have own property '_yscale'");
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.__proto__
has own property '_yscale'");
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.__proto__
has own property '_yscale'");
}
//check_equals(tf._yscale, 100);
if(untyped tf._yscale == 100) {
@@ -4271,9 +4050,9 @@
//// check_equals(tf.textHeight, currTextHeight*2); // not
clear what does textHeight depend on
//xcheck_equals(tf._height, currHeight*2);
if(untyped tf._height == currHeight*2) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf._height is
"+currHeight*2);
+ DejaGnu.pass("[line "+here.lineNumber+"] tf._height is
"+currHeight*2);
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf._height
should be "+currHeight*2+", is "+untyped tf._height);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf._height
should be "+currHeight*2+", is "+untyped tf._height);
}
//tf._yscale = 100;
untyped tf._yscale = 100;
@@ -4348,12 +4127,6 @@
untyped tf.wordWrap = true;
//note("After setting wordWrap flat: textWidth:
"+tf.textWidth+" origTextWidth:"+origTextWidth);
DejaGnu.note("After setting wordWrap flat: textWidth: "+untyped
tf.textWidth+" origTextWidth:"+origTextWidth);
- //check_equals(tf.textWidth, origTextWidth);
- if(untyped tf.textWidth == origTextWidth) {
- DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth
is "+origTextWidth);
- } else {
- DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth
should be "+origTextWidth+", is "+untyped tf.textWidth);
- }
//tf._width = 10;
#if flash9
untyped tf.width = 10;
@@ -4381,17 +4154,17 @@
#if (flash6 || flash7)
//xcheck_equals(origTextWidth, tf.textWidth);
if(origTextWidth == untyped tf.textWidth) {
- DejaGnu.xpass("[line "+here.lineNumber+"] tf.textWidth
is "+origTextWidth);
+ DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth
is "+origTextWidth);
} else {
- DejaGnu.xfail("[line "+here.lineNumber+"] tf.textWidth
should be "+origTextWidth+", is "+untyped tf.textWidth);
+ DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth
should be "+origTextWidth+", is "+untyped tf.textWidth);
}
//#else
#else
//check(origTextWidth > tf.textWidth);
if(origTextWidth > untyped tf.textWidth) {
- DejaGnu.pass("[line "+here.lineNumber+"] tf.textWidth
is less than "+origTextWidth);
+ DejaGnu.xpass("[line "+here.lineNumber+"] tf.textWidth
is less than "+origTextWidth);
} else {
- DejaGnu.fail("[line "+here.lineNumber+"] tf.textWidth
should be less than "+origTextWidth+", is "+untyped tf.textWidth);
+ DejaGnu.xfail("[line "+here.lineNumber+"] tf.textWidth
should be less than "+origTextWidth+", is "+untyped tf.textWidth);
}
//#endif
#end
@@ -5487,12 +5260,6 @@
} else {
DejaGnu.fail("[line "+here.lineNumber+"] _root._target
should be '/', is "+_root._target);
}
- //xcheck_equals(_root._parent, 'fake_parent');
- if(_root._parent == untyped 'fake_parent') {
- DejaGnu.xpass("[line "+here.lineNumber+"] _root._parent
is 'fake_parent'");
- } else {
- DejaGnu.xfail("[line "+here.lineNumber+"] _root._parent
should be 'fake_parent', is "+_root._parent);
- }
//check_equals(_root._name, '');
if(_root._name == '') {
DejaGnu.pass("[line "+here.lineNumber+"] _root._name is
''");
=== modified file 'testsuite/misc-ming.all/DefineEditTextTest.c'
--- a/testsuite/misc-ming.all/DefineEditTextTest.c 2009-02-25 22:33:03
+0000
+++ b/testsuite/misc-ming.all/DefineEditTextTest.c 2009-09-30 15:20:47
+0000
@@ -201,11 +201,11 @@
check(mo, "TextField.prototype.hasOwnProperty('backgroundColor')");
check(mo, "TextField.prototype.hasOwnProperty('text')");
check(mo, "TextField.prototype.hasOwnProperty('textColor')");
- xcheck(mo, "!TextField.prototype.hasOwnProperty('_parent')");
- xcheck(mo, "!TextField.prototype.hasOwnProperty('_xmouse')");
- xcheck(mo, "!TextField.prototype.hasOwnProperty('_ymouse')");
- xcheck(mo, "!TextField.prototype.hasOwnProperty('_xscale')");
- xcheck(mo, "!TextField.prototype.hasOwnProperty('_yscale')");
+ check(mo, "!TextField.prototype.hasOwnProperty('_parent')");
+ check(mo, "!TextField.prototype.hasOwnProperty('_xmouse')");
+ check(mo, "!TextField.prototype.hasOwnProperty('_ymouse')");
+ check(mo, "!TextField.prototype.hasOwnProperty('_xscale')");
+ check(mo, "!TextField.prototype.hasOwnProperty('_yscale')");
check_equals(mo, "typeof(dtext1)", "'object'");
check_equals(mo, "typeof(dtext1.text)", "'string'");
=== modified file 'testsuite/misc-ming.all/DeviceFontTest.c'
--- a/testsuite/misc-ming.all/DeviceFontTest.c 2009-07-15 16:02:52 +0000
+++ b/testsuite/misc-ming.all/DeviceFontTest.c 2009-09-30 15:20:47 +0000
@@ -231,7 +231,7 @@
// Approx 69
xcheck(mo, "tf2.textWidth >= 66 && tf2.textWidth <= 72");
- xcheck_equals(mo, "tf3._width", "1344");
+ check_equals(mo, "tf3._width", "1344");
check_equals(mo, "tf3._height", "20");
xcheck_equals(mo, "tf3._x", "18");
xcheck_equals(mo, "tf3._y", "88");
@@ -239,7 +239,7 @@
// Approx 13
xcheck(mo, "tf3.textWidth >= 11 && tf3.textWidth <= 15");
- xcheck_equals(mo, "tf4._width", "1344");
+ check_equals(mo, "tf4._width", "1344");
check_equals(mo, "tf4._height", "20");
xcheck_equals(mo, "tf4._x", "18");
xcheck_equals(mo, "tf4._y", "118");
@@ -247,7 +247,7 @@
// Approx 9
xcheck(mo, "tf4.textWidth >= 7 && tf4.textWidth <= 11");
- xcheck_equals(mo, "tf5._width", "1344");
+ check_equals(mo, "tf5._width", "1344");
check_equals(mo, "tf5._height", "20");
xcheck_equals(mo, "tf5._x", "18");
xcheck_equals(mo, "tf5._y", "148");
@@ -255,7 +255,7 @@
// Approx 10
xcheck(mo, "tf5.textWidth >= 8 && tf5.textWidth <= 12");
- xcheck_equals(mo, "tf6._width", "1344");
+ check_equals(mo, "tf6._width", "1344");
check_equals(mo, "tf6._height", "20");
xcheck_equals(mo, "tf6._x", "18");
xcheck_equals(mo, "tf6._y", "178");
@@ -263,7 +263,7 @@
// Approx 11
xcheck(mo, "tf6.textWidth >= 9 && tf6.textWidth <= 13");
- xcheck_equals(mo, "tf7._width", "1344");
+ check_equals(mo, "tf7._width", "1344");
check_equals(mo, "tf7._height", "20");
xcheck_equals(mo, "tf7._x", "18");
xcheck_equals(mo, "tf7._y", "208");
@@ -271,7 +271,7 @@
// Approx 14
xcheck(mo, "tf7.textWidth >= 14 && tf7.textWidth <= 16");
- xcheck_equals(mo, "tf8._width", "672");
+ check_equals(mo, "tf8._width", "672");
check_equals(mo, "tf8._height", "20");
xcheck_equals(mo, "tf8._x", "34");
xcheck_equals(mo, "tf8._y", "238");
@@ -279,7 +279,7 @@
// Approx 25
xcheck(mo, "tf8.textWidth >= 21 && tf8.textWidth <= 27");
- xcheck_equals(mo, "tf9._width", "672");
+ check_equals(mo, "tf9._width", "672");
check_equals(mo, "tf9._height", "20");
xcheck_equals(mo, "tf9._x", "34");
xcheck_equals(mo, "tf9._y", "268");
@@ -287,7 +287,7 @@
// Approx 16
xcheck(mo, "tf9.textWidth >= 14 && tf9.textWidth <= 18");
- xcheck_equals(mo, "tf10._width", "16.8");
+ check_equals(mo, "tf10._width", "16.8");
check_equals(mo, "tf10._height", "20");
xcheck_equals(mo, "tf10._x", "49.6");
xcheck_equals(mo, "tf10._y", "298");
@@ -297,7 +297,7 @@
// The textHeight for the following two fields varies.
check_equals(mo, "tf11._width", "84");
- xcheck_equals(mo, "tf11._height", "80");
+ check_equals(mo, "tf11._height", "80");
xcheck_equals(mo, "tf11._x", "48");
xcheck_equals(mo, "tf11._y", "322");
add_actions(mo, "trace(tf11.textWidth);");
@@ -306,7 +306,7 @@
xcheck(mo, "tf11.textWidth >= 305 && tf11.textWidth <= 325");
check_equals(mo, "tf12._width", "84");
- xcheck_equals(mo, "tf12._height", "160");
+ check_equals(mo, "tf12._height", "160");
xcheck_equals(mo, "tf12._x", "48");
xcheck_equals(mo, "tf12._y", "404");
add_actions(mo, "trace(tf12.textWidth);");
=== modified file 'testsuite/misc-ming.all/EmbeddedFontTest.c'
--- a/testsuite/misc-ming.all/EmbeddedFontTest.c 2009-07-15 16:42:57
+0000
+++ b/testsuite/misc-ming.all/EmbeddedFontTest.c 2009-09-30 15:20:47
+0000
@@ -240,7 +240,7 @@
add_actions(mo, "trace(tf2.textWidth);");
xcheck(mo, "tf2.textWidth >= 76 && tf2.textWidth <= 80");
- xcheck_equals(mo, "tf3._width", "1344");
+ check_equals(mo, "tf3._width", "1344");
check_equals(mo, "tf3._height", "20");
xcheck_equals(mo, "tf3._x", "18");
xcheck_equals(mo, "tf3._y", "88");
@@ -249,7 +249,7 @@
add_actions(mo, "trace(tf3.textWidth);");
xcheck(mo, "tf3.textWidth >= 225 && tf3.textWidth <= 235");
- xcheck_equals(mo, "tf4._width", "1344");
+ check_equals(mo, "tf4._width", "1344");
check_equals(mo, "tf4._height", "20");
xcheck_equals(mo, "tf4._x", "18");
xcheck_equals(mo, "tf4._y", "118");
@@ -258,7 +258,7 @@
add_actions(mo, "trace(tf4.textWidth);");
xcheck(mo, "tf4.textWidth >= 153 && tf4.textWidth <= 159");
- xcheck_equals(mo, "tf5._width", "1344");
+ check_equals(mo, "tf5._width", "1344");
check_equals(mo, "tf5._height", "20");
xcheck_equals(mo, "tf5._x", "18");
xcheck_equals(mo, "tf5._y", "148");
@@ -267,7 +267,7 @@
add_actions(mo, "trace(tf5.textWidth);");
xcheck(mo, "tf5.textWidth >= 183 && tf5.textWidth <= 189");
- xcheck_equals(mo, "tf6._width", "1344");
+ check_equals(mo, "tf6._width", "1344");
check_equals(mo, "tf6._height", "20");
xcheck_equals(mo, "tf6._x", "18");
xcheck_equals(mo, "tf6._y", "178");
@@ -276,7 +276,7 @@
add_actions(mo, "trace(tf6.textWidth);");
xcheck(mo, "tf6.textWidth >= 189 && tf6.textWidth <= 199");
- xcheck_equals(mo, "tf7._width", "1344");
+ check_equals(mo, "tf7._width", "1344");
check_equals(mo, "tf7._height", "20");
xcheck_equals(mo, "tf7._x", "18");
xcheck_equals(mo, "tf7._y", "208");
@@ -285,7 +285,7 @@
add_actions(mo, "trace(tf7.textWidth);");
xcheck(mo, "tf7.textWidth >= 240 && tf7.textWidth <= 254");
- xcheck_equals(mo, "tf8._width", "672");
+ check_equals(mo, "tf8._width", "672");
check_equals(mo, "tf8._height", "20");
xcheck_equals(mo, "tf8._x", "34");
xcheck_equals(mo, "tf8._y", "238");
@@ -294,7 +294,7 @@
add_actions(mo, "trace(tf8.textWidth);");
xcheck(mo, "tf8.textWidth >= 217 && tf8.textWidth <= 227");
- xcheck_equals(mo, "tf9._width", "672");
+ check_equals(mo, "tf9._width", "672");
check_equals(mo, "tf9._height", "20");
xcheck_equals(mo, "tf9._x", "34");
xcheck_equals(mo, "tf9._y", "268");
@@ -303,7 +303,7 @@
add_actions(mo, "trace(tf9.textWidth);");
xcheck(mo, "tf9.textWidth >= 144 && tf9.textWidth <= 152");
- xcheck_equals(mo, "tf10._width", "16.8");
+ check_equals(mo, "tf10._width", "16.8");
check_equals(mo, "tf10._height", "20");
xcheck_equals(mo, "tf10._x", "49.6");
xcheck_equals(mo, "tf10._y", "298");
@@ -314,7 +314,7 @@
// The textHeight for the following two fields varies.
check_equals(mo, "tf11._width", "84");
- xcheck_equals(mo, "tf11._height", "80");
+ check_equals(mo, "tf11._height", "80");
xcheck_equals(mo, "tf11._x", "48");
xcheck_equals(mo, "tf11._y", "322");
xcheck_equals(mo, "tf11.textHeight", "23");
@@ -323,7 +323,7 @@
xcheck(mo, "tf11.textWidth >= 84 && tf11.textWidth <= 88");
check_equals(mo, "tf12._width", "84");
- xcheck_equals(mo, "tf12._height", "160");
+ check_equals(mo, "tf12._height", "160");
xcheck_equals(mo, "tf12._x", "48");
xcheck_equals(mo, "tf12._y", "404");
xcheck_equals(mo, "tf12.textHeight", "23");
=== modified file 'testsuite/misc-ming.all/NetStream-SquareTest.c'
--- a/testsuite/misc-ming.all/NetStream-SquareTest.c 2009-09-07 17:34:36
+0000
+++ b/testsuite/misc-ming.all/NetStream-SquareTest.c 2009-09-30 15:20:47
+0000
@@ -436,6 +436,21 @@
check(mo, "!Video.prototype.hasOwnProperty('_yscale')");
check(mo, "!Video.prototype.hasOwnProperty('_xmouse')");
+ check(mo, "!video.hasOwnProperty('_alpha')");
+ check(mo, "!video.hasOwnProperty('_height')");
+ check(mo, "!video.hasOwnProperty('_name')");
+ check(mo, "!video.hasOwnProperty('_parent')");
+ check(mo, "!video.hasOwnProperty('_rotation')");
+ check(mo, "!video.hasOwnProperty('_visible')");
+ check(mo, "!video.hasOwnProperty('_width')");
+ check(mo, "!video.hasOwnProperty('_x')");
+ check(mo, "!video.hasOwnProperty('_xmouse')");
+ check(mo, "!video.hasOwnProperty('_xscale')");
+ check(mo, "!video.hasOwnProperty('_y')");
+ check(mo, "!video.hasOwnProperty('_ymouse')");
+ check(mo, "!video.hasOwnProperty('_yscale')");
+ check(mo, "!video.hasOwnProperty('_xmouse')");
+
add_actions(mo,
"video._x = 100;"
"video._xscale = 120;"
@@ -696,7 +711,7 @@
check_equals(mo, "metadataNotified", "1");
check_equals(mo, "stopNotified", "2");
check_equals(mo, "startNotified", "1");
- SWFMovie_add(mo, (SWFBlock)newSWFAction("totals(183); stop();
end_of_test=true;"));
+ SWFMovie_add(mo, (SWFBlock)newSWFAction("totals(197); stop();
end_of_test=true;"));
SWFMovie_nextFrame(mo);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r11531: Strike another blow for re-entrancy by removing the overridden get_member,
Benjamin Wolsey <=