gnash-commit
[Top][All Lists]
Advanced

[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




reply via email to

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