rendered paste bodyvoid View_AddView( mg2_view_object *view, gint location_x, gint location_y ){ GtkWidget *window; GtkGLArea *glarea; /* Attribute list for gtkglarea widget. Specifies a list of Boolean attributes and enum/integer attribute/value pairs. The last attribute must be GDK_GL_NONE. See glXChooseVisual manpage for further explanation. */ gint attrlist[] = { GDK_GL_RGBA, GDK_GL_DOUBLEBUFFER, GDK_GL_DEPTH_SIZE,1, GDK_GL_NONE }; if( share_view == NULL ) printf("share_view is NULL\n"); view->glarea = glarea = GTK_GL_AREA( gtk_gl_area_share_new(attrlist, share_view) ); view_list = g_slist_append( view_list, view );//gtk_object_set_data(GTK_OBJECT(glarea), "mg2_view_object", view); gtk_widget_set_events( GTK_WIDGET(glarea), GDK_EXPOSURE_MASK| GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK| GDK_POINTER_MOTION_MASK| GDK_POINTER_MOTION_HINT_MASK ); /* Connect signal handlers */ /* Redraw image when exposed. */ gtk_signal_connect(GTK_OBJECT(glarea), "expose_event", GTK_SIGNAL_FUNC(DrawExpose), view ); /* When window is resized viewport needs to be resized also. */ gtk_signal_connect(GTK_OBJECT(glarea), "configure_event", GTK_SIGNAL_FUNC(Reshape), view ); /* Do initialization when widget has been realized. */ gtk_signal_connect(GTK_OBJECT(glarea), "realize", GTK_SIGNAL_FUNC(InitView), (gpointer) view); gtk_signal_connect(GTK_OBJECT(glarea), "button_press_event", GTK_SIGNAL_FUNC(ButtonPress), view); gtk_signal_connect(GTK_OBJECT(glarea), "button_release_event", GTK_SIGNAL_FUNC(ButtonRelease), view); gtk_signal_connect(GTK_OBJECT(glarea), "motion_notify_event", GTK_SIGNAL_FUNC(Motion), NULL); /* set minimum size */ if( view->width != 0 ) { gtk_widget_set_usize( GTK_WIDGET(glarea), view->width, view->height); } /* Create new top level window. */ window = gtk_window_new( GTK_WINDOW_TOPLEVEL); switch(view->type) { case MG2_PERSPECTIVE_VIEW: if( !view->camera->is_view_only ) { gtk_window_set_title(GTK_WINDOW(window), "mg^2: Camera"); } else { gtk_window_set_title(GTK_WINDOW(window), "mg^2: Perspective"); } break; case MG2_TOP_VIEW: gtk_window_set_title(GTK_WINDOW(window), "mg^2: Top"); break; case MG2_FRONT_VIEW: gtk_window_set_title(GTK_WINDOW(window), "mg^2: Front"); break; case MG2_RIGHT_VIEW: gtk_window_set_title(GTK_WINDOW(window), "mg^2: Right"); break; } // end switch(view->type) gtk_container_border_width(GTK_CONTAINER(window), 0); gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(CloseViewWin), view);//gtk_signal_connect(GTK_OBJECT(window), "destroy",// GTK_SIGNAL_FUNC(CloseViewWin), view); gtk_quit_add_destroy(1, GTK_OBJECT(window)); /* put glarea into window and show it all */ gtk_container_add(GTK_CONTAINER(window),GTK_WIDGET(glarea)); gtk_widget_show(GTK_WIDGET(glarea)); gtk_widget_show(GTK_WIDGET(window)); if(location_x != -1) gtk_widget_set_uposition( window, location_x, location_y);} // end ViewWin()