[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv... |
Date: |
Fri, 02 Nov 2007 15:10:43 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/11/02 15:10:43
Modified files:
. : ChangeLog
server : sprite_instance.cpp sprite_instance.h
server/asobj : Color.cpp Global.cpp
testsuite/actionscript.all: Color.as
testsuite/swfdec: PASSING
Log message:
* server/asobj/Global.cpp: don't forget to initialize the Color
class.
* server/sprite_instance.{cpp,h}: add a _userCxform and accessor
methods; override get_world_cxform to take it into account.
* server/asobj/Color.cpp: implement {get,set}Transform and
{get,set}RGB. Not 100% correct, but good progress on
halloweenpaint.swf (see bug #21498)
* testsuite/actionscript.all/Color.as: test {get,set}Transform
and
{get,set}RGB.
* testsuite/swfdec/PASSING: couple of color-related tests now
succeed,
more still fail.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4759&r2=1.4760
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.375&r2=1.376
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.147&r2=1.148
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Color.cpp?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Global.cpp?cvsroot=gnash&r1=1.74&r2=1.75
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Color.as?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.53&r2=1.54
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4759
retrieving revision 1.4760
diff -u -b -r1.4759 -r1.4760
--- ChangeLog 2 Nov 2007 01:11:43 -0000 1.4759
+++ ChangeLog 2 Nov 2007 15:10:42 -0000 1.4760
@@ -1,5 +1,18 @@
2007-11-02 Sandro Santilli <address@hidden>
+ * server/asobj/Global.cpp: don't forget to initialize the Color class.
+ * server/sprite_instance.{cpp,h}: add a _userCxform and accessor
+ methods; override get_world_cxform to take it into account.
+ * server/asobj/Color.cpp: implement {get,set}Transform and
+ {get,set}RGB. Not 100% correct, but good progress on
+ halloweenpaint.swf (see bug #21498)
+ * testsuite/actionscript.all/Color.as: test {get,set}Transform and
+ {get,set}RGB.
+ * testsuite/swfdec/PASSING: couple of color-related tests now succeed,
+ more still fail.
+
+2007-11-02 Sandro Santilli <address@hidden>
+
* server/drag_state.h: add x/y offset members.
* server/movie_root.cpp (set_drag_state, doMouseDrag):
implement relative dragging. Fixes bug #21496.
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.375
retrieving revision 1.376
diff -u -b -r1.375 -r1.376
--- server/sprite_instance.cpp 1 Nov 2007 21:54:45 -0000 1.375
+++ server/sprite_instance.cpp 2 Nov 2007 15:10:42 -0000 1.376
@@ -3832,4 +3832,12 @@
character::destroy();
}
+cxform
+sprite_instance::get_world_cxform() const
+{
+ cxform cf = character::get_world_cxform();
+ cf.concatenate(_userCxform);
+ return cf;
+}
+
} // namespace gnash
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.147
retrieving revision 1.148
diff -u -b -r1.147 -r1.148
--- server/sprite_instance.h 30 Oct 2007 18:55:42 -0000 1.147
+++ server/sprite_instance.h 2 Nov 2007 15:10:43 -0000 1.148
@@ -271,6 +271,30 @@
///
bool get_frame_number(const as_value& frame_spec, size_t& frameno)
const;
+ /// MovieClip instances need to handle cxform specially
+ //
+ /// This is to suppor the Color asobject class
+ ///
+ cxform get_world_cxform() const;
+
+ /// Update user-defined color transform
+ //
+ /// This should only be used by the Color AS class
+ ///
+ void set_user_cxform(const cxform& cx)
+ {
+ set_invalidated();
+ _userCxform = cx;
+ }
+
+ /// Return the user-defined color transform
+ //
+ /// This should only be used by the Color AS class
+ ///
+ cxform get_user_cxform() const
+ {
+ return _userCxform;
+ }
/// Look up the labeled frame, and jump to it.
bool goto_labeled_frame(const std::string& label);
@@ -976,6 +1000,8 @@
std::string _origTarget;
+ cxform _userCxform;
+
protected:
void place_character(character* ch, int depth,
Index: server/asobj/Color.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Color.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/asobj/Color.cpp 31 Aug 2007 21:53:31 -0000 1.12
+++ server/asobj/Color.cpp 2 Nov 2007 15:10:43 -0000 1.13
@@ -28,22 +28,47 @@
#include "smart_ptr.h" // for boost intrusive_ptr
#include "builtin_function.h" // need builtin_function
#include "Object.h" // for getObjectInterface
+#include "cxform.h" // for composition
+#include "VM.h"
+
+#include <sstream>
+
+// Define this to debug color settings
+//#define GNASH_DEBUG_COLOR 1
namespace gnash {
-as_value color_getrgb(const fn_call& fn);
-as_value color_gettransform(const fn_call& fn);
-as_value color_setrgb(const fn_call& fn);
-as_value color_settransform(const fn_call& fn);
-as_value color_ctor(const fn_call& fn);
+static as_value color_getrgb(const fn_call& fn);
+static as_value color_gettransform(const fn_call& fn);
+static as_value color_setrgb(const fn_call& fn);
+static as_value color_settransform(const fn_call& fn);
+static as_value color_ctor(const fn_call& fn);
static void
attachColorInterface(as_object& o)
{
- o.init_member("getRGB", new builtin_function(color_getrgb));
- o.init_member("getTransform", new builtin_function(color_gettransform));
- o.init_member("setRGB", new builtin_function(color_setrgb));
- o.init_member("setTransform", new builtin_function(color_settransform));
+ VM& vm = o.getVM();
+
+ // Color.setRGB
+ //log_debug("Registering as native 700, 0");
+ vm.registerNative(color_setrgb, 700, 0);
+ o.init_member("setRGB", vm.getNative(700, 0));
+
+ // Color.setTransform
+ //log_debug("Registering as native 700, 1");
+ vm.registerNative(color_settransform, 700, 1);
+ o.init_member("setTransform", vm.getNative(700, 1));
+
+ // Color.getRGB
+ //log_debug("Registering as native 700, 2");
+ vm.registerNative(color_getrgb, 700, 2);
+ o.init_member("getRGB", vm.getNative(700, 2));
+
+ // Color.getTransform
+ //log_debug("Registering as native 700, 3");
+ vm.registerNative(color_gettransform, 700, 3);
+ o.init_member("getTransform", vm.getNative(700, 3));
+
}
static as_object*
@@ -65,64 +90,271 @@
color_as_object()
:
- as_object(getColorInterface())
+ as_object(getColorInterface()),
+ _sprite(0)
+ {}
+
+ color_as_object(sprite_instance* sp)
+ :
+ as_object(getColorInterface()),
+ _sprite(sp)
{}
+ /// Mark associated sprite as reachable
+ //
+ /// Drop sprite instance reference if sprite
+ /// was unloaded.
+ ///
+ void markReachableResources() const
+ {
+ if ( checkSprite() )
+ {
+ assert ( ! _sprite->isUnloaded() );
+ _sprite->setReachable();
+ }
+ markAsObjectReachable();
+ }
+
// override from as_object ?
//std::string get_text_value() const { return "Color"; }
// override from as_object ?
//double get_numeric_value() const { return 0; }
+
+ sprite_instance* getSprite() const
+ {
+ checkSprite();
+ return _sprite;
+ }
+
+ cxform getTransform() const
+ {
+ cxform ret;
+ if ( checkSprite() ) ret = _sprite->get_user_cxform();
+ return ret;
+ }
+
+ void setTransform(const cxform& newTrans)
+ {
+ if ( ! checkSprite() ) return; // nothing to do
+
+#ifdef GNASH_DEBUG_COLOR
+ stringstream ss; ss << newTrans;
+ int r = (int)newTrans.m_[0][1];
+ int g = (int)newTrans.m_[1][1];
+ int b = (int)newTrans.m_[2][1];
+ log_debug ("Color.setnewTransform set newTrans to = %d/%d/%d
(%s)", r, g, b, ss.str().c_str());
+#endif
+
+ _sprite->set_user_cxform(newTrans);
+ }
+
+private:
+
+ /// Drop reference to sprite if unloaded
+ //
+ /// Return true if we have a non-unloaded sprite
+ ///
+ bool checkSprite() const
+ {
+ if ( ! _sprite ) return false;
+ if ( _sprite->isUnloaded() )
+ {
+ _sprite = 0;
+ return false;
+ }
+ return true;
+ }
+
+ mutable sprite_instance* _sprite;
+
};
-as_value color_getrgb(const fn_call& /*fn*/)
+static as_value
+color_getrgb(const fn_call& fn)
{
- static bool warned = false;
- if ( ! warned )
+ boost::intrusive_ptr<color_as_object> obj =
ensureType<color_as_object>(fn.this_ptr);
+
+ sprite_instance* sp = obj->getSprite();
+ if ( ! sp ) return as_value();
+
+ const cxform& trans = obj->getTransform();
+
+ int r = (int)trans.m_[0][1];
+ int g = (int)trans.m_[1][1];
+ int b = (int)trans.m_[2][1];
+#ifdef GNASH_DEBUG_COLOR
+ log_debug ("Color.getRGB found Color transform with rgb = %d/%d/%d
(%f,%f,%f)", r, g, b, trans.m_[0][1], trans.m_[1][1], trans.m_[2][1]);
+#endif
+
+ int32_t rgb = (r<<16) | (g<<8) | b;
+
+ return as_value(rgb);
+}
+
+static as_value
+color_gettransform(const fn_call& fn)
+{
+ boost::intrusive_ptr<color_as_object> obj =
ensureType<color_as_object>(fn.this_ptr);
+
+ sprite_instance* sp = obj->getSprite();
+ if ( ! sp )
{
- log_unimpl (__FUNCTION__);
- warned = true;
- }
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror(_("Color.getTransform(%s) : no or unloaded sprite
associated with the Color object"), ss.str().c_str());
+ );
return as_value();
+ }
+
+ cxform cx = obj->getTransform();
+
+ // TODO: convert to as_object...
+ as_object* ret = new as_object(getObjectInterface());
+
+ ret->init_member("ra", cx.m_[0][0]*100);
+ ret->init_member("ga", cx.m_[1][0]*100);
+ ret->init_member("ba", cx.m_[2][0]*100);
+ ret->init_member("aa", cx.m_[3][0]*100);
+
+ ret->init_member("rb", cx.m_[0][1]*255);
+ ret->init_member("gb", cx.m_[1][1]*255);
+ ret->init_member("bb", cx.m_[2][1]*255);
+ ret->init_member("ab", cx.m_[3][1]*255);
+
+ return ret;
}
-as_value color_gettransform(const fn_call& /*fn*/)
+static as_value
+color_setrgb(const fn_call& fn)
{
- static bool warned = false;
- if ( ! warned )
+ boost::intrusive_ptr<color_as_object> obj =
ensureType<color_as_object>(fn.this_ptr);
+
+ if ( fn.nargs < 1 )
{
- log_unimpl (__FUNCTION__);
- warned = true;
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Color.setRGB() : missing argument"));
+ );
+ return as_value();
}
+
+ int32_t color = fn.arg(0).to_int(fn.env());
+
+ int r = (color&0xFF0000) >> 16;
+ int g = (color&0x00FF00) >> 8;
+ int b = (color&0x0000FF) >> 8;
+
+ cxform newTrans;
+ newTrans.m_[0][1] = r;
+ newTrans.m_[1][1] = g;
+ newTrans.m_[2][1] = b;
+
+ obj->setTransform(newTrans);
+
return as_value();
}
-as_value color_setrgb(const fn_call& /*fn*/)
+static inline void
+parseColorTransProp (as_object& obj, as_environment& env, string_table::key
key, float *target, bool scale)
{
- static bool warned = false;
- if ( ! warned )
+ as_value tmp;
+ double d;
+
+ if ( ! obj.get_member(key, &tmp) ) return;
+ d = tmp.to_number(&env);
+ if ( scale ) *target = d/100;
+ else *target = d;
+}
+
+static as_value
+color_settransform(const fn_call& fn)
+{
+ boost::intrusive_ptr<color_as_object> obj =
ensureType<color_as_object>(fn.this_ptr);
+
+ if ( fn.nargs < 1 )
{
- log_unimpl (__FUNCTION__);
- warned = true;
+ IF_VERBOSE_ASCODING_ERRORS(
+ log_aserror(_("Color.setTransform() : missing argument"));
+ );
+ return as_value();
}
+
+ boost::intrusive_ptr<as_object> trans = fn.arg(0).to_object();
+ if ( ! trans )
+ {
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror(_("Color.setTransform(%s) : first argument doesn't
cast to an object"), ss.str().c_str());
+ );
return as_value();
-}
+ }
-as_value color_settransform(const fn_call& /*fn*/)
-{
- static bool warned = false;
- if ( ! warned )
+ sprite_instance* sp = obj->getSprite();
+ if ( ! sp )
{
- log_unimpl (__FUNCTION__);
- warned = true;
+ IF_VERBOSE_ASCODING_ERRORS(
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror(_("Color.setTransform(%s) : no or unloaded sprite
associated with the Color object"), ss.str().c_str());
+ );
+ return as_value();
}
+
+ string_table& st = obj->getVM().getStringTable();
+ as_environment& env = fn.env();
+
+ cxform newTrans = obj->getTransform();
+
+ // multipliers
+ parseColorTransProp(*trans, env, st.find("ra"), &newTrans.m_[0][0],
true);
+ parseColorTransProp(*trans, env, st.find("ga"), &newTrans.m_[1][0],
true);
+ parseColorTransProp(*trans, env, st.find("ba"), &newTrans.m_[2][0],
true);
+ parseColorTransProp(*trans, env, st.find("aa"), &newTrans.m_[3][0],
true);
+
+ // offsets
+ parseColorTransProp(*trans, env, st.find("rb"), &newTrans.m_[0][1],
false);
+ parseColorTransProp(*trans, env, st.find("gb"), &newTrans.m_[1][1],
false);
+ parseColorTransProp(*trans, env, st.find("bb"), &newTrans.m_[2][1],
false);
+ parseColorTransProp(*trans, env, st.find("ab"), &newTrans.m_[3][1],
false);
+
+ obj->setTransform(newTrans);
+
+#if 1 // debugging
+ std::stringstream ss;
+ as_value tmp;
+ if ( trans->get_member(st.find("ra"), &tmp) ) ss << " ra:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("ga"), &tmp) ) ss << " ga:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("ba"), &tmp) ) ss << " ba:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("aa"), &tmp) ) ss << " aa:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("rb"), &tmp) ) ss << " rb:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("gb"), &tmp) ) ss << " gb:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("bb"), &tmp) ) ss << " bb:" <<
tmp.to_number();
+ if ( trans->get_member(st.find("ab"), &tmp) ) ss << " ab:" <<
tmp.to_number();
+ log_debug("Color.setTransform(%s) : TESTING", ss.str().c_str());
+#endif
+
return as_value();
}
-as_value
-color_ctor(const fn_call& /* fn */)
+static as_value
+color_ctor(const fn_call& fn)
{
- boost::intrusive_ptr<as_object> obj = new color_as_object;
+ sprite_instance* sp=0;
+ if ( fn.nargs )
+ {
+ boost::intrusive_ptr<as_object> arg = fn.arg(0).to_object();
+ if ( arg ) sp = arg->to_movie();
+
+ IF_VERBOSE_ASCODING_ERRORS(
+ if ( ! sp )
+ {
+ std::stringstream ss; fn.dump_args(ss);
+ log_aserror(_("new Color(%s) : first argument doesn't
evaluate to a MovieClip"),
+ ss.str().c_str());
+ }
+ )
+ }
+
+ boost::intrusive_ptr<as_object> obj = new color_as_object(sp);
return as_value(obj.get()); // will keep alive
}
@@ -136,10 +368,6 @@
if ( cl == NULL )
{
cl=new builtin_function(&color_ctor, getColorInterface());
- // replicate all interface to class, to be able to access
- // all methods as static functions
- attachColorInterface(*cl);
-
}
// Register _global.Color
Index: server/asobj/Global.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Global.cpp,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -b -r1.74 -r1.75
--- server/asobj/Global.cpp 25 Oct 2007 10:10:53 -0000 1.74
+++ server/asobj/Global.cpp 2 Nov 2007 15:10:43 -0000 1.75
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: Global.cpp,v 1.74 2007/10/25 10:10:53 strk Exp $ */
+/* $Id: Global.cpp,v 1.75 2007/11/02 15:10:43 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -493,6 +493,8 @@
init_member("NaN", as_value(NAN));
init_member("Infinity", as_value(INFINITY));
+ color_class_init(*this);
+
if ( vm.getSWFVersion() < 6 ) goto extscan;
//-----------------------
// SWF6
Index: testsuite/actionscript.all/Color.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Color.as,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- testsuite/actionscript.all/Color.as 29 Sep 2007 16:22:57 -0000 1.10
+++ testsuite/actionscript.all/Color.as 2 Nov 2007 15:10:43 -0000 1.11
@@ -21,7 +21,7 @@
// compile this test case with Ming makeswf, and then
// execute it like this gnash -1 -r 0 -v out.swf
-rcsid="$Id: Color.as,v 1.10 2007/09/29 16:22:57 strk Exp $";
+rcsid="$Id: Color.as,v 1.11 2007/11/02 15:10:43 strk Exp $";
#include "check.as"
@@ -30,20 +30,141 @@
//--------------------------------
check_equals ( typeof(Color), 'function')
-var colorObj = new Color;
+check_equals ( typeof(Color.prototype), 'object')
+check_equals ( typeof(Color.prototype.getRGB), 'function')
+check_equals ( typeof(Color.prototype.setRGB), 'function')
+check_equals ( typeof(Color.prototype.getTransform), 'function')
+check_equals ( typeof(Color.prototype.setTransform), 'function')
+check_equals ( typeof(Color.getRGB), 'undefined')
+check_equals ( typeof(Color.setRGB), 'undefined')
+check_equals ( typeof(Color.getTransform), 'undefined')
+check_equals ( typeof(Color.setTransform), 'undefined')
+
+#if OUTPUT_VERSION > 5
+check ( Color.prototype.hasOwnProperty('getRGB') );
+check ( Color.prototype.hasOwnProperty('setRGB') );
+check ( Color.prototype.hasOwnProperty('getTransform') );
+check ( Color.prototype.hasOwnProperty('setTransform') );
+#endif
+//-----------------------------------------------------------
// test the Color constuctor
+//-----------------------------------------------------------
+
+colorObj = new Color;
check_equals ( typeof(colorObj), 'object')
+check ( colorObj instanceof Color );
+check ( colorObj instanceof Object );
+check_equals ( typeof(colorObj.getRGB()), 'undefined' );
+check_equals ( typeof(colorObj.getTransform()), 'undefined' );
-// test the Color::getrgb method
-check_equals ( typeof(colorObj.getRGB), 'function');
+colorObj = new Color(__shared_assets);
+check_equals ( typeof(colorObj), 'object')
+check ( colorObj instanceof Color );
+check ( colorObj instanceof Object );
-// test the Color::gettransform method
-check_equals ( typeof(colorObj.getTransform), 'function');
+invalidColorObj = new Color(4);
+check_equals ( typeof(colorObj), 'object')
+check ( colorObj instanceof Color );
+check ( colorObj instanceof Object );
-// test the Color::setrgb method
-check_equals ( typeof(colorObj.setRGB), 'function');
+//-----------------------------------------------------------
+// test the Color::getRGB method
+//-----------------------------------------------------------
+
+rgb = colorObj.getRGB();
+check_equals ( typeof(rgb), 'number' );
+check_equals ( rgb, 0 );
+
+//-----------------------------------------------------------
+// test the Color::getTransform method
+//
+// ra - red multiplier -100 .. +100
+// rb - red offset -255 .. +255
+// ga = green multiplier -100 .. +100
+// gb = green offset -255 .. +255
+// ba = blu multiplier -100 .. +100
+// bb = blu offset offset -255 .. +255
+// aa = alpha multiplier -100 .. +100
+// ab = alpha offset -255 .. +255
+//
+//-----------------------------------------------------------
+
+trans = colorObj.getTransform();
+check_equals ( typeof(trans), 'object' );
+check ( trans instanceof Object );
+check_equals ( trans.ra, 100 );
+check_equals ( trans.rb, 0 );
+check_equals ( trans.ga, 100 );
+check_equals ( trans.gb, 0 );
+check_equals ( trans.ba, 100 );
+check_equals ( trans.bb, 0 );
+check_equals ( trans.aa, 100 );
+check_equals ( trans.ab, 0 );
+
+
+//-----------------------------------------------------------
+// test the Color::setTransform method
+//-----------------------------------------------------------
-// test the Color::settransform method
check_equals ( typeof(colorObj.setTransform), 'function');
+
+trans.rb = 255;
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0xFF0000 );
+
+trans.gb = 128;
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0xFF8000 );
+
+trans.bb = 32;
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0xFF8020 );
+
+trans = { ra:-100, ga:-50, ba:50 };
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0xFF8020 );
+
+trans = { rb:0 }; // only modify the red channel
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0x008020 );
+
+o = {}; o.valueOf = function() { return 255; };
+trans = { gb:o }; // only modify the green channel
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0x00FF20 );
+
+trans = { bb:2 }; // only modify the blue channel
+colorObj.setTransform(trans);
+rgb = colorObj.getRGB();
+check_equals ( rgb, 0x00FF02 );
+
+//-----------------------------------------------------------
+// test the Color::setRGB method
+//-----------------------------------------------------------
+
+check_equals ( typeof(colorObj.setRGB), 'function');
+colorObj.setRGB(0x667799);
+xcheck_equals ( colorObj.getRGB(), 0x667799 );
+trans = colorObj.getTransform();
+xcheck_equals ( trans.ra, 0 );
+xcheck_equals ( trans.rb, 102 );
+xcheck_equals ( trans.ga, 0 );
+xcheck_equals ( trans.gb, 119 );
+xcheck_equals ( trans.ba, 0 );
+xcheck_equals ( trans.bb, 153 );
+check_equals ( trans.aa, 100 );
+check_equals ( trans.ab, 0 );
+
+//-----------------------------------------------------------
+// end of test
+//-----------------------------------------------------------
+
+
totals();
Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- testsuite/swfdec/PASSING 1 Nov 2007 16:14:21 -0000 1.53
+++ testsuite/swfdec/PASSING 2 Nov 2007 15:10:43 -0000 1.54
@@ -52,7 +52,9 @@
clonesprite-depths-6.swf:6f33073bf356c451df4934aa95e49646
clonesprite-depths-7.swf:c70968c65e52392d9c61470d0d698394
clonesprite-depths-8.swf:af472e7f31b31e886ca86430fb71106f
+color-getters.swf:4cee4418f75171e7bf423759a468b36b
color-new.swf:b19cf3d46f416b919eb312da473b6756
+color-setTransform-negative.swf:0bc0510c35fc5c82de31b0db887fe535
comparisons-5.swf:d4dfeb4ec80ec1f5a7390eb699e269ee
comparisons-6.swf:5a7bf1ffb3a4dd23828d6e180f1871b0
comparisons-7.swf:2e53fca820ad47ebb1bfef696f61527a
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...,
Sandro Santilli <=