예제 #1
0
파일: debug.c 프로젝트: purplefoot/zerp
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");
	}
}
예제 #2
0
파일: exec.c 프로젝트: FangKuangKuang/egui
/**
 * 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;
}
예제 #3
0
파일: exec.c 프로젝트: FangKuangKuang/egui
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;
    }
}
예제 #4
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;
        }
    }
}
예제 #5
0
파일: gtk.c 프로젝트: Airr/Claro
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) );
}