CVSROOT: /sources/gnash Module name: gnash Changes by: Chad Musick <cmusick> 07/08/27 03:06:43
Modified files: server : BevelFilter.cpp BevelFilter.h BitmapFilter.h stream.cpp server/asobj : Makefile.am server/parser : filter_factory.cpp server/vm : ASHandlers.cpp ASHandlers.h . : ChangeLog Added files: server/asobj : BevelFilter_as.cpp BevelFilter_as.h BitmapFilter_as.h BitmapFilter_as.cpp Log message: Make Filters more compatible with ActionScript -- this commit includes such changes for BitmapFilter and BevelFilter. More to follow. Remove some dead code from stream.cpp and fix some compiler dependant code in ASHandlers. Fix a typing bug in filter_factory. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/server/BevelFilter.cpp?cvsroot=gnash&r1=1.1&r2=1.2 http://cvs.savannah.gnu.org/viewcvs/gnash/server/BevelFilter.h?cvsroot=gnash&r1=1.1&r2=1.2 http://cvs.savannah.gnu.org/viewcvs/gnash/server/BitmapFilter.h?cvsroot=gnash&r1=1.1&r2=1.2 http://cvs.savannah.gnu.org/viewcvs/gnash/server/stream.cpp?cvsroot=gnash&r1=1.25&r2=1.26 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Makefile.am?cvsroot=gnash&r1=1.41&r2=1.42 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/BevelFilter_as.cpp?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/BevelFilter_as.h?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/BitmapFilter_as.h?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/BitmapFilter_as.cpp?cvsroot=gnash&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/filter_factory.cpp?cvsroot=gnash&r1=1.1&r2=1.2 http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.127&r2=1.128 http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.h?cvsroot=gnash&r1=1.9&r2=1.10 http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4108&r2=1.4109 Patches: Index: server/BevelFilter.cpp =================================================================== RCS file: /sources/gnash/gnash/server/BevelFilter.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- server/BevelFilter.cpp 26 Aug 2007 15:14:10 -0000 1.1 +++ server/BevelFilter.cpp 27 Aug 2007 03:06:41 -0000 1.2 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: BevelFilter.cpp,v 1.1 2007/08/26 15:14:10 cmusick Exp $ */ +/* $Id: BevelFilter.cpp,v 1.2 2007/08/27 03:06:41 cmusick Exp $ */ #include "BevelFilter.h" @@ -30,6 +30,9 @@ Filter p(new BevelFilter(m_distance, m_angle, m_highlightColor, m_highlightAlpha, m_shadowColor, m_shadowAlpha, m_blurX, m_blurY, m_strength, m_quality, m_type, m_knockout)); + p->set_prototype(get_prototype()); + p->copyProperties(*this); + return p; } Index: server/BevelFilter.h =================================================================== RCS file: /sources/gnash/gnash/server/BevelFilter.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- server/BevelFilter.h 26 Aug 2007 15:14:10 -0000 1.1 +++ server/BevelFilter.h 27 Aug 2007 03:06:41 -0000 1.2 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: BevelFilter.h,v 1.1 2007/08/26 15:14:10 cmusick Exp $ */ +/* $Id: BevelFilter.h,v 1.2 2007/08/27 03:06:41 cmusick Exp $ */ #ifndef GNASH_BEVELFILTER_H #define GNASH_BEVELFILTER_H @@ -28,10 +28,14 @@ namespace gnash { +class BevelFilter_as; // Adapter class for AS use. + // A bevel effect filter. class BevelFilter : public BitmapFilter { public: + friend class BevelFilter_as; + typedef enum { OUTER_BEVEL = 1, @@ -48,6 +52,13 @@ // Guaranteed to return an object which can be cast to BlurFilter Filter const clone(); + BevelFilter(as_object* o) : BitmapFilter(o), + m_distance(0.0f), m_angle(0.0f), m_highlightColor(0), + m_highlightAlpha(0), m_shadowColor(0), m_shadowAlpha(0), + m_blurX(0.0f), m_blurY(0.0f), m_strength(0.0f), m_quality(0), + m_type(FULL_BEVEL), m_knockout(false) + { return; } + BevelFilter() : m_distance(0.0f), m_angle(0.0f), m_highlightColor(0), m_highlightAlpha(0), m_shadowColor(0), m_shadowAlpha(0), Index: server/BitmapFilter.h =================================================================== RCS file: /sources/gnash/gnash/server/BitmapFilter.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- server/BitmapFilter.h 26 Aug 2007 15:14:10 -0000 1.1 +++ server/BitmapFilter.h 27 Aug 2007 03:06:41 -0000 1.2 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: BitmapFilter.h,v 1.1 2007/08/26 15:14:10 cmusick Exp $ */ +/* $Id: BitmapFilter.h,v 1.2 2007/08/27 03:06:41 cmusick Exp $ */ #ifndef GNASH_BITMAPFILTER_H #define GNASH_BITMAPFILTER_H @@ -30,20 +30,26 @@ class stream; class BitmapFilter; - +class BitmapFilter_as; // Adapter pattern to ActionScript typedef boost::intrusive_ptr<BitmapFilter> Filter; // The common base class for AS display filters. class BitmapFilter : public as_object { public: + friend class BitmapFilter_as; + // Fill from a stream. See parser/filter_factory.cpp for the implementations. - virtual bool read(stream* in) = 0; + virtual bool read(stream* /*in*/) { return true; } + // Pass the interface up the chain. + BitmapFilter(as_object *interface) : as_object(interface) { return; } + // For non-ActionScript use. + BitmapFilter() { return; } virtual ~BitmapFilter() { return; } // Clone this object and return a copy of it. (AS accessible function.) - Filter const clone(); + virtual Filter const clone() { return NULL; } }; } // Namespace gnash Index: server/stream.cpp =================================================================== RCS file: /sources/gnash/gnash/server/stream.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -u -b -r1.25 -r1.26 --- server/stream.cpp 26 Aug 2007 15:14:12 -0000 1.25 +++ server/stream.cpp 27 Aug 2007 03:06:41 -0000 1.26 @@ -116,14 +116,8 @@ float stream::read_fixed() { -#if 0 /* Chad */ - m_unused_bits = 0; - int32_t val = m_input->read_le32(); - return (float) val / 65536.0f; -#else align(); return static_cast<float> (static_cast<double> (static_cast<long int> (m_input->read_le32())) / 65536.0f); -#endif /* Chad */ } // float is not large enough to hold a 32 bit value without doing the wrong thing with the sign. Index: server/asobj/Makefile.am =================================================================== RCS file: /sources/gnash/gnash/server/asobj/Makefile.am,v retrieving revision 1.41 retrieving revision 1.42 diff -u -b -r1.41 -r1.42 --- server/asobj/Makefile.am 1 Jul 2007 10:54:28 -0000 1.41 +++ server/asobj/Makefile.am 27 Aug 2007 03:06:42 -0000 1.42 @@ -15,7 +15,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# $Id: Makefile.am,v 1.41 2007/07/01 10:54:28 bjacques Exp $ +# $Id: Makefile.am,v 1.42 2007/08/27 03:06:42 cmusick Exp $ AUTOMAKE_OPTIONS = @@ -43,6 +43,8 @@ libgnashasobjs_la_SOURCES = \ + BevelFilter_as.cpp \ + BitmapFilter_as.cpp \ Boolean.cpp \ Camera.cpp \ Color.cpp \ @@ -76,6 +78,8 @@ $(NULL) noinst_HEADERS = \ + BevelFilter_as.h \ + BitmapFilter_as.h \ Boolean.h \ Camera.h \ Color.h \ Index: server/parser/filter_factory.cpp =================================================================== RCS file: /sources/gnash/gnash/server/parser/filter_factory.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- server/parser/filter_factory.cpp 26 Aug 2007 15:14:13 -0000 1.1 +++ server/parser/filter_factory.cpp 27 Aug 2007 03:06:42 -0000 1.2 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: filter_factory.cpp,v 1.1 2007/08/26 15:14:13 cmusick Exp $ */ +/* $Id: filter_factory.cpp,v 1.2 2007/08/27 03:06:42 cmusick Exp $ */ #include "filter_factory.h" #include "BitmapFilter.h" @@ -196,7 +196,7 @@ bool GradientGlowFilter::read(stream* in) { - bool count = in->read_u8(); // How many colorings. + uint8_t count = in->read_u8(); // How many colorings. for (int i = 0; i < count; ++i) { @@ -265,7 +265,7 @@ bool GradientBevelFilter::read(stream* in) { - bool count = in->read_u8(); // How many colorings. + uint8_t count = in->read_u8(); // How many colorings. for (int i = 0; i < count; ++i) { Index: server/vm/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v retrieving revision 1.127 retrieving revision 1.128 diff -u -b -r1.127 -r1.128 --- server/vm/ASHandlers.cpp 25 Aug 2007 16:10:37 -0000 1.127 +++ server/vm/ASHandlers.cpp 27 Aug 2007 03:06:42 -0000 1.128 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: ASHandlers.cpp,v 1.127 2007/08/25 16:10:37 strk Exp $ */ +/* $Id: ASHandlers.cpp,v 1.128 2007/08/27 03:06:42 cmusick Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1386,7 +1386,7 @@ } as_encoding_guess_t -SWFHandlers::GuessEncoding(std::string &str, int &length, int *offsets) +SWFHandlers::GuessEncoding(std::string &str, int &length, std::vector<int>& offsets) { const char *cstr = str.c_str(); const char *i = cstr; @@ -1409,7 +1409,7 @@ continue; } ++length; - *(offsets + length - 1) = index; + offsets[length - 1] = index; if ((j & 0xC0) == 0x80) continue; // A 1 byte character. @@ -1422,7 +1422,7 @@ else if (j & 0x80) is_sought = false; } - *(offsets + length - 1) = index; + offsets[length - 1] = index; if (!width && is_sought) // No width left, so it's almost certainly UTF8. return ENCGUESS_UNICODE; @@ -1448,7 +1448,7 @@ } ++length; - *(offsets + length - 1) = index; + offsets[length - 1] = index; if ((j == 0x80) || (j == 0xA0) || (j >= 0xF0)) { @@ -1464,7 +1464,7 @@ } } - *(offsets + length - 1) = index; + offsets[length - 1] = index; if (!width && is_sought) // No width left, so it's probably SHIFT_JIS. return ENCGUESS_JIS; @@ -1491,7 +1491,8 @@ else { int length; - (void) GuessEncoding(str, length, NULL); + std::vector<int> unused; + (void) GuessEncoding(str, length, unused); env.top(0).set_int(length); } } @@ -1571,7 +1572,8 @@ string str = string_val.to_string(&env); int length = 0; - int offsets[str.length() + 1]; + std::vector<int> offsets; + offsets.reserve(str.length() + 1); as_encoding_guess_t encoding = GuessEncoding(str, length, offsets); Index: server/vm/ASHandlers.h =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -b -r1.9 -r1.10 --- server/vm/ASHandlers.h 20 Aug 2007 03:25:09 -0000 1.9 +++ server/vm/ASHandlers.h 27 Aug 2007 03:06:42 -0000 1.10 @@ -165,7 +165,8 @@ // and the offsets to the characters in offsets, if offsets is not NULL. // If not NULL, offsets should be at least s.length(). // offsets are not accurate if the return value is GUESSENC_OTHER - static as_encoding_guess_t GuessEncoding(std::string& s, int& length, int *offsets); + static as_encoding_guess_t GuessEncoding(std::string& s, int& length, + std::vector<int>& offsets); static void ActionEnd(ActionExec& thread); static void ActionNextFrame(ActionExec& thread); Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4108 retrieving revision 1.4109 diff -u -b -r1.4108 -r1.4109 --- ChangeLog 26 Aug 2007 20:56:50 -0000 1.4108 +++ ChangeLog 27 Aug 2007 03:06:42 -0000 1.4109 @@ -1,3 +1,17 @@ +2007-08-27 Chad Musick <[EMAIL PROTECTED]> + + * server/BevelFilter.cpp,.h: Fuller conversion to AS compatible + * server/BitmapFilter.h: Fuller conversion to AS compatible + * server/stream.cpp: Remove dead code from read_fixed + * server/asobj/Makefile.am Add new files + * server/parser/filter_factory.cpp: Removed typo bug pointed out by + Zou. + * server/vm/ASHandlers.cpp,.h: Remove use of variable sized array. + * server/asobj/BevelFilter_as.cpp,.h: Adapter pattern object for using + BevelFilter inside of ActionScript (not yet put in global) + * server/asobj/BitmapFilter_as.cpp,.h: Adapater pattern object for + using BitmapFilter inside of ActionScript (not yet put in global) + 2007-08-26 Deanna Phillips <deanna> * doc/gnash.1: Updated. Index: server/asobj/BevelFilter_as.cpp =================================================================== RCS file: server/asobj/BevelFilter_as.cpp diff -N server/asobj/BevelFilter_as.cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ server/asobj/BevelFilter_as.cpp 27 Aug 2007 03:06:42 -0000 1.1 @@ -0,0 +1,362 @@ +// +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +/* $Id: BevelFilter_as.cpp,v 1.1 2007/08/27 03:06:42 cmusick Exp $ */ + +#include "BitmapFilter_as.h" +#include "BevelFilter.h" +#include "VM.h" +#include "builtin_function.h" + +namespace gnash { + +class BevelFilter_as +{ +public: + static as_object* Interface(); // To a BitmapFilter + static void attachInterface(as_object& o); // Attach the interface. + static void attachProperties(as_object& o); // Attach the properties. + + static void registerCtor(as_object& global); // public ctor + static as_value ctor(const fn_call& fn); // constructor for BitmapFilter + + // Get set functions for ActionScript + static as_value distance_gs(const fn_call& fn); + static as_value angle_gs(const fn_call& fn); + static as_value highlightColor_gs(const fn_call& fn); + static as_value highlightAlpha_gs(const fn_call& fn); + static as_value shadowColor_gs(const fn_call& fn); + static as_value shadowAlpha_gs(const fn_call& fn); + static as_value blurX_gs(const fn_call& fn); + static as_value blurY_gs(const fn_call& fn); + static as_value strength_gs(const fn_call& fn); + static as_value quality_gs(const fn_call& fn); + static as_value type_gs(const fn_call& fn); + static as_value knockout_gs(const fn_call& fn); + +private: + static boost::intrusive_ptr<as_object> s_interface; + static boost::intrusive_ptr<builtin_function> s_ctor; +}; + +boost::intrusive_ptr<as_object> BevelFilter_as::s_interface; +boost::intrusive_ptr<builtin_function> BevelFilter_as::s_ctor; + +as_object* +BevelFilter_as::Interface() +{ + if (BevelFilter_as::s_interface == NULL) + { + BevelFilter_as::s_interface = new as_object(bitmapFilter_interface()); + VM::get().addStatic(BevelFilter_as::s_interface.get()); + + BevelFilter_as::attachInterface(*BevelFilter_as::s_interface); + } + + return BevelFilter_as::s_interface.get(); +} + +void +BevelFilter_as::attachInterface(as_object& /*o*/) +{ + // Filters are all properties. + return; +} + +void +BevelFilter_as::attachProperties(as_object& o) +{ + boost::intrusive_ptr<builtin_function> gs; + + gs = new builtin_function(BevelFilter_as::distance_gs, NULL); + o.init_property("distance", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::angle_gs, NULL); + o.init_property("angle", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::highlightColor_gs, NULL); + o.init_property("highlightColor", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::highlightAlpha_gs, NULL); + o.init_property("highlightAlpha", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::shadowColor_gs, NULL); + o.init_property("shadowColor", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::shadowAlpha_gs, NULL); + o.init_property("shadowAlpha", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::blurX_gs, NULL); + o.init_property("blurX", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::blurY_gs, NULL); + o.init_property("blurY", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::strength_gs, NULL); + o.init_property("strength", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::quality_gs, NULL); + o.init_property("quality", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::type_gs, NULL); + o.init_property("type", *gs, *gs); + + gs = new builtin_function(BevelFilter_as::knockout_gs, NULL); + o.init_property("knockout", *gs, *gs); +} + +as_value +BevelFilter_as::distance_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_distance); + } + // setter + float distance = fn.arg(0).to_number<float>(); + ptr->m_distance = distance; + + return as_value(); +} + +as_value +BevelFilter_as::angle_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_angle); + } + // setter + float angle = fn.arg(0).to_number<float>(); + ptr->m_angle = angle; + + return as_value(); +} + +as_value +BevelFilter_as::highlightColor_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_highlightColor); + } + // setter + uint32_t highlightColor = fn.arg(0).to_number<uint32_t>(); + ptr->m_highlightColor = highlightColor; + + return as_value(); +} + +as_value +BevelFilter_as::highlightAlpha_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_highlightAlpha); + } + // setter + uint8_t highlightAlpha = fn.arg(0).to_number<uint8_t>(); + ptr->m_highlightAlpha = highlightAlpha; + + return as_value(); +} + +as_value +BevelFilter_as::shadowColor_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_shadowColor); + } + // setter + uint32_t shadowColor = fn.arg(0).to_number<uint32_t>(); + ptr->m_shadowColor = shadowColor; + + return as_value(); +} + +as_value +BevelFilter_as::shadowAlpha_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_shadowAlpha); + } + // setter + uint8_t shadowAlpha = fn.arg(0).to_number<uint8_t>(); + ptr->m_shadowAlpha = shadowAlpha; + + return as_value(); +} + +as_value +BevelFilter_as::blurX_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_blurX); + } + // setter + float blurX = fn.arg(0).to_number<float>(); + ptr->m_blurX = blurX; + + return as_value(); +} + +as_value +BevelFilter_as::blurY_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_blurY); + } + // setter + float blurY = fn.arg(0).to_number<float>(); + ptr->m_blurY = blurY; + + return as_value(); +} + +as_value +BevelFilter_as::strength_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_strength); + } + // setter + float strength = fn.arg(0).to_number<float>(); + ptr->m_strength = strength; + + return as_value(); +} + +void +BevelFilter_as::registerCtor(as_object& global) +{ + if (BevelFilter_as::s_ctor != NULL) + return; + + BevelFilter_as::s_ctor = new builtin_function(&BevelFilter_as::ctor, + BevelFilter_as::Interface()); + VM::get().addStatic(BevelFilter_as::s_ctor.get()); + + // TODO: Is this correct? + BevelFilter_as::attachInterface(*BevelFilter_as::s_ctor); + + global.init_member("BevelFilter", BevelFilter_as::s_ctor.get()); +} + +as_value +BevelFilter_as::quality_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_quality); + } + // setter + uint8_t quality = fn.arg(0).to_number<uint8_t>(); + ptr->m_quality = quality; + + return as_value(); +} + +as_value +BevelFilter_as::type_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + switch (ptr->m_type) + { + case BevelFilter::FULL_BEVEL: + return as_value("full"); + break; + default: + case BevelFilter::INNER_BEVEL: + return as_value("inner"); + break; + case BevelFilter::OUTER_BEVEL: + return as_value("outer"); + break; + } + } + // setter + string type = fn.arg(0).to_string(); + if (type == "outer") + ptr->m_type = BevelFilter::OUTER_BEVEL; + if (type == "inner") + ptr->m_type = BevelFilter::INNER_BEVEL; + if (type == "full") + ptr->m_type = BevelFilter::FULL_BEVEL; + + return as_value(); +} + +as_value +BevelFilter_as::knockout_gs(const fn_call& fn) +{ + boost::intrusive_ptr<BevelFilter> ptr = ensureType<BevelFilter>(fn.this_ptr); + + if (fn.nargs == 0) // getter + { + return as_value(ptr->m_knockout); + } + // setter + bool knockout = fn.arg(0).to_bool(); + ptr->m_knockout = knockout; + + return as_value(); +} + +as_value +BevelFilter_as::ctor(const fn_call& /*fn*/) +{ + boost::intrusive_ptr<as_object> obj = new BevelFilter(BevelFilter_as::Interface()); + BevelFilter_as::attachProperties(*obj); + + return as_value(obj.get()); +} + +void bevelFilter_class_init(as_object& global) +{ + BevelFilter_as::registerCtor(global); +} + +} // Namespace gnash + Index: server/asobj/BevelFilter_as.h =================================================================== RCS file: server/asobj/BevelFilter_as.h diff -N server/asobj/BevelFilter_as.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ server/asobj/BevelFilter_as.h 27 Aug 2007 03:06:42 -0000 1.1 @@ -0,0 +1,37 @@ +// +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __GNASH_ASOBJ_BEVELFILTER_H__ +#define __GNASH_ASOBJ_BEVELFILTER_H__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +namespace gnash { + +class as_object; + +/// Initialize the global BitmapFilter class +void bevelFilter_class_init(as_object& global); + +} // end of gnash namespace + +// __GNASH_ASOBJ_BEVELFILTER_H__ +#endif + Index: server/asobj/BitmapFilter_as.h =================================================================== RCS file: server/asobj/BitmapFilter_as.h diff -N server/asobj/BitmapFilter_as.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ server/asobj/BitmapFilter_as.h 27 Aug 2007 03:06:42 -0000 1.1 @@ -0,0 +1,40 @@ +// +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __GNASH_ASOBJ_BITMAPFILTER_H__ +#define __GNASH_ASOBJ_BITMAPFILTER_H__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +namespace gnash { + +class as_object; + +/// Initialize the global BitmapFilter class +void bitmapFilter_class_init(as_object& global); + +/// Get the interface, for inheritance. +as_object *bitmapFilter_interface(); + +} // end of gnash namespace + +// __GNASH_ASOBJ_BITMAPFILTER_H__ +#endif + Index: server/asobj/BitmapFilter_as.cpp =================================================================== RCS file: server/asobj/BitmapFilter_as.cpp diff -N server/asobj/BitmapFilter_as.cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ server/asobj/BitmapFilter_as.cpp 27 Aug 2007 03:06:42 -0000 1.1 @@ -0,0 +1,108 @@ +// +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +/* $Id: BitmapFilter_as.cpp,v 1.1 2007/08/27 03:06:42 cmusick Exp $ */ + +#include "BitmapFilter.h" +#include "VM.h" +#include "builtin_function.h" + +namespace gnash { + +class BitmapFilter_as +{ +public: + static as_object* Interface(); // To a BitmapFilter + static void attachInterface(as_object& o); // Attach the interface. + static void registerCtor(as_object& global); // public ctor + static as_value ctor(const fn_call& fn); // constructor for BitmapFilter + + static as_value bitmap_clone(const fn_call& fn); + +private: + static boost::intrusive_ptr<as_object> s_interface; + static boost::intrusive_ptr<builtin_function> s_ctor; +}; + +boost::intrusive_ptr<as_object> BitmapFilter_as::s_interface; +boost::intrusive_ptr<builtin_function> BitmapFilter_as::s_ctor; + +as_object* +BitmapFilter_as::Interface() +{ + if (BitmapFilter_as::s_interface == NULL) + { + BitmapFilter_as::s_interface = new as_object; + VM::get().addStatic(BitmapFilter_as::s_interface.get()); + + BitmapFilter_as::attachInterface(*BitmapFilter_as::s_interface); + } + + return BitmapFilter_as::s_interface.get(); +} + +void +BitmapFilter_as::attachInterface(as_object& o) +{ + o.init_member("clone", new builtin_function(bitmap_clone)); +} + +void +BitmapFilter_as::registerCtor(as_object& global) +{ + if (BitmapFilter_as::s_ctor != NULL) + return; + + BitmapFilter_as::s_ctor = new builtin_function(&BitmapFilter_as::ctor, + BitmapFilter_as::Interface()); + VM::get().addStatic(BitmapFilter_as::s_ctor.get()); + + // TODO: Is this correct? + BitmapFilter_as::attachInterface(*BitmapFilter_as::s_ctor); + + global.init_member("BitmapFilter", BitmapFilter_as::s_ctor.get()); +} + +as_value +BitmapFilter_as::ctor(const fn_call& /*fn*/) +{ + boost::intrusive_ptr<as_object> obj = new BitmapFilter(BitmapFilter_as::Interface()); + return as_value(obj.get()); +} + +as_value BitmapFilter_as::bitmap_clone(const fn_call& fn) +{ + boost::intrusive_ptr<BitmapFilter> filter = ensureType<BitmapFilter> (fn.this_ptr); + boost::intrusive_ptr<as_object> retval = filter->clone(); + retval->set_prototype(filter->get_prototype()); + + return as_value(retval); +} + +void bitmapFilter_class_init(as_object& global) +{ + BitmapFilter_as::registerCtor(global); +} + +as_object* +bitmapFilter_interface() +{ + return BitmapFilter_as::Interface(); +} + +} // Namespace gnash + _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit