com gtk/php-gtk: Implement GdkGC::set_dashes() and ::set_values().: ext/gtk+/gdk.overrides ext/gtk+/php_gtk+_types.c main/php_gtk.h
[email protected] (David Soria Parra) Thu, 09 Mar 2006 07:57:36 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: ee088d85b464ff80dbc1cf933bb012a130854d3a Author: Andrei Zmievski <[email protected]> Thu, 9 Mar 2006 07:57:36 +0000 Parents: 8e3b16f63021c5249939d80f7622b3f50860894c Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=ee088d85b464ff80dbc1cf933bb012a130854d3a Log: Implement GdkGC::set_dashes() and ::set_values(). # Untested Changed paths: M ext/gtk+/gdk.overrides M ext/gtk+/php_gtk+_types.c M main/php_gtk.h
diff_ee088d85b464ff80dbc1cf933bb012a130854d3a.txt
(text/plain, 11.8 KB)
ee088d85b464ff80dbc1cf933bb012a130854d3a
diff --git a/ext/gtk+/gdk.overrides b/ext/gtk+/gdk.overrides
index 2882ea0..0bb3a49 100644
--- a/ext/gtk+/gdk.overrides
+++ b/ext/gtk+/gdk.overrides
@@ -47,7 +47,6 @@ ignore
/* }}} */
-
%% {{{ Gdk
%%
@@ -91,7 +90,6 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkColor
%%
@@ -323,7 +321,6 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkDisplay
%%
@@ -373,10 +370,21 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkDrawable
%%
+override-prop GdkDrawable xid
+PHPG_PROP_READER
+{
+#if defined(GDK_WINDOWING_X11)
+ RETVAL_LONG(GDK_DRAWABLE_XID(((GdkDrawable *)((phpg_gobject_t *)object)->obj)));
+#else
+ RETVAL_LONG((long) GDK_WINDOW_HWND((GdkDrawable *)((phpg_gobject_t *)object)->obj));
+#endif
+ return SUCCESS;
+}
+
+%%
override gdk_drawable_get_size
PHP_METHOD
{
@@ -393,7 +401,6 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkEvent
%% {{{ read_property handler
@@ -1012,6 +1019,217 @@ PHP_METHOD
%% }}}
+%% {{{ GdkGC
+
+%%
+override gdk_gc_set_dashes
+PHP_METHOD
+{
+ int dash_offset, n, i;
+ zval *dash_array, **item;
+ guchar *dash_list;
+
+ NOT_STATIC_METHOD();
+
+ if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "ia", &dash_offset, &dash_array)) {
+ return;
+ }
+
+ n = zend_hash_num_elements(Z_ARRVAL_P(dash_array));
+ dash_list = emalloc(n * sizeof(char));
+ for (i = 0, zend_hash_internal_pointer_reset(Z_ARRVAL_P(dash_array));
+ zend_hash_get_current_data(Z_ARRVAL_P(dash_array), (void **) &item) == SUCCESS;
+ zend_hash_move_forward(Z_ARRVAL_P(dash_array)), i++) {
+
+ if (Z_TYPE_PP(item) != IS_LONG) {
+ php_error(E_WARNING, "%s::%s(): dash list elements have to be integers",
+ get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+ efree(dash_list);
+ return;
+ }
+ dash_list[i] = (guchar)clamp_int(Z_LVAL_PP(item), 0, 255);
+ if (dash_list[i] == 0) {
+ php_error(E_WARNING, "%s::%s(): dash list element cannot be 0",
+ get_active_class_name(NULL TSRMLS_CC), get_active_function_name(TSRMLS_C));
+ efree(dash_list);
+ return;
+ }
+ }
+
+ gdk_gc_set_dashes(GDK_GC(PHPG_GOBJECT(this_ptr)), dash_offset, dash_list, n);
+ efree(dash_list);
+}
+
+%%
+override gdk_gc_set_values
+PHP_METHOD
+{
+ zval *php_values, **value;
+ char *key;
+ uint key_len;
+ ulong num_key;
+ HashTable *hash;
+ GdkGCValues values;
+ GdkGCValuesMask mask = 0;
+
+ NOT_STATIC_METHOD();
+
+ if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &php_values)) {
+ return;
+ }
+
+ hash = HASH_OF(php_values);
+ zend_hash_internal_pointer_reset(hash);
+ while (zend_hash_get_current_data(hash, (void**)&value) == SUCCESS) {
+ if (zend_hash_get_current_key_ex(hash, &key, &key_len, &num_key, 0, NULL) == HASH_KEY_IS_STRING) {
+ if (!strcmp(key, "foreground")) {
+ GdkColor *c;
+
+ if (!phpg_object_isa(*value, gdkcolor_ce)) {
+ php_error(E_WARNING, "foreground value has to be a GdkColor");
+ return;
+ }
+ c = (GdkColor *) PHPG_GBOXED(*value);
+ mask |= GDK_GC_FOREGROUND;
+ values.foreground.red = c->red;
+ values.foreground.green = c->green;
+ values.foreground.blue = c->blue;
+ values.foreground.pixel = c->pixel;
+ } else if (!strcmp(key, "background")) {
+ GdkColor *c;
+
+ if (!phpg_object_isa(*value, gdkcolor_ce)) {
+ php_error(E_WARNING, "background value has to be a GdkColor");
+ return;
+ }
+ c = (GdkColor *) PHPG_GBOXED(*value);
+ mask |= GDK_GC_BACKGROUND;
+ values.background.red = c->red;
+ values.background.green = c->green;
+ values.background.blue = c->blue;
+ values.background.pixel = c->pixel;
+ } else if (!strcmp(key, "font")) {
+ if (!phpg_object_isa(*value, gdkfont_ce)) {
+ php_error(E_WARNING, "font value has to be a GdkFont");
+ return;
+ }
+ mask |= GDK_GC_FONT;
+ values.font = (GdkFont *) PHPG_GBOXED(*value);
+ } else if (!strcmp(key, "function")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "function value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_FUNCTION;
+ values.function = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "fill")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "fill value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_FILL;
+ values.fill = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "tile")) {
+ if (!phpg_object_isa(*value, gdkpixmap_ce)) {
+ php_error(E_WARNING, "tile value has to be a GdkPixmap");
+ return;
+ }
+ mask |= GDK_GC_TILE;
+ values.tile = GDK_PIXMAP(PHPG_GOBJECT(*value));
+ } else if (!strcmp(key, "stipple")) {
+ if (!phpg_object_isa(*value, gdkpixmap_ce)) {
+ php_error(E_WARNING, "stipple value has to be a GdkPixmap");
+ return;
+ }
+ mask |= GDK_GC_STIPPLE;
+ values.stipple = GDK_PIXMAP(PHPG_GOBJECT(*value));
+ } else if (!strcmp(key, "clip_mask")) {
+ if (!phpg_object_isa(*value, gdkpixmap_ce)) {
+ php_error(E_WARNING, "clip_mask value has to be a GdkPixmap");
+ return;
+ }
+ mask |= GDK_GC_CLIP_MASK;
+ values.clip_mask = GDK_PIXMAP(PHPG_GOBJECT(*value));
+ } else if (!strcmp(key, "subwindow_mode")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "subwindow_mode value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_SUBWINDOW;
+ values.subwindow_mode = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "ts_x_origin")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "ts_x_origin value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_TS_X_ORIGIN;
+ values.ts_x_origin = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "ts_y_origin")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "ts_y_origin value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_TS_Y_ORIGIN;
+ values.ts_y_origin = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "clip_x_origin")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "clip_x_origin value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_CLIP_X_ORIGIN;
+ values.clip_x_origin = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "clip_y_origin")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "clip_y_origin value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_CLIP_Y_ORIGIN;
+ values.clip_y_origin = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "graphics_exposures")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "graphics_exposures value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_EXPOSURES;
+ values.graphics_exposures = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "line_width")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "line_width value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_LINE_WIDTH;
+ values.line_width = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "line_style")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "line_style value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_LINE_STYLE;
+ values.line_style = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "cap_style")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "cap_style value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_CAP_STYLE;
+ values.cap_style = Z_LVAL_PP(value);
+ } else if (!strcmp(key, "join_style")) {
+ if (Z_TYPE_PP(value) != IS_LONG) {
+ php_error(E_WARNING, "join_style value has to be an integer");
+ return;
+ }
+ mask |= GDK_GC_JOIN_STYLE;
+ values.join_style = Z_LVAL_PP(value);
+ }
+ }
+ zend_hash_move_forward(hash);
+ }
+
+ gdk_gc_set_values(GDK_GC(PHPG_GOBJECT(this_ptr)), &values, mask);
+ RETURN_TRUE;
+}
+
+%% }}}
%% {{{ GdkPixbuf
@@ -1191,7 +1409,6 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkScreen
%%
@@ -1242,7 +1459,6 @@ PHP_METHOD
%% }}}
-
%% {{{ GdkWindow
%%
@@ -1429,18 +1645,6 @@ PHP_METHOD
}
%%
-override-prop GdkDrawable xid
-PHPG_PROP_READER
-{
-#if defined(GDK_WINDOWING_X11)
- RETVAL_LONG(GDK_DRAWABLE_XID(((GdkDrawable *)((phpg_gobject_t *)object)->obj)));
-#else
- RETVAL_LONG((long) GDK_WINDOW_HWND((GdkDrawable *)((phpg_gobject_t *)object)->obj));
-#endif
- return SUCCESS;
-}
-
-%%
override gdk_atom_intern
PHP_METHOD
{
diff --git a/ext/gtk+/php_gtk+_types.c b/ext/gtk+/php_gtk+_types.c
index aef0336..d5cb7af 100644
--- a/ext/gtk+/php_gtk+_types.c
+++ b/ext/gtk+/php_gtk+_types.c
@@ -251,7 +251,7 @@ static void style_helper_write_dimension(zval *object, zval *offset, zval *value
case STYLE_GC_ARRAY:
{
GdkGC **array = (GdkGC **) sh->array;
- if (!phpg_object_check(value, gdkgc_ce TSRMLS_CC)) {
+ if (!phpg_object_isa(value, gdkgc_ce TSRMLS_CC)) {
php_error(E_WARNING, "Can only assign a GdkGC object");
return;
}
@@ -265,7 +265,7 @@ static void style_helper_write_dimension(zval *object, zval *offset, zval *value
case STYLE_PIXMAP_ARRAY:
{
GdkPixmap **array = (GdkPixmap **) sh->array;
- if (Z_TYPE_P(value) != IS_NULL && !phpg_object_check(value, gdkpixmap_ce TSRMLS_CC)) {
+ if (Z_TYPE_P(value) != IS_NULL && !phpg_object_isa(value, gdkpixmap_ce TSRMLS_CC)) {
php_error(E_WARNING, "Can only assign a GdkPixmap object or null");
return;
}
diff --git a/main/php_gtk.h b/main/php_gtk.h
index 63d04bd..55a386f 100644
--- a/main/php_gtk.h
+++ b/main/php_gtk.h
@@ -303,7 +303,7 @@ PHP_GTK_API void phpg_warn_deprecated(char *msg TSRMLS_DC);
PHP_GTK_API void php_gtk_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int pass_object, int after);
PHP_GTK_API zval* php_gtk_simple_signal_callback(GtkObject *o, gpointer data, zval *gtk_args );
-static inline zend_bool phpg_object_check(zval *zobj, zend_class_entry *ce TSRMLS_DC)
+static inline zend_bool phpg_object_isa(zval *zobj, zend_class_entry *ce TSRMLS_DC)
{
phpg_return_val_if_fail(zobj != NULL, FALSE);
phpg_return_val_if_fail(ce != NULL, FALSE);