void goto_record_method(const fn_call& fn) // Moves row pointer to the fn.arg(0).to_number() { mytable* tbl = cast_to<mytable>(fn.this_ptr); if (tbl) { assert(fn.nargs == 1); fn.result->set_bool(tbl->goto_record(fn.arg(0).to_int())); } }
void as_date_setfullyear(const fn_call& fn) { as_date* dt = cast_to<as_date>(fn.this_ptr); assert(dt); if (fn.nargs > 0) { dt->set(as_date::FULLYEAR, fn.arg(0).to_int()); fn.result->set_double(dt->get_time()); } }
void as_global_trace(const fn_call& fn) { assert(fn.nargs >= 1); // Log our argument. // // @@ what if we get extra args? const char* val = ""; if (fn.arg(0).is_undefined()) { val = "undefined"; } else { val = fn.arg(0).to_string(); } log_msg("%s\n", val); }
// this callback takes 4 arguments, we only need two of them // g_signal_connect (instance, detailed_signal, c_handler, data) as_value gtkext_signal_connect(const fn_call& fn) { // GNASH_REPORT_FUNCTION; boost::intrusive_ptr<GtkExt> ptr = ensureType<GtkExt>(fn.this_ptr); if (fn.nargs > 0) { GtkExt *window = dynamic_cast<GtkExt *>(fn.arg(0).to_object(*getGlobal(fn)).get()); string name = fn.arg(1).to_string(); as_value func = fn.arg(2).to_function(); //int data = fn.arg(3).to_int(); dbglogfile << "Adding callback " << func.to_string() << " for event \"" << name << "\"" << endl; callbacks[name] = func; g_signal_connect (G_OBJECT (window->getWindow()), name.c_str(), G_CALLBACK (generic_callback), (void *)name.c_str()); } return as_value(); }
// g_signal_connect_swapped(instance, detailed_signal, c_handler, data) // // Connects a GCallback function to a signal for a particular object. // // The instance on which the signal is emitted and data will be swapped when calling the handler. // instance : the instance to connect to. // detailed_signal : a string of the form "signal-name::detail". // c_handler : the GCallback to connect. // data : data to pass to c_handler calls. // Returns : the handler id as_value gtkext_signal_connect_swapped(const fn_call& fn) { GNASH_REPORT_FUNCTION; boost::intrusive_ptr<GtkExt> ptr = ensureType<GtkExt>(fn.this_ptr); if (fn.nargs > 0) { GtkExt *parent = dynamic_cast<GtkExt *>(fn.arg(0).to_object(*getGlobal(fn)).get()); string name = (fn.arg(1).to_string()); GtkExt *child = dynamic_cast<GtkExt *>(fn.arg(3).to_object(*getGlobal(fn)).get()); // currently unused // as_value *callback = dynamic_cast<as_value *>(fn.arg(2).to_object(*getGlobal(fn))); // FIXME: This seems to cause an Gobject warning g_signal_connect_swapped (G_OBJECT (child->getWindow()), name.c_str(), G_CALLBACK (gtk_widget_destroy), G_OBJECT (parent->getWindow())); } return as_value(); }
// gameSWF extension void sprite_set_fps(const fn_call& fn) { sprite_instance* sprite = sprite_getptr(fn); if (fn.nargs == 1) { float fps = fn.arg(0).to_float(); sprite->set_fps(fps); } }
void as_mcloader_unloadclip(const fn_call& fn) { if (fn.nargs == 1) { fn.env->load_file("", fn.arg(0)); fn.result->set_bool(true); return; } fn.result->set_bool(false); }
// public createTextField(instanceName:String, depth:Number, // x:Number, y:Number, width:Number, height:Number) : TextField void sprite_create_text_field(const fn_call& fn) { sprite_instance* sprite = sprite_getptr(fn); fn.result->set_as_object(NULL); if (fn.nargs != 6) { log_error("createTextField: the number of arguments must be 6\n"); return; } fn.result->set_as_object(sprite->create_text_field( fn.arg(0).to_string(), // field name fn.arg(1).to_int() + ADJUST_DEPTH_VALUE, // depth fn.arg(2).to_int(), // x fn.arg(3).to_int(), // y fn.arg(4).to_int(), // width fn.arg(5).to_int() // height )); }
void mydb_trace_setter(const fn_call& fn) { tu_autolock locker(s_mysql_plugin_mutex); mydb* db = cast_to<mydb>(fn.this_ptr); if (db && fn.nargs == 1) { db->m_trace = fn.arg(0).to_bool(); } }
//public unwatch(name:String) : Boolean // Removes a watchpoint that Object.watch() created. // This method returns a value of true if the watchpoint is successfully removed, // false otherwise. void as_object_unwatch(const fn_call& fn) { bool ret = false; if (fn.nargs == 1) { assert(fn.this_ptr); ret = fn.this_ptr->unwatch(fn.arg(0).to_tu_string()); } fn.result->set_bool(ret); }
void get_title_method(const fn_call& fn) // Returns the name of fn.arg(0).to_number() field { mytable* tbl = cast_to<mytable>(fn.this_ptr); if (tbl) { assert(fn.nargs == 1); fn.result->set_string(tbl->get_field_title(fn.arg(0).to_int())); } }
void sound_start(const fn_call& fn) { sound_handler* s = get_sound_handler(); if (s != NULL) { as_sound* snd = cast_to<as_sound>(fn.this_ptr); if (snd) { int offset = 0; int loops = 0; if (fn.nargs >= 2) { offset = fn.arg(0).to_int(); loops = fn.arg(1).to_int(); } s->play_sound(snd->m_id, loops); } } }
void as_array_push(const fn_call& fn) { as_array* a = cast_to<as_array>(fn.this_ptr); assert(a); if (fn.nargs > 0) { a->push(fn.arg(0)); } fn.result->set_int(a->size()); }
void as_global_string_ctor(const fn_call& fn) { if (fn.nargs == 1) { fn.result->set_string(fn.arg(0).to_string()); } else { fn.result->set_string(""); } }
as_value camera_setmode(const fn_call& fn) { Camera_as* ptr = ensure<ThisIsNative<Camera_as> >(fn); const size_t nargs = fn.nargs; const double width = nargs ? fn.arg(0).to_number() : 160; const double height = nargs > 1 ? fn.arg(1).to_number() : 120; const double fps = nargs > 2? fn.arg(2).to_number() : 15; const bool favorArea = nargs > 3 ? fn.arg(3).to_bool() : true; // TODO: handle overflow const size_t reqWidth = std::max<double>(width, 0); const size_t reqHeight = std::max<double>(height, 0); ptr->setMode(reqWidth, reqHeight, fps, favorArea); return as_value(); }
// Number(num:Object) void as_global_number_ctor(const fn_call& fn) { if (fn.nargs == 1) { fn.result->set_double(fn.arg(0).to_number()); } else { fn.result->set_double(0); } }
// loadMovie(url:String, [method:String]) : Void // TODO: implement [method:String] void sprite_loadmovie(const fn_call& fn) { if (fn.nargs >= 1) { character* mc = fn.env->load_file(fn.arg(0).to_string(), fn.this_ptr); // extension fn.result->set_as_object(mc); } }
void as_global_clearinterval(const fn_call& fn) { if (fn.nargs == 1) { as_timer* timer = cast_to<as_timer>(fn.arg(0).to_object()); if (timer) { timer->clear(); } } }
as_value gtkext_widget_show(const fn_call& fn) { // GNASH_REPORT_FUNCTION; boost::intrusive_ptr<GtkExt> ptr = ensureType<GtkExt>(fn.this_ptr); if (fn.nargs > 0) { GtkExt *window = dynamic_cast<GtkExt *>(fn.arg(0).to_object(*getGlobal(fn)).get()); gtk_widget_show(window->getWindow()); } return as_value(); }
void GetterSetter::UserDefinedGetterSetter::set(const fn_call& fn) { ScopedLock lock(*this); if (!lock.obtainedLock() || ! _setter) { _underlyingValue = fn.arg(0); return; } _setter->call(fn); }
// file.write() void file_write(const fn_call& fn) { file* fi = cast_to<file>(fn.this_ptr); if (fi && fn.nargs > 0) { if (fi->m_file->get_error() == TU_FILE_NO_ERROR) { fi->m_file->write_string(fn.arg(0).to_string()); } } }
void as_xmlsock_send(const fn_call& fn) { if (fn.nargs != 1) { return; } as_xmlsock* xmls = cast_to<as_xmlsock>(fn.this_ptr); assert(xmls); xmls->send(fn.arg(0)); }
as_value launcher_create_md5sum(const fn_call& fn) { GNASH_REPORT_FUNCTION; boost::intrusive_ptr<launcher_as_object> ptr = ensureType<launcher_as_object>(fn.this_ptr); if (fn.nargs > 0) { string filespec = fn.arg(0).to_string(); return as_value(ptr->obj.create_md5sum(filespec.c_str())); } return as_value(""); }
void string_char_code_at(const fn_call& fn) { const tu_string& str = fn.this_value.to_tu_string(); int index = fn.arg(0).to_int(); if (index >= 0 && index < str.utf8_length()) { fn.result->set_double(str.utf8_char_at(index)); return; } fn.result->set_nan(); }
void string_concat(const fn_call& fn) { const tu_string& str = fn.this_value.to_tu_string(); tu_string result(str); for (int i = 0; i < fn.nargs; i++) { result += fn.arg(i).to_string(); } fn.result->set_tu_string(result); }
// public globalToLocal(pt:Object) : Void void sprite_global_local(const fn_call& fn) { sprite_instance* sprite = sprite_getptr(fn); if (fn.nargs == 1) { as_object* pt = fn.arg(0).to_object(); if (pt) { sprite->global_to_local(pt); } } }
void as_global_isnan(const fn_call& fn) { if (fn.nargs == 1) { if (isnan(fn.arg(0).to_number()) == false) { fn.result->set_bool(false); return; } } fn.result->set_bool(true); }
// Transform( mc:MovieClip ) void as_global_transform_ctor(const fn_call& fn) { if (fn.nargs == 1) { gc_ptr<as_transform> obj; if (character* movie = cast_to<character>(fn.arg(0).to_object())) { obj = new as_transform(fn.get_player(), movie); } fn.result->set_as_object(obj.get_ptr()); } }
as_value dbus_ext_setsockname(const fn_call& fn) { GNASH_REPORT_FUNCTION; Dbus* ptr = ensure<ThisIsNative<Dbus> >(fn); if (fn.nargs > 0) { const std::string& text = fn.arg(0).to_string(); ptr->setSocketName(text.c_str()); return as_value(true); } return as_value(false); }
// public lineTo(x:Number, y:Number) : Void void sprite_line_to(const fn_call& fn) { sprite_instance* sprite = sprite_getptr(fn); canvas* canva = sprite->get_canvas(); assert(canva); if (fn.nargs >= 2) { float x = PIXELS_TO_TWIPS(fn.arg(0).to_float()); float y = PIXELS_TO_TWIPS(fn.arg(1).to_float()); canva->line_to(x, y); } }