com gtk/php-gtk: Commit Steph's GDK patches (add_alpha( ), create_from_xpm[_data]()): ext/gtk +/gdk.defs ext/gtk+/gdk.overrides
[email protected] (David Soria Parra)
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 5afdee56318f1d820578104204fb9eb93e84c7e4 Author: Andrei Zmievski <[email protected]> Sat, 24 Jun 2006 00:22:15 +0000 Parents: 7370b235355d913561d4a415470de366d4293c80 Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=5afdee56318f1d820578104204fb9eb93e84c7e4 Log: Commit Steph's GDK patches (add_alpha(), create_from_xpm[_data]()) Changed paths: M ext/gtk+/gdk.defs M ext/gtk+/gdk.overrides Diff: 5afdee56318f1d820578104204fb9eb93e84c7e4 diff --git a/ext/gtk+/gdk.defs b/ext/gtk+/gdk.defs index 3dc23f1..a3a633d 100644 --- a/ext/gtk+/gdk.defs +++ b/ext/gtk+/gdk.defs @@ -2625,9 +2625,11 @@ ) ) -(define-function pixmap_create_from_xpm +(define-method create_from_xpm + (of-object "GdkPixmap") (c-name "gdk_pixmap_create_from_xpm") (return-type "GdkPixmap*") + (static #t) (parameters '("GdkDrawable*" "drawable") '("GdkBitmap**" "mask") @@ -2636,9 +2638,11 @@ ) ) -(define-function pixmap_create_from_xpm_d +(define-method create_from_xpm_data + (of-object "GdkPixmap") (c-name "gdk_pixmap_create_from_xpm_d") (return-type "GdkPixmap*") + (static #t) (parameters '("GdkDrawable*" "drawable") '("GdkBitmap**" "mask") diff --git a/ext/gtk+/gdk.overrides b/ext/gtk+/gdk.overrides index 0e8a4c2..0fa27d4 100644 --- a/ext/gtk+/gdk.overrides +++ b/ext/gtk+/gdk.overrides @@ -47,6 +47,8 @@ ignore gdk_pixbuf_new_from_array gdk_pixbuf_new_from_inline gdk_pixbuf_savev + gdk_pixmap_colormap_create_from_xpm + gdk_pixmap_colormap_create_from_xpm_d gdk_string_extents gdk_window_peek_children @@ -1907,6 +1909,44 @@ PHP_METHOD } %% +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 +2351,115 @@ PHP_METHOD %% }}} +%% {{{ GdkPixmap + +%% +override gdk_pixmap_create_from_xpm +PHP_METHOD +{ + zval *php_drawable, *php_trans_color, *php_colormap = NULL; + zval *ret_pixmap = NULL, *ret_mask = NULL; + gchar *filename; + zend_bool free_filename = FALSE; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkColormap *colormap = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOu|O", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &filename, &free_filename, + &php_colormap, gdkcolormap_ce)) { + PHPG_THROW_CONSTRUCT_EXCEPTION(GdkPixmap); + } + + drawable = GDK_DRAWABLE(PHPG_GOBJECT(php_drawable)); + trans_color = (GdkColor *) PHPG_GBOXED(php_trans_color); + + if (php_colormap) { + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + pixmap = gdk_pixmap_colormap_create_from_xpm(drawable, colormap, &mask, trans_color, filename); + } else { + 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, *php_colormap = NULL; + zval *ret_pixmap = NULL, *ret_mask = NULL; + zval **line; + GdkDrawable *drawable = NULL; + GdkColor *trans_color = NULL; + GdkColormap *colormap = NULL; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask; + char **data; + int len, i = 0; + + if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "OOa|O", &php_drawable, gdkdrawable_ce, + &php_trans_color, gdkcolor_ce, + &php_data, + &php_colormap, gdkcolormap_ce)) { + 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 = safe_emalloc(len, sizeof(char *), 0); + + 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); + } + + if (php_colormap) { + colormap = GDK_COLORMAP(PHPG_GOBJECT(php_colormap)); + pixmap = gdk_pixmap_colormap_create_from_xpm_d(drawable, colormap, &mask, trans_color, data); + } else { + 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 %%