static void debug_print_object(int number) { int i; zword_t addr, len; glk_printf("Object %d:\nName: \"", number); print_object_name(number); glk_put_string("\"\nAttributes: "); for (i = 0; i < (zGameVersion < Z_VERSION_4 ? 32 : 48); i++) { if (get_attribute(number, i)) glk_printf("%d ", i); } glk_printf("\nParent: %3d \"", object_parent(number)); print_object_name(object_parent(number)); glk_printf("\"\nSibling: %3d \"", object_sibling(number)); print_object_name(object_sibling(number)); glk_printf("\"\nChild: %3d \"", object_child(number)); print_object_name(object_child(number)); glk_put_string("\"\nProperties:\n"); i = 0; while (i = get_next_property(number, i)) { glk_printf(" [%2d] ", i); addr = get_property_address(number, i); for (len = get_property_length(addr); len > 0; len--) glk_printf("%02x ", get_byte(addr++)); glk_put_string("\n"); } }
/** * parse each widget * * @param w: pointer to widget * @param m: no use * @return: NULL **/ static struct widget* do_parse_widget(struct widget* w, union message* m) { NOT_USED(m); /** * record focusable widget **/ if(w->input_enable == 1) { list_push_back(&global_application.focus_list, &w, sizeof(w)); } /** * register window and update active window **/ if(w->is_window) { struct window* parent = (struct window*)object_parent(OBJECT_POINTER(w)); struct window* window_ptr = WINDOW_POINTER(w); si_t parent_descriptor = (parent == NULL ? 0 : parent->descriptor); si_t window_descriptor = register_window(parent_descriptor, window_ptr->title, window_ptr->area.x, window_ptr->area.y, window_ptr->area.width, window_ptr->area.height, window_ptr->minimize_enable, window_ptr->maximize_enable, window_ptr->modal); if(0 == window_descriptor) { EGUI_PRINT_ERROR("failed to register window %s", window_ptr->title); return NULL; } window_ptr->descriptor = window_descriptor; global_application.focus = window_ptr; /** * find icon for the application **/ if((window_ptr->icon_path = (char*)malloc(256)) == NULL) { EGUI_PRINT_ERROR("failed to register window"); return NULL; } else { /** * in C89 standard, snprintf() is NOT included in <stdio.h> * so you have to use sprintf, which may be dangerous. be careful **/ sprintf(window_ptr->icon_path, "%s/icons/%s.bmp", global_application.icon_root_path, global_application.name); if(access(window_ptr->icon_path, R_OK) == -1) { sprintf(window_ptr->icon_path, "%s/icons/default.bmp", global_application.icon_root_path); } } } return NULL; }
si_t application_widget_absolute_area (struct widget * w, struct rectangle * result) { struct object * self, * parent; struct rectangle temp, parent_area; si_t flag = 0; *result = w->area; /* windows always use absolute coordinates. */ if(w->is_window) { return 0; } parent_area.x = 0; parent_area.y = 0; temp.x = w->area.x; temp.y = w->area.y; temp.width = w->area.width; temp.height = w->area.height; self = OBJECT_POINTER(w); while((parent = object_parent(self)) != NULL) { parent_area.width = WIDGET_POINTER(parent)->area.width; parent_area.height = WIDGET_POINTER(parent)->area.height; if(area_intersection(&parent_area, &temp, result) == -1) { flag = 1; break; } temp.x = (result->x += WIDGET_POINTER(parent)->area.x); temp.y = (result->y += WIDGET_POINTER(parent)->area.y); temp.width = result->width; temp.height = result->height; self = parent; if(WIDGET_POINTER(parent)->is_window) { break; } } if(flag == 1) { return -1; } else { return 0; } }
void save_depth(struct node_t *tree) { struct node_t *it; for (it = object_tree_l_most_node(tree->obj.parent); it; it = object_tree_iterator_increment(tree->obj.parent, OBJECT_POINTER(it))) { struct node_t *par = (struct node_t *)object_parent(OBJECT_POINTER(it)); if (par) { it->data.depth = par->data.depth + 1; } else { it->data.depth = 0; } } }
void cgraphics_widget_create( widget_t *widget ) { widget_t *parent; parent = (widget_t *)object_parent(widget); /* check for parent */ if ( parent == NULL ) { clog( CL_ERROR, "Widget requires parent, none given." ); return; } /* FIXME: height should be determined from font height in pixels */ if ( widget->size_req->h == -1 ) widget->size_req->h = 25; gtk_widget_set_size_request( GTK_WIDGET(widget->native), widget->size_req->w, widget->size_req->h ); g_signal_connect( G_OBJECT(widget->native), "configure_event", G_CALLBACK(cgraphics_resized_handler), widget ); g_signal_connect_swapped( G_OBJECT(widget->native), "destroy", G_CALLBACK(cgraphics_destroy_handler), widget ); if ( widget->flags & cWidgetCustomDraw ) { g_signal_connect( G_OBJECT(widget->native), "screen-changed", G_CALLBACK(cgraphics_screen_changed_handler), widget ); g_signal_connect( G_OBJECT(widget->native), "expose-event", G_CALLBACK(cgraphics_cd_expose_handler), widget ); } if ( widget->container != 0 ) g_signal_connect( G_OBJECT(widget->container), "size_allocate", G_CALLBACK(cgraphics_resized2_handler), widget ); else g_signal_connect( G_OBJECT(widget->native), "size_allocate", G_CALLBACK(cgraphics_resized2_handler), widget ); if ( !strcmp( parent->object.type, "claro.graphics.widgets.splitter" ) ) { size_t splitter_num = (size_t)parent->ndata; splitter_widget_t *sw = (splitter_widget_t *)parent; if ( splitter_num == 0 ) gtk_paned_pack1( GTK_PANED(parent->native), widget->native, true, false ); else gtk_paned_pack2( GTK_PANED(parent->native), widget->native, true, false ); sw->children[splitter_num].w = widget; parent->ndata = (void *)(splitter_num+1); } else if ( !strcmp( parent->object.type, "claro.graphics.widgets.workspace" ) ) { gtk_notebook_append_page( widget_get_container(OBJECT(parent)), widget->native, NULL ); } else { gtk_layout_put( GTK_LAYOUT(widget_get_container(OBJECT(parent))), widget->native, widget->size_req->x, widget->size_req->y ); } g_object_set_data( widget->native, "claro_widget", widget ); if ( widget->flags & cWidgetCustomDraw ) cgraphics_screen_changed_handler( widget->native, NULL, widget ); gtk_widget_show( GTK_WIDGET(widget->native) ); }