/* vim: set ft=cpp: */ %% ignore GdkDebugFlag GdkColorInfoFlags %% ignore gdk_pixmap_new %% override gdk_color_parse PHP_FUNCTION(gdk_color_parse) { gchar *color_spec; GdkColor color; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "s", &color_spec)) { return; } if (gdk_color_parse(color_spec, &color)) *return_value = *php_gdk_color_new(&color); else php_error(E_WARNING, "%s() could not parse color spec '%s'", get_active_function_name(TSRMLS_C), color_spec); } %% override gdk_pixmap_create_from_xpm PHP_FUNCTION(gdk_pixmap_create_from_xpm) { zval *php_window, *php_trans_color; gchar *filename; GdkWindow *window = NULL; GdkColor *trans_color = NULL; GdkPixmap *pixmap = NULL; GdkBitmap *mask; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNs", &php_window, gdk_window_ce, &php_trans_color, gdk_color_ce, &filename)) return; if (Z_TYPE_P(php_window) != IS_NULL) window = PHP_GDK_WINDOW_GET(php_window); if (Z_TYPE_P(php_trans_color) != IS_NULL) trans_color = PHP_GDK_COLOR_GET(php_trans_color); pixmap = gdk_pixmap_create_from_xpm(window, &mask, trans_color, filename); if (!pixmap) { php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); return; } *return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask)); gdk_pixmap_unref(pixmap); gdk_bitmap_unref(mask); } %% override gdk_pixmap_create_from_xpm_d PHP_FUNCTION(gdk_pixmap_create_from_xpm_d) { zval *php_window, *php_trans_color, *php_data; zval **line; GdkWindow *window = NULL; GdkColor *trans_color = NULL; GdkPixmap *pixmap = NULL; GdkBitmap *mask; char **data; int len, i = 0; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNa/", &php_window, gdk_window_ce, &php_trans_color, gdk_color_ce, &php_data)) return; if (Z_TYPE_P(php_window) != IS_NULL) window = PHP_GDK_WINDOW_GET(php_window); if (Z_TYPE_P(php_trans_color) != IS_NULL) trans_color = PHP_GDK_COLOR_GET(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(window, &mask, trans_color, data); efree(data); if (!pixmap) { php_error(E_WARNING, "%s() cannot create pixmap", get_active_function_name(TSRMLS_C)); return; } *return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask)); gdk_pixmap_unref(pixmap); gdk_bitmap_unref(mask); } %% override gdk_pixmap_colormap_create_from_xpm PHP_FUNCTION(gdk_pixmap_colormap_create_from_xpm) { zval *php_window, *php_trans_color, *php_colormap; gchar *filename; GdkWindow *window = NULL; GdkColormap *colormap = NULL; GdkColor *trans_color = NULL; GdkPixmap *pixmap = NULL; GdkBitmap *mask; if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "NNNs", &php_window, gdk_window_ce, &php_colormap, gdk_colormap_ce, &php_trans_color, gdk_color_ce, &filename)) return; if (Z_TYPE_P(php_window) != IS_NULL) window = PHP_GDK_WINDOW_GET(php_window); if (Z_TYPE_P(php_colormap) != IS_NULL) colormap = PHP_GDK_COLORMAP_GET(php_colormap); if (Z_TYPE_P(php_trans_color) != IS_NULL) trans_color = PHP_GDK_COLOR_GET(php_trans_color); pixmap = gdk_pixmap_colormap_create_from_xpm(window, colormap, &mask, trans_color, filename); if (!pixmap) { php_error(E_WARNING, "%s() cannot load pixmap", get_active_function_name(TSRMLS_C)); return; } *return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask)); gdk_pixmap_unref(pixmap); gdk_bitmap_unref(mask); } %% override gdk_pixmap_colormap_create_from_xpm_d PHP_FUNCTION(gdk_pixmap_colormap_create_from_xpm_d) { zval *php_window, *php_colormap, *php_trans_color, *php_data; zval **line; GdkWindow *window = 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(), "NNNa/", &php_window, gdk_window_ce, &php_colormap, gdk_colormap_ce, &php_trans_color, gdk_color_ce, &php_data)) return; if (Z_TYPE_P(php_window) != IS_NULL) window = PHP_GDK_WINDOW_GET(php_window); if (Z_TYPE_P(php_colormap) != IS_NULL) colormap = PHP_GDK_COLORMAP_GET(php_colormap); if (Z_TYPE_P(php_trans_color) != IS_NULL) trans_color = PHP_GDK_COLOR_GET(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(window, colormap, &mask, trans_color, data); efree(data); if (!pixmap) { php_error(E_WARNING, "%s() cannot create pixmap", get_active_function_name(TSRMLS_C)); return; } *return_value = *php_gtk_build_value("(NN)", php_gdk_pixmap_new(pixmap), php_gdk_bitmap_new(mask)); gdk_pixmap_unref(pixmap); gdk_bitmap_unref(mask); }