示例#1
0
	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()));
		}
	}
示例#2
0
	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);
	}
示例#4
0
文件: gtkext.cpp 项目: diocles/gnash
// 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();
}
示例#5
0
文件: gtkext.cpp 项目: diocles/gnash
// 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);
		}
	} 
示例#7
0
	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
		));
	} 
示例#9
0
	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();
		}
	}
示例#10
0
	//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);
	}
示例#11
0
	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()));
		}
	}
示例#12
0
	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);
			}
		}
	}
示例#13
0
	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());
	}
示例#14
0
	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("");
		}
	}
示例#15
0
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();
}
示例#16
0
	// 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);
		}

	} 
示例#18
0
	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();
			}
		}
	}
示例#19
0
文件: gtkext.cpp 项目: diocles/gnash
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();
}
示例#20
0
文件: Property.cpp 项目: jlopez/gnash
void
GetterSetter::UserDefinedGetterSetter::set(const fn_call& fn)
{
	ScopedLock lock(*this);
	if (!lock.obtainedLock() || ! _setter) {
		_underlyingValue = fn.arg(0);
		return;
	}

	_setter->call(fn);
}
示例#21
0
文件: file.cpp 项目: CneoC/shinzui
// 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());
        }
    }
}
示例#22
0
	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));
	}
示例#23
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("");
}
示例#24
0
	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();
	}
示例#25
0
	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);
			}
		}
	}
示例#27
0
	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);
	}
示例#28
0
	// 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());
		}
	}
示例#29
0
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);
		}
	}