189 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <gdk/gdk.h>
 | |
| 
 | |
| /* We don't technically guarantee that the visual returned by
 | |
|  * gdk_screen_get_rgba_visual is ARGB8888. But if it isn't, lots
 | |
|  * of code will break, so test this here anyway.
 | |
|  * The main point of this test is to ensure that the pixel_details
 | |
|  * functions return meaningful values for TrueColor visuals.
 | |
|  */
 | |
| static void
 | |
| test_rgba_visual (void)
 | |
| {
 | |
|   GdkScreen *screen;
 | |
|   GdkVisual *visual;
 | |
|   guint32 r_mask, g_mask, b_mask;
 | |
|   gint r_shift, g_shift, b_shift;
 | |
|   gint r_precision, g_precision, b_precision;
 | |
|   gint depth;
 | |
|   GdkVisualType type;
 | |
| 
 | |
|   g_test_bug ("764210");
 | |
| 
 | |
|   screen = gdk_screen_get_default ();
 | |
|   visual = gdk_screen_get_rgba_visual (screen);
 | |
| 
 | |
|   if (visual == NULL)
 | |
|     {
 | |
|       g_test_skip ("no rgba visual");
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|   depth = gdk_visual_get_depth (visual);
 | |
|   type = gdk_visual_get_visual_type (visual);
 | |
|   gdk_visual_get_red_pixel_details (visual, &r_mask, &r_shift, &r_precision);
 | |
|   gdk_visual_get_green_pixel_details (visual, &g_mask, &g_shift, &g_precision);
 | |
|   gdk_visual_get_blue_pixel_details (visual, &b_mask, &b_shift, &b_precision);
 | |
| 
 | |
|   g_assert_cmpint (depth, ==, 32);
 | |
|   g_assert_cmpint (type, ==, GDK_VISUAL_TRUE_COLOR);
 | |
| 
 | |
|   g_assert_cmphex (r_mask, ==, 0x00ff0000);
 | |
|   g_assert_cmphex (g_mask, ==, 0x0000ff00);
 | |
|   g_assert_cmphex (b_mask, ==, 0x000000ff);
 | |
| 
 | |
|   g_assert_cmpint (r_shift, ==, 16);
 | |
|   g_assert_cmpint (g_shift, ==,  8);
 | |
|   g_assert_cmpint (b_shift, ==,  0);
 | |
| 
 | |
|   g_assert_cmpint (r_precision, ==, 8);
 | |
|   g_assert_cmpint (g_precision, ==, 8);
 | |
|   g_assert_cmpint (b_precision, ==, 8);
 | |
| }
 | |
| 
 | |
| static void
 | |
| test_list_visuals (void)
 | |
| {
 | |
|   GdkScreen *screen;
 | |
|   GdkVisual *visual;
 | |
|   GdkVisual *rgba_visual;
 | |
|   GdkVisual *system_visual;
 | |
|   GList *list, *l;
 | |
|   gboolean found_system, found_rgba;
 | |
| 
 | |
|   screen = gdk_screen_get_default ();
 | |
|   system_visual = gdk_screen_get_system_visual (screen);
 | |
|   rgba_visual = gdk_screen_get_rgba_visual (screen);
 | |
| 
 | |
|   found_system = FALSE;
 | |
|   found_rgba = FALSE;
 | |
| 
 | |
|   list = gdk_screen_list_visuals (screen);
 | |
|   for (l = list; l; l = l->next)
 | |
|     {
 | |
|       visual = l->data;
 | |
|       if (visual == system_visual)
 | |
|         found_system = TRUE;
 | |
|       if (visual == rgba_visual)
 | |
|         found_rgba = TRUE;
 | |
|       g_assert_true (GDK_IS_VISUAL (visual));
 | |
| 
 | |
|       g_assert_true (gdk_visual_get_screen (visual) == screen);
 | |
|     }
 | |
|   g_list_free (list);
 | |
| 
 | |
|   g_assert (system_visual != NULL && found_system);
 | |
|   g_assert (rgba_visual == NULL || found_rgba);
 | |
| }
 | |
| 
 | |
| static void
 | |
| test_depth (void)
 | |
| {
 | |
|   GdkVisual *visual;
 | |
|   gint *depths;
 | |
|   gint n_depths;
 | |
|   gint i, j;
 | |
|   gboolean is_depth;
 | |
| 
 | |
|   gdk_query_depths (&depths, &n_depths);
 | |
|   g_assert_cmpint (n_depths, >, 0);
 | |
|   for (i = 0; i < n_depths; i++)
 | |
|     {
 | |
|       g_assert_cmpint (depths[i], >, 0);
 | |
|       g_assert_cmpint (depths[i], <=, 32);
 | |
| 
 | |
|       visual = gdk_visual_get_best_with_depth (depths[i]);
 | |
| 
 | |
|       g_assert_nonnull (visual);
 | |
|       g_assert_cmpint (gdk_visual_get_depth (visual), ==, depths[i]);
 | |
|     }
 | |
| 
 | |
|   for (i = 1; i <= 32; i++)
 | |
|     {
 | |
|       is_depth = FALSE;
 | |
|       for (j = 0; j < n_depths; j++)
 | |
|         {
 | |
|           if (i == depths[j])
 | |
|             is_depth = TRUE;
 | |
|         }
 | |
| 
 | |
|       visual = gdk_visual_get_best_with_depth (i);
 | |
|       if (!is_depth)
 | |
|         g_assert_null (visual);
 | |
|       else
 | |
|         {
 | |
|           g_assert_nonnull (visual);
 | |
|           g_assert_cmpint (gdk_visual_get_depth (visual), ==, i);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| static void
 | |
| test_type (void)
 | |
| {
 | |
|   GdkVisual *visual;
 | |
|   GdkVisualType *types;
 | |
|   gint n_types;
 | |
|   gint i, j;
 | |
|   gboolean is_type;
 | |
| 
 | |
|   gdk_query_visual_types (&types, &n_types);
 | |
|   g_assert_cmpint (n_types, >, 0);
 | |
|   for (i = 0; i < n_types; i++)
 | |
|     {
 | |
|       g_assert_cmpint (types[i], >=, GDK_VISUAL_STATIC_GRAY);
 | |
|       g_assert_cmpint (types[i], <=, GDK_VISUAL_DIRECT_COLOR);
 | |
| 
 | |
|       visual = gdk_visual_get_best_with_type (types[i]);
 | |
| 
 | |
|       g_assert_nonnull (visual);
 | |
|       g_assert_cmpint (gdk_visual_get_visual_type (visual), ==, types[i]);
 | |
|     }
 | |
| 
 | |
|   for (i = GDK_VISUAL_STATIC_GRAY; i <= GDK_VISUAL_DIRECT_COLOR; i++)
 | |
|     {
 | |
|       is_type = FALSE;
 | |
|       for (j = 0; j < n_types; j++)
 | |
|         {
 | |
|           if (i == types[j])
 | |
|             is_type = TRUE;
 | |
|         }
 | |
| 
 | |
|       visual = gdk_visual_get_best_with_type (i);
 | |
|       if (!is_type)
 | |
|         g_assert_null (visual);
 | |
|       else
 | |
|         {
 | |
|           g_assert_nonnull (visual);
 | |
|           g_assert_cmpint (gdk_visual_get_visual_type (visual), ==, i);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| main (int argc, char *argv[])
 | |
| {
 | |
|   g_test_init (&argc, &argv, NULL);
 | |
| 
 | |
|   gdk_init (NULL, NULL);
 | |
| 
 | |
|   g_test_bug_base ("http://bugzilla.gnome.org/");
 | |
| 
 | |
|   g_test_add_func ("/visual/list", test_list_visuals);
 | |
|   g_test_add_func ("/visual/rgba", test_rgba_visual);
 | |
|   g_test_add_func ("/visual/depth", test_depth);
 | |
|   g_test_add_func ("/visual/type", test_type);
 | |
| 
 | |
|   return g_test_run ();
 | |
| }
 | 
