Search
lxdream.org :: lxdream/src/drivers/video_gtk.c :: diff
lxdream 0.9.1
released Jun 29
Download Now
filename src/drivers/video_gtk.c
changeset 659:6b1dff1575b3
prev658:f5926310bfbe
next661:99d9494955a9
author nkeynes
date Wed Apr 16 22:54:40 2008 +0000 (11 years ago)
permissions -rw-r--r--
last change Move drawable creation to video_gtk.c - removes the last platform dependency from gtkui
file annotate diff log raw
1.1 --- a/src/drivers/video_gtk.c Wed Apr 16 12:43:52 2008 +0000
1.2 +++ b/src/drivers/video_gtk.c Wed Apr 16 22:54:40 2008 +0000
1.3 @@ -98,7 +98,8 @@
1.4 #endif
1.5
1.6 #endif
1.7 -GtkWidget *gtk_video_win = NULL;
1.8 +
1.9 +static GtkWidget *gtk_video_drawable = NULL;
1.10 int video_width = 640;
1.11 int video_height = 480;
1.12
1.13 @@ -221,26 +222,51 @@
1.14 return DCKB_NONE;
1.15 }
1.16
1.17 +GtkWidget *video_gtk_create_drawable()
1.18 +{
1.19 + GtkWidget *drawable = gtk_drawing_area_new();
1.20 + GTK_WIDGET_SET_FLAGS(drawable, GTK_CAN_FOCUS|GTK_CAN_DEFAULT);
1.21 +
1.22 + g_signal_connect( drawable, "expose_event",
1.23 + G_CALLBACK(video_gtk_expose_callback), NULL );
1.24 + g_signal_connect( drawable, "configure_event",
1.25 + G_CALLBACK(video_gtk_resize_callback), NULL );
1.26 +
1.27 +#ifdef HAVE_GLX
1.28 + Display *display = gdk_x11_display_get_xdisplay( gtk_widget_get_display(drawable));
1.29 + Screen *screen = gdk_x11_screen_get_xscreen( gtk_widget_get_screen(drawable));
1.30 + int screen_no = XScreenNumberOfScreen(screen);
1.31 + if( !video_glx_init(display, screen_no) ) {
1.32 + ERROR( "Unable to initialize GLX, aborting" );
1.33 + exit(3);
1.34 + }
1.35 +
1.36 + XVisualInfo *visual = video_glx_get_visual();
1.37 + if( visual != NULL ) {
1.38 + GdkVisual *gdkvis = gdk_x11_screen_lookup_visual( gtk_widget_get_screen(drawable), visual->visualid );
1.39 + GdkColormap *colormap = gdk_colormap_new( gdkvis, FALSE );
1.40 + gtk_widget_set_colormap( drawable, colormap );
1.41 + }
1.42 +#endif
1.43 + gtk_video_drawable = drawable;
1.44 + return drawable;
1.45 +}
1.46 +
1.47 gboolean video_gtk_init()
1.48 {
1.49
1.50 - gtk_video_win = gtk_gui_get_renderarea();
1.51 - if( gtk_video_win == NULL ) {
1.52 + if( gtk_video_drawable == NULL ) {
1.53 return FALSE;
1.54 }
1.55
1.56 - g_signal_connect( gtk_video_win, "expose_event",
1.57 - G_CALLBACK(video_gtk_expose_callback), NULL );
1.58 - g_signal_connect( gtk_video_win, "configure_event",
1.59 - G_CALLBACK(video_gtk_resize_callback), NULL );
1.60 - video_width = gtk_video_win->allocation.width;
1.61 - video_height = gtk_video_win->allocation.height;
1.62 + video_width = gtk_video_drawable->allocation.width;
1.63 + video_height = gtk_video_drawable->allocation.height;
1.64 #ifdef HAVE_OSMESA
1.65 video_gdk_init_driver( &display_gtk_driver );
1.66 #else
1.67 #ifdef HAVE_GLX
1.68 - Display *display = gdk_x11_display_get_xdisplay( gtk_widget_get_display(GTK_WIDGET(gtk_video_win)));
1.69 - Window window = GDK_WINDOW_XWINDOW( GTK_WIDGET(gtk_video_win)->window );
1.70 + Display *display = gdk_x11_display_get_xdisplay( gtk_widget_get_display(GTK_WIDGET(gtk_video_drawable)));
1.71 + Window window = GDK_WINDOW_XWINDOW( GTK_WIDGET(gtk_video_drawable)->window );
1.72 if( ! video_glx_init_context( display, window ) ||
1.73 ! video_glx_init_driver( &display_gtk_driver ) ) {
1.74 return FALSE;
1.75 @@ -256,36 +282,27 @@
1.76
1.77 gboolean video_gtk_display_blank( uint32_t colour )
1.78 {
1.79 - GdkGC *gc = gdk_gc_new(gtk_video_win->window);
1.80 + GdkGC *gc = gdk_gc_new(gtk_video_drawable->window);
1.81 GdkColor color = {0, ((colour>>16)&0xFF)*257, ((colour>>8)&0xFF)*257, ((colour)&0xFF)*257 };
1.82 GdkColormap *cmap = gdk_colormap_get_system();
1.83 gdk_colormap_alloc_color( cmap, &color, TRUE, TRUE );
1.84 gdk_gc_set_foreground( gc, &color );
1.85 gdk_gc_set_background( gc, &color );
1.86 - gdk_draw_rectangle( gtk_video_win->window, gc, TRUE, 0, 0, video_width, video_height );
1.87 + gdk_draw_rectangle( gtk_video_drawable->window, gc, TRUE, 0, 0, video_width, video_height );
1.88 gdk_gc_destroy(gc);
1.89 gdk_colormap_free_colors( cmap, &color, 1 );
1.90 }
1.91
1.92 -#ifdef HAVE_GTK_X11
1.93 -XVisualInfo *video_gtk_get_visual()
1.94 -{
1.95 -#ifdef HAVE_OSMESA
1.96 - return NULL;
1.97 -#else
1.98 - return video_glx_get_visual();
1.99 -#endif
1.100 -}
1.101 -#endif
1.102 -
1.103 void video_gtk_shutdown()
1.104 {
1.105 - if( gtk_video_win != NULL ) {
1.106 + if( gtk_video_drawable != NULL ) {
1.107 #ifdef HAVE_OSMESA
1.108 video_gdk_shutdown();
1.109 #else
1.110 +#ifdef HAVE_GLX
1.111 video_glx_shutdown();
1.112 #endif
1.113 +#endif
1.114 }
1.115 #ifdef HAVE_LINUX_JOYSTICK
1.116 linux_joystick_shutdown();
.