summaryrefslogtreecommitdiff
path: root/gdk/directfb/gdkvisual-directfb.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/directfb/gdkvisual-directfb.c')
-rw-r--r--gdk/directfb/gdkvisual-directfb.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/gdk/directfb/gdkvisual-directfb.c b/gdk/directfb/gdkvisual-directfb.c
index e8618dc77b..e9830fe786 100644
--- a/gdk/directfb/gdkvisual-directfb.c
+++ b/gdk/directfb/gdkvisual-directfb.c
@@ -63,7 +63,7 @@ static DFBSurfacePixelFormat formats[] =
DSPF_RGB332
};
-static GdkVisual * system_visual = NULL;
+GdkVisual * system_visual = NULL;
static GdkVisualDirectFB * visuals[G_N_ELEMENTS (formats) + 1] = { NULL };
static gint available_depths[G_N_ELEMENTS (formats) + 1] = {0};
static GdkVisualType available_types[G_N_ELEMENTS (formats) + 1] = {0};
@@ -110,7 +110,7 @@ gdk_visual_get_type (void)
}
void
-_gdk_visual_init (void)
+_gdk_visual_init ()
{
DFBResult ret;
DFBDisplayLayerConfig dlc;
@@ -118,11 +118,10 @@ _gdk_visual_init (void)
IDirectFBSurface *dest;
gint i, c;
- GdkWindowImplDirectFB *root_impl = GDK_WINDOW_IMPL_DIRECTFB (
- GDK_WINDOW_OBJECT(_gdk_parent_root)->impl);
_gdk_display->layer->GetConfiguration (_gdk_display->layer, &dlc);
-
+ g_assert( dlc.pixelformat != DSPF_UNKNOWN);
+
dest = gdk_display_dfb_create_surface(_gdk_display,dlc.pixelformat,8,8);
g_assert (dest != NULL);
@@ -152,13 +151,9 @@ _gdk_visual_init (void)
dest->GetAccelerationMask (dest, src, &acc);
- if (acc & DFXL_BLIT)
+ if (acc & DFXL_BLIT || formats[i] == dlc.pixelformat)
{
- visuals[c] = gdk_directfb_visual_create (formats[i]);
-
- if (formats[i] == root_impl->drawable.format)
system_visual = GDK_VISUAL (visuals[c]);
-
c++;
}
@@ -167,17 +162,20 @@ _gdk_visual_init (void)
dest->Release (dest);
+ //fallback to ARGB
if (!system_visual)
{
- visuals[c] = gdk_directfb_visual_create (root_impl->drawable.format);
- system_visual = GDK_VISUAL (visuals[c]);
+ for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+ if (formats[i] == DSPF_ARGB ) {
+ if( visuals[i] == NULL )
+ visuals[i] = gdk_directfb_visual_create (formats[i]);
+ system_visual = visuals[i];
+ break;
+ }
+ }
}
- g_assert (system_visual);
- /*
- Now we can set up the system colormap
- */
- gdk_drawable_set_colormap (GDK_DRAWABLE (_gdk_parent_root),gdk_colormap_get_system());
+ g_assert (system_visual != NULL);
}
gint
@@ -195,6 +193,7 @@ gdk_visual_get_best_type (void)
GdkVisual*
gdk_screen_get_system_visual (GdkScreen *screen)
{
+ g_assert( system_visual);
return system_visual;
}