GdkPixbuf::save() override
| From: | xxoes | Date: | Wed, 01 Mar 2006 07:04:05 +0000 |
| Subject: | GdkPixbuf::save() override | ||
| Groups: | php.gtk.dev | ||
| Request: | Send a blank email to php-gtk-dev+get-2467@lists.php.net to get a copy of this message | ||
I have write an overrid for GdkPixbuf::save()
%%
override gdk_pixbuf_save
PHP_METHOD
{
char *filename;
char *type;
char **option_keys = NULL;
char **option_values = NULL;
GError *error = NULL;
int argc,i,options;
zval ***args;
NOT_STATIC_METHOD();
argc = ZEND_NUM_ARGS();options = (argc-2)/2;
args = (zval ***)emalloc(argc * sizeof(zval **));if(argc < 2 || zend_get_parameters_array_ex(argc,args)==FAILURE) {
efree(args);
WRONG_PARAM_COUNT;
}
else if(argc%2) {
efree(args);
php_error(E_WARNING, "%s::%s() requires arguments 3-n to be key/value pairs",
get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
return;
}
option_keys = (char**)emalloc((options+1) * sizeof(char**));
option_values = (char**)emalloc((options+1) * sizeof(char**));
for(i=0;i<argc;i++) {
if(Z_TYPE_PP(args[i]) != IS_STRING) {
convert_to_string_ex(args[i]);
}
if(i == 0) {
filename = Z_STRVAL_PP(args[i]);
}
else if(i == 1) {
type = Z_STRVAL_PP(args[i]);
}
else if(!(i%2)) {
option_keys[(i-2)/2] = Z_STRVAL_PP(args[i]);
}
else {
option_values[(i-2)/2] = Z_STRVAL_PP(args[i]);
}
}
option_keys[(i-2)/2] = 0;
option_values[(i-2)/2] = 0;
if(gdk_pixbuf_savev(GDK_PIXBUF(PHPG_GOBJECT(this_ptr)), filename, type, option_keys, option_values, &error)) {
efree(args);
efree(option_keys);
efree(option_values);
RETURN_TRUE;
}
else {
efree(args);
efree(option_keys);
efree(option_values);
if(error) {
php_error(E_WARNING, "%s::%s() error->code = %u, error->message = %s",
get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C), error->code,error->message);
}
else {
php_error(E_WARNING, "%s::%s() Bad option name or wrong option value",
get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
}
RETURN_FALSE;
}
}
mfg xxoes