Take #3 for add_alpha
| From: | Steph Fox | Date: | Wed, 21 Jun 2006 18:48:52 +0000 |
| Subject: | Take #3 for add_alpha | ||
| Groups: | php.gtk.dev | ||
| Request: | Send a blank email to php-gtk-dev+get-3139@lists.php.net to get a copy of this message | ||
OK, this is the way Chris intended it - but note that we can't do anything about the parameter-checking error messages, which will always say 3 parameters are needed if you send anything at all. Needs docu.
- Steph
Index: ext/gtk+/gdk.overrides =================================================================== RCS file: /repository/php-gtk/ext/gtk+/gdk.overrides,v retrieving revision 1.64 diff -u -r1.64 gdk.overrides --- ext/gtk+/gdk.overrides 17 Jun 2006 18:43:55 -0000 1.64 +++ ext/gtk+/gdk.overrides 21 Jun 2006 18:31:15 -0000 @@ -1907,6 +1907,44 @@ } %% +add-arginfo GdkPixbuf add_alpha +static +ZEND_BEGIN_ARG_INFO_EX(ARGINFO_NAME, 0, 0, 0) + ZEND_ARG_INFO(0, red) + ZEND_ARG_INFO(0, green) + ZEND_ARG_INFO(0, blue) +ZEND_END_ARG_INFO(); + +%% +override gdk_pixbuf_add_alpha +PHP_METHOD +{ + int red, blue, green; + guchar r = 255, g = 255, b = 255; + GdkPixbuf* pixbuf; + + NOT_STATIC_METHOD(); + + if (ZEND_NUM_ARGS() > 0) { + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "iii", &red, &green, &blue)) + return; + r = (guchar)red; + g = (guchar)green; + b = (guchar)blue; + pixbuf = gdk_pixbuf_add_alpha(GDK_PIXBUF(PHPG_GOBJECT(this_ptr)), 1, r, g, b); + } else { + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) + return; + pixbuf = gdk_pixbuf_add_alpha(GDK_PIXBUF(PHPG_GOBJECT(this_ptr)), 0, r, g, b); + } + + if (pixbuf) { + phpg_gobject_new(&return_value, (GObject *)pixbuf TSRMLS_CC); + g_object_unref(pixbuf); + } +} + +%% override gdk_pixbuf_get_pixels PHP_METHOD { @@ -2311,6 +2349,193 @@ %% }}} +%% {{{ GdkPixmap + +%% +override gdk_pixmap_colormap_create_from_xpm +PHP_METHOD +{ + zval *php_drawable, *php_trans_color, *php_colormap; + zval *ret_pixmap = NULL, *ret_mask = NULL; + gchar *filename; + zend_bool free_filename = FALSE; + GdkDrawable *drawable = NULL; + GdkColormap *colormap = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOOu", &php_drawable, gdkdrawable_ce, + &php_colormap, gdkcolormap_ce, + &php_trans_color, gdkcolor_ce, + &filename, &free_filename)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + pixmap = gdk_pixmap_colormap_create_from_xpm(drawable, colormap, &mask, trans_color, filename); + if (free_filename) g_free(filename); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_colormap_create_from_xpm_d +PHP_METHOD +{ + zval *php_drawable, *php_colormap, + *php_trans_color, *php_data; + zval *ret_pixmap = NULL, *ret_mask = NULL; + zval **line; + GdkDrawable *drawable = NULL; + GdkColormap *colormap = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + char **data; + int len, i = 0; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOOa", &php_drawable, gdkdrawable_ce, + &php_colormap, gdkcolormap_ce, + &php_trans_color, gdkcolor_ce, + &php_data)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + len = zend_hash_num_elements(Z_ARRVAL_P(php_data)); + data = emalloc(len * sizeof(char *)); + for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data)); + zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_P(php_data))) { + convert_to_string_ex(line); + data[i++] = Z_STRVAL_PP(line); + } + + pixmap = gdk_pixmap_colormap_create_from_xpm_d(drawable, colormap, &mask, trans_color, data); + efree(data); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_create_from_xpm +PHP_METHOD +{ + zval *php_drawable, *php_trans_color; + zval *ret_pixmap = NULL, *ret_mask = NULL; + gchar *filename; + zend_bool free_filename = FALSE; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOu", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &filename, &free_filename)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + pixmap = gdk_pixmap_create_from_xpm(drawable, &mask, trans_color, filename); + if (free_filename) g_free(filename); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_create_from_xpm_d +PHP_METHOD +{ + zval *php_drawable, *php_trans_color, *php_data; + zval *ret_pixmap = NULL, *ret_mask = NULL; + zval **line; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + char **data; + int len, i = 0; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOa", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &php_data)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + len = zend_hash_num_elements(Z_ARRVAL_P(php_data)); + data = emalloc(len * sizeof(char *)); + for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data)); + zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_P(php_data))) { + convert_to_string_ex(line); + data[i++] = Z_STRVAL_PP(line); + } + + pixmap = gdk_pixmap_create_from_xpm_d(drawable, &mask, trans_color, data); + efree(data); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% }}} + %% {{{ GdkRectangle %%
Index: ext/gtk+/gdk.overrides =================================================================== RCS file: /repository/php-gtk/ext/gtk+/gdk.overrides,v retrieving revision 1.64 diff -u -r1.64 gdk.overrides --- ext/gtk+/gdk.overrides 17 Jun 2006 18:43:55 -0000 1.64 +++ ext/gtk+/gdk.overrides 21 Jun 2006 18:31:15 -0000 @@ -1907,6 +1907,44 @@ } %% +add-arginfo GdkPixbuf add_alpha +static +ZEND_BEGIN_ARG_INFO_EX(ARGINFO_NAME, 0, 0, 0) + ZEND_ARG_INFO(0, red) + ZEND_ARG_INFO(0, green) + ZEND_ARG_INFO(0, blue) +ZEND_END_ARG_INFO(); + +%% +override gdk_pixbuf_add_alpha +PHP_METHOD +{ + int red, blue, green; + guchar r = 255, g = 255, b = 255; + GdkPixbuf* pixbuf; + + NOT_STATIC_METHOD(); + + if (ZEND_NUM_ARGS() > 0) { + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "iii", &red, &green, &blue)) + return; + r = (guchar)red; + g = (guchar)green; + b = (guchar)blue; + pixbuf = gdk_pixbuf_add_alpha(GDK_PIXBUF(PHPG_GOBJECT(this_ptr)), 1, r, g, b); + } else { + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) + return; + pixbuf = gdk_pixbuf_add_alpha(GDK_PIXBUF(PHPG_GOBJECT(this_ptr)), 0, r, g, b); + } + + if (pixbuf) { + phpg_gobject_new(&return_value, (GObject *)pixbuf TSRMLS_CC); + g_object_unref(pixbuf); + } +} + +%% override gdk_pixbuf_get_pixels PHP_METHOD { @@ -2311,6 +2349,193 @@ %% }}} +%% {{{ GdkPixmap + +%% +override gdk_pixmap_colormap_create_from_xpm +PHP_METHOD +{ + zval *php_drawable, *php_trans_color, *php_colormap; + zval *ret_pixmap = NULL, *ret_mask = NULL; + gchar *filename; + zend_bool free_filename = FALSE; + GdkDrawable *drawable = NULL; + GdkColormap *colormap = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOOu", &php_drawable, gdkdrawable_ce, + &php_colormap, gdkcolormap_ce, + &php_trans_color, gdkcolor_ce, + &filename, &free_filename)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + pixmap = gdk_pixmap_colormap_create_from_xpm(drawable, colormap, &mask, trans_color, filename); + if (free_filename) g_free(filename); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_colormap_create_from_xpm_d +PHP_METHOD +{ + zval *php_drawable, *php_colormap, + *php_trans_color, *php_data; + zval *ret_pixmap = NULL, *ret_mask = NULL; + zval **line; + GdkDrawable *drawable = NULL; + GdkColormap *colormap = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + char **data; + int len, i = 0; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOOa", &php_drawable, gdkdrawable_ce, + &php_colormap, gdkcolormap_ce, + &php_trans_color, gdkcolor_ce, + &php_data)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + len = zend_hash_num_elements(Z_ARRVAL_P(php_data)); + data = emalloc(len * sizeof(char *)); + for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data)); + zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_P(php_data))) { + convert_to_string_ex(line); + data[i++] = Z_STRVAL_PP(line); + } + + pixmap = gdk_pixmap_colormap_create_from_xpm_d(drawable, colormap, &mask, trans_color, data); + efree(data); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_create_from_xpm +PHP_METHOD +{ + zval *php_drawable, *php_trans_color; + zval *ret_pixmap = NULL, *ret_mask = NULL; + gchar *filename; + zend_bool free_filename = FALSE; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOu", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &filename, &free_filename)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + pixmap = gdk_pixmap_create_from_xpm(drawable, &mask, trans_color, filename); + if (free_filename) g_free(filename); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% +override gdk_pixmap_create_from_xpm_d +PHP_METHOD +{ + zval *php_drawable, *php_trans_color, *php_data; + zval *ret_pixmap = NULL, *ret_mask = NULL; + zval **line; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + char **data; + int len, i = 0; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOa", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &php_data)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + len = zend_hash_num_elements(Z_ARRVAL_P(php_data)); + data = emalloc(len * sizeof(char *)); + for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(php_data)); + zend_hash_get_current_data(Z_ARRVAL_P(php_data), (void **)&line) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_P(php_data))) { + convert_to_string_ex(line); + data[i++] = Z_STRVAL_PP(line); + } + + pixmap = gdk_pixmap_create_from_xpm_d(drawable, &mask, trans_color, data); + efree(data); + + if (!pixmap) { + php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + phpg_gobject_new(&ret_pixmap, (GObject*)pixmap TSRMLS_CC); + gdk_pixmap_unref(pixmap); + + phpg_gobject_new(&ret_mask, (GObject *)mask TSRMLS_CC); + gdk_bitmap_unref(mask); + + php_gtk_build_value(&return_value, "(NN)", ret_pixmap, ret_mask); +} + +%% }}} + %% {{{ GdkRectangle %%