From e48bd2e00be2463bdd6c0a9f37331c2254c479b7 Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Sat, 27 Feb 2016 15:23:19 +0100 Subject: [PATCH] win32: move gdkvisual code in gdkscreen Except for the init function, all the visual related code is made of gdkscreen vfuncs, so let's move it to gdkscreen-win32. This way we avoid keeping other static variables and instead store the info inside the screen struct. --- gdk/Makefile.am | 1 - gdk/win32/Makefile.am | 1 - gdk/win32/gdkdisplay-win32.c | 1 - gdk/win32/gdkprivate-win32.h | 14 -- gdk/win32/gdkscreen-win32.c | 336 ++++++++++++++++++++++++++++++++-- gdk/win32/gdkvisual-win32.c | 345 ----------------------------------- gdk/win32/makefile.msc | 1 - 7 files changed, 325 insertions(+), 374 deletions(-) delete mode 100644 gdk/win32/gdkvisual-win32.c diff --git a/gdk/Makefile.am b/gdk/Makefile.am index 7d5feecd87..d8340eec2c 100644 --- a/gdk/Makefile.am +++ b/gdk/Makefile.am @@ -318,7 +318,6 @@ w32_introspection_files = \ win32/gdkscreen-win32.c \ win32/gdkselection-win32.c \ win32/gdktestutils-win32.c \ - win32/gdkvisual-win32.c \ win32/gdkwin32.h \ win32/gdkwin32cursor.h \ win32/gdkwin32display.h \ diff --git a/gdk/win32/Makefile.am b/gdk/win32/Makefile.am index 7ad92ff432..33a0d617db 100644 --- a/gdk/win32/Makefile.am +++ b/gdk/win32/Makefile.am @@ -52,7 +52,6 @@ libgdk_win32_la_SOURCES = \ gdkscreen-win32.c \ gdkselection-win32.c \ gdktestutils-win32.c \ - gdkvisual-win32.c \ gdkwin32cursor.h \ gdkwin32display.h \ gdkwin32displaymanager.h \ diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c index 6832cbcf6e..f9c9cecd33 100644 --- a/gdk/win32/gdkdisplay-win32.c +++ b/gdk/win32/gdkdisplay-win32.c @@ -267,7 +267,6 @@ _gdk_win32_display_open (const gchar *display_name) win32_display->screen = g_object_new (GDK_TYPE_WIN32_SCREEN, NULL); _gdk_monitor_init (GDK_WIN32_SCREEN (win32_display->screen)); - _gdk_visual_init (win32_display->screen); _gdk_screen_init_root_window (GDK_WIN32_SCREEN (win32_display->screen)); _gdk_events_init (); _gdk_input_init (_gdk_display); diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index fbce80b772..8813329f29 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -508,20 +508,7 @@ void _gdk_win32_window_change_property (GdkWindow *window, void _gdk_win32_window_delete_property (GdkWindow *window, GdkAtom property); /* Stray GdkWin32Screen members */ -GdkVisual *_gdk_win32_screen_get_system_visual (GdkScreen *screen); -GdkVisual *_gdk_win32_screen_get_rgba_visual (GdkScreen *screen); gboolean _gdk_win32_screen_get_setting (GdkScreen *screen, const gchar *name, GValue *value); -gint _gdk_win32_screen_visual_get_best_depth (GdkScreen *screen); -GdkVisualType _gdk_win32_screen_visual_get_best_type (GdkScreen *screen); -GdkVisual *_gdk_win32_screen_visual_get_best (GdkScreen *screen); -GdkVisual *_gdk_win32_screen_visual_get_best_with_depth (GdkScreen *screen, gint depth); -GdkVisual *_gdk_win32_screen_visual_get_best_with_type (GdkScreen *screen, GdkVisualType visual_type); -GdkVisual *_gdk_win32_screen_visual_get_best_with_both (GdkScreen *screen, gint depth, GdkVisualType visual_type); -void _gdk_win32_screen_query_depths (GdkScreen *screen, gint **depths, gint *count); -void _gdk_win32_screen_query_visual_types (GdkScreen *screen, - GdkVisualType **visual_types, - gint *count); -GList *_gdk_win32_screen_list_visuals (GdkScreen *screen); /* Distributed display manager implementation */ GdkDisplay *_gdk_win32_display_open (const gchar *display_name); @@ -540,7 +527,6 @@ void _gdk_win32_windowing_init (void); void _gdk_screen_init_root_window (GdkWin32Screen *screen_win32); void _gdk_screen_init_root_window_size (GdkWin32Screen *screen); void _gdk_monitor_init(GdkWin32Screen *screen); -void _gdk_visual_init (GdkScreen *screen); void _gdk_dnd_init (void); void _gdk_events_init (void); void _gdk_input_wintab_init_check (GdkDeviceManager *device_manager); diff --git a/gdk/win32/gdkscreen-win32.c b/gdk/win32/gdkscreen-win32.c index 19a69f9a02..3417706fa7 100644 --- a/gdk/win32/gdkscreen-win32.c +++ b/gdk/win32/gdkscreen-win32.c @@ -39,6 +39,11 @@ struct _GdkWin32Screen gint num_monitors; GdkWin32Monitor *monitors; + GdkVisual *system_visual; + GdkVisual *rgba_visual; + gint available_visual_depths[1]; + GdkVisualType available_visual_types[1]; + GdkWindow *root_window; gint always_composited : 1; @@ -51,6 +56,206 @@ struct _GdkWin32ScreenClass G_DEFINE_TYPE (GdkWin32Screen, gdk_win32_screen, GDK_TYPE_SCREEN) +static gint +get_color_precision (gulong mask) +{ + gint p = 0; + + while (mask & 0x1) + { + p++; + mask >>= 1; + } + + return p; +} + +static GdkVisual * +init_visual (GdkScreen *screen, + gboolean is_rgba) +{ + GdkVisual *visual; + struct + { + BITMAPINFOHEADER bi; + union + { + RGBQUAD colors[256]; + DWORD fields[256]; + } u; + } bmi; + HBITMAP hbm; + + const gint rastercaps = GetDeviceCaps (_gdk_display_hdc, RASTERCAPS); + const int numcolors = GetDeviceCaps (_gdk_display_hdc, NUMCOLORS); + gint bitspixel = GetDeviceCaps (_gdk_display_hdc, BITSPIXEL); + gint map_entries = 0; + + visual = g_object_new (GDK_TYPE_VISUAL, NULL); + visual->screen = screen; + + if (rastercaps & RC_PALETTE) + { + const int sizepalette = GetDeviceCaps (_gdk_display_hdc, SIZEPALETTE); + gchar *max_colors = getenv ("GDK_WIN32_MAX_COLORS"); + visual->type = GDK_VISUAL_PSEUDO_COLOR; + + g_assert (sizepalette == 256); + + if (max_colors != NULL) + _gdk_max_colors = atoi (max_colors); + + map_entries = _gdk_max_colors; + + if (map_entries >= 16 && map_entries < sizepalette) + { + if (map_entries < 32) + { + map_entries = 16; + visual->type = GDK_VISUAL_STATIC_COLOR; + bitspixel = 4; + } + else if (map_entries < 64) + { + map_entries = 32; + bitspixel = 5; + } + else if (map_entries < 128) + { + map_entries = 64; + bitspixel = 6; + } + else if (map_entries < 256) + { + map_entries = 128; + bitspixel = 7; + } + else + g_assert_not_reached (); + } + else + map_entries = sizepalette; + } + else if (bitspixel == 1 && numcolors == 16) + { + bitspixel = 4; + visual->type = GDK_VISUAL_STATIC_COLOR; + map_entries = 16; + } + else if (bitspixel == 1) + { + visual->type = GDK_VISUAL_STATIC_GRAY; + map_entries = 2; + } + else if (bitspixel == 4) + { + visual->type = GDK_VISUAL_STATIC_COLOR; + map_entries = 16; + } + else if (bitspixel == 8) + { + visual->type = GDK_VISUAL_STATIC_COLOR; + map_entries = 256; + } + else if (bitspixel == 16) + { + visual->type = GDK_VISUAL_TRUE_COLOR; +#if 1 + /* This code by Mike Enright, + * see http://www.users.cts.com/sd/m/menright/display.html + */ + memset (&bmi, 0, sizeof (bmi)); + bmi.bi.biSize = sizeof (bmi.bi); + + hbm = CreateCompatibleBitmap (_gdk_display_hdc, 1, 1); + GetDIBits (_gdk_display_hdc, hbm, 0, 1, NULL, + (BITMAPINFO *) &bmi, DIB_RGB_COLORS); + GetDIBits (_gdk_display_hdc, hbm, 0, 1, NULL, + (BITMAPINFO *) &bmi, DIB_RGB_COLORS); + DeleteObject (hbm); + + if (bmi.bi.biCompression != BI_BITFIELDS) + { + /* Either BI_RGB or BI_RLE_something + * .... or perhaps (!!) something else. + * Theoretically biCompression might be + * mmioFourCC('c','v','i','d') but I doubt it. + */ + if (bmi.bi.biCompression == BI_RGB) + { + /* It's 555 */ + bitspixel = 15; + visual->red_mask = 0x00007C00; + visual->green_mask = 0x000003E0; + visual->blue_mask = 0x0000001F; + } + else + { + g_assert_not_reached (); + } + } + else + { + DWORD allmasks = + bmi.u.fields[0] | bmi.u.fields[1] | bmi.u.fields[2]; + int k = 0; + while (allmasks) + { + if (allmasks&1) + k++; + allmasks/=2; + } + bitspixel = k; + visual->red_mask = bmi.u.fields[0]; + visual->green_mask = bmi.u.fields[1]; + visual->blue_mask = bmi.u.fields[2]; + } +#else + /* Old, incorrect (but still working) code. */ +#if 0 + visual->red_mask = 0x0000F800; + visual->green_mask = 0x000007E0; + visual->blue_mask = 0x0000001F; +#else + visual->red_mask = 0x00007C00; + visual->green_mask = 0x000003E0; + visual->blue_mask = 0x0000001F; +#endif +#endif + } + else if (bitspixel == 24 || bitspixel == 32) + { + if (!is_rgba) + bitspixel = 24; + visual->type = GDK_VISUAL_TRUE_COLOR; + visual->red_mask = 0x00FF0000; + visual->green_mask = 0x0000FF00; + visual->blue_mask = 0x000000FF; + } + else + g_error ("_gdk_visual_init: unsupported BITSPIXEL: %d\n", bitspixel); + + visual->depth = bitspixel; + visual->byte_order = GDK_LSB_FIRST; + visual->bits_per_rgb = 42; /* Not used? */ + + if ((visual->type != GDK_VISUAL_TRUE_COLOR) && + (visual->type != GDK_VISUAL_DIRECT_COLOR)) + { + visual->red_mask = 0; + visual->green_mask = 0; + visual->blue_mask = 0; + } + else + map_entries = 1 << (MAX (get_color_precision (visual->red_mask), + MAX (get_color_precision (visual->green_mask), + get_color_precision (visual->blue_mask)))); + + visual->colormap_size = map_entries; + + return visual; +} + static void gdk_win32_screen_init (GdkWin32Screen *win32_screen) { @@ -78,6 +283,12 @@ gdk_win32_screen_init (GdkWin32Screen *win32_screen) if (logpixelsx > 0) _gdk_screen_set_resolution (screen, logpixelsx); + win32_screen->system_visual = init_visual (screen, FALSE); + win32_screen->rgba_visual = init_visual (screen, TRUE); + + win32_screen->available_visual_depths[0] = win32_screen->rgba_visual->depth; + win32_screen->available_visual_types[0] = win32_screen->rgba_visual->type; + /* On Windows 8 and later, DWM (composition) is always enabled */ win32_screen->always_composited = g_win32_check_windows_version (6, 2, 0, G_WIN32_OS_ANY); } @@ -400,6 +611,109 @@ gdk_win32_screen_is_composited (GdkScreen *screen) } } +static gint +gdk_win32_screen_visual_get_best_depth (GdkScreen *screen) +{ + return GDK_WIN32_SCREEN (screen)->available_visual_depths[0]; +} + +static GdkVisualType +gdk_win32_screen_visual_get_best_type (GdkScreen *screen) +{ + return GDK_WIN32_SCREEN (screen)->available_visual_types[0]; +} + +static GdkVisual * +gdk_win32_screen_get_system_visual (GdkScreen *screen) +{ + return GDK_WIN32_SCREEN (screen)->system_visual; +} + +static GdkVisual * +gdk_win32_screen_get_rgba_visual (GdkScreen *screen) +{ + return GDK_WIN32_SCREEN (screen)->rgba_visual; +} + +static GdkVisual* +gdk_win32_screen_visual_get_best (GdkScreen *screen) +{ + return GDK_WIN32_SCREEN (screen)->rgba_visual; +} + +static GdkVisual * +gdk_win32_screen_visual_get_best_with_depth (GdkScreen *screen, + gint depth) +{ + GdkWin32Screen *win32_screen = GDK_WIN32_SCREEN (screen); + + if (depth == win32_screen->rgba_visual->depth) + return win32_screen->rgba_visual; + else if (depth == win32_screen->system_visual->depth) + return win32_screen->system_visual; + + return NULL; +} + +static GdkVisual * +gdk_win32_screen_visual_get_best_with_type (GdkScreen *screen, + GdkVisualType visual_type) +{ + GdkWin32Screen *win32_screen = GDK_WIN32_SCREEN (screen); + + if (visual_type == win32_screen->rgba_visual->type) + return win32_screen->rgba_visual; + else if (visual_type == win32_screen->system_visual->type) + return win32_screen->system_visual; + + return NULL; +} + +static GdkVisual * +gdk_win32_screen_visual_get_best_with_both (GdkScreen *screen, + gint depth, + GdkVisualType visual_type) +{ + GdkWin32Screen *win32_screen = GDK_WIN32_SCREEN (screen); + + if ((depth == win32_screen->rgba_visual->depth) && (visual_type == win32_screen->rgba_visual->type)) + return win32_screen->rgba_visual; + else if ((depth == win32_screen->system_visual->depth) && (visual_type == win32_screen->system_visual->type)) + return win32_screen->system_visual; + + return NULL; +} + +static void +gdk_win32_screen_query_depths (GdkScreen *screen, + gint **depths, + gint *count) +{ + *count = 1; + *depths = GDK_WIN32_SCREEN (screen)->available_visual_depths; +} + +static void +gdk_win32_screen_query_visual_types (GdkScreen *screen, + GdkVisualType **visual_types, + gint *count) +{ + *count = 1; + *visual_types = GDK_WIN32_SCREEN (screen)->available_visual_types; +} + +static GList * +gdk_win32_screen_list_visuals (GdkScreen *screen) +{ + GdkWin32Screen *win32_screen = GDK_WIN32_SCREEN (screen); + GList *result = NULL; + + result = g_list_append (result, win32_screen->rgba_visual); + result = g_list_append (result, win32_screen->system_visual); + + return result; +} + static void gdk_win32_screen_finalize (GObject *object) { @@ -435,20 +749,20 @@ gdk_win32_screen_class_init (GdkWin32ScreenClass *klass) screen_class->get_monitor_plug_name = gdk_win32_screen_get_monitor_plug_name; screen_class->get_monitor_geometry = gdk_win32_screen_get_monitor_geometry; screen_class->get_monitor_workarea = gdk_win32_screen_get_monitor_geometry; - screen_class->get_system_visual = _gdk_win32_screen_get_system_visual; - screen_class->get_rgba_visual = _gdk_win32_screen_get_rgba_visual; screen_class->is_composited = gdk_win32_screen_is_composited; screen_class->make_display_name = gdk_win32_screen_make_display_name; screen_class->get_active_window = gdk_win32_screen_get_active_window; screen_class->get_window_stack = gdk_win32_screen_get_window_stack; screen_class->get_setting = _gdk_win32_screen_get_setting; - screen_class->visual_get_best_depth = _gdk_win32_screen_visual_get_best_depth; - screen_class->visual_get_best_type = _gdk_win32_screen_visual_get_best_type; - screen_class->visual_get_best = _gdk_win32_screen_visual_get_best; - screen_class->visual_get_best_with_depth = _gdk_win32_screen_visual_get_best_with_depth; - screen_class->visual_get_best_with_type = _gdk_win32_screen_visual_get_best_with_type; - screen_class->visual_get_best_with_both = _gdk_win32_screen_visual_get_best_with_both; - screen_class->query_depths = _gdk_win32_screen_query_depths; - screen_class->query_visual_types = _gdk_win32_screen_query_visual_types; - screen_class->list_visuals = _gdk_win32_screen_list_visuals; + screen_class->get_system_visual = gdk_win32_screen_get_system_visual; + screen_class->get_rgba_visual = gdk_win32_screen_get_rgba_visual; + screen_class->visual_get_best_depth = gdk_win32_screen_visual_get_best_depth; + screen_class->visual_get_best_type = gdk_win32_screen_visual_get_best_type; + screen_class->visual_get_best = gdk_win32_screen_visual_get_best; + screen_class->visual_get_best_with_depth = gdk_win32_screen_visual_get_best_with_depth; + screen_class->visual_get_best_with_type = gdk_win32_screen_visual_get_best_with_type; + screen_class->visual_get_best_with_both = gdk_win32_screen_visual_get_best_with_both; + screen_class->query_depths = gdk_win32_screen_query_depths; + screen_class->query_visual_types = gdk_win32_screen_query_visual_types; + screen_class->list_visuals = gdk_win32_screen_list_visuals; } diff --git a/gdk/win32/gdkvisual-win32.c b/gdk/win32/gdkvisual-win32.c deleted file mode 100644 index c14be04a89..0000000000 --- a/gdk/win32/gdkvisual-win32.c +++ /dev/null @@ -1,345 +0,0 @@ -/* GDK - The GIMP Drawing Kit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * Copyright (C) 1998-2002 Tor Lillqvist - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#include "config.h" -#include - -#include "gdkvisual.h" -#include "gdkscreen.h" /* gdk_screen_get_default() */ -#include "gdkprivate-win32.h" -#include "gdkvisualprivate.h" - -static GdkVisual *system_visual = NULL; -static GdkVisual *rgba_visual = NULL; - -static gint available_depths[1]; - -static GdkVisualType available_types[1]; - -static gint -get_color_precision (gulong mask) -{ - gint p = 0; - - while (mask & 0x1) - { - p++; - mask >>= 1; - } - - return p; -} - -static void -_gdk_visual_init_internal (GdkScreen *screen, gboolean is_rgba) -{ - GdkVisual *visual; - struct - { - BITMAPINFOHEADER bi; - union - { - RGBQUAD colors[256]; - DWORD fields[256]; - } u; - } bmi; - HBITMAP hbm; - - const gint rastercaps = GetDeviceCaps (_gdk_display_hdc, RASTERCAPS); - const int numcolors = GetDeviceCaps (_gdk_display_hdc, NUMCOLORS); - gint bitspixel = GetDeviceCaps (_gdk_display_hdc, BITSPIXEL); - gint map_entries = 0; - - visual = g_object_new (GDK_TYPE_VISUAL, NULL); - visual->screen = screen; - - if (rastercaps & RC_PALETTE) - { - const int sizepalette = GetDeviceCaps (_gdk_display_hdc, SIZEPALETTE); - gchar *max_colors = getenv ("GDK_WIN32_MAX_COLORS"); - visual->type = GDK_VISUAL_PSEUDO_COLOR; - - g_assert (sizepalette == 256); - - if (max_colors != NULL) - _gdk_max_colors = atoi (max_colors); - - map_entries = _gdk_max_colors; - - if (map_entries >= 16 && map_entries < sizepalette) - { - if (map_entries < 32) - { - map_entries = 16; - visual->type = GDK_VISUAL_STATIC_COLOR; - bitspixel = 4; - } - else if (map_entries < 64) - { - map_entries = 32; - bitspixel = 5; - } - else if (map_entries < 128) - { - map_entries = 64; - bitspixel = 6; - } - else if (map_entries < 256) - { - map_entries = 128; - bitspixel = 7; - } - else - g_assert_not_reached (); - } - else - map_entries = sizepalette; - } - else if (bitspixel == 1 && numcolors == 16) - { - bitspixel = 4; - visual->type = GDK_VISUAL_STATIC_COLOR; - map_entries = 16; - } - else if (bitspixel == 1) - { - visual->type = GDK_VISUAL_STATIC_GRAY; - map_entries = 2; - } - else if (bitspixel == 4) - { - visual->type = GDK_VISUAL_STATIC_COLOR; - map_entries = 16; - } - else if (bitspixel == 8) - { - visual->type = GDK_VISUAL_STATIC_COLOR; - map_entries = 256; - } - else if (bitspixel == 16) - { - visual->type = GDK_VISUAL_TRUE_COLOR; -#if 1 - /* This code by Mike Enright, - * see http://www.users.cts.com/sd/m/menright/display.html - */ - memset (&bmi, 0, sizeof (bmi)); - bmi.bi.biSize = sizeof (bmi.bi); - - hbm = CreateCompatibleBitmap (_gdk_display_hdc, 1, 1); - GetDIBits (_gdk_display_hdc, hbm, 0, 1, NULL, - (BITMAPINFO *) &bmi, DIB_RGB_COLORS); - GetDIBits (_gdk_display_hdc, hbm, 0, 1, NULL, - (BITMAPINFO *) &bmi, DIB_RGB_COLORS); - DeleteObject (hbm); - - if (bmi.bi.biCompression != BI_BITFIELDS) - { - /* Either BI_RGB or BI_RLE_something - * .... or perhaps (!!) something else. - * Theoretically biCompression might be - * mmioFourCC('c','v','i','d') but I doubt it. - */ - if (bmi.bi.biCompression == BI_RGB) - { - /* It's 555 */ - bitspixel = 15; - visual->red_mask = 0x00007C00; - visual->green_mask = 0x000003E0; - visual->blue_mask = 0x0000001F; - } - else - { - g_assert_not_reached (); - } - } - else - { - DWORD allmasks = - bmi.u.fields[0] | bmi.u.fields[1] | bmi.u.fields[2]; - int k = 0; - while (allmasks) - { - if (allmasks&1) - k++; - allmasks/=2; - } - bitspixel = k; - visual->red_mask = bmi.u.fields[0]; - visual->green_mask = bmi.u.fields[1]; - visual->blue_mask = bmi.u.fields[2]; - } -#else - /* Old, incorrect (but still working) code. */ -#if 0 - visual->red_mask = 0x0000F800; - visual->green_mask = 0x000007E0; - visual->blue_mask = 0x0000001F; -#else - visual->red_mask = 0x00007C00; - visual->green_mask = 0x000003E0; - visual->blue_mask = 0x0000001F; -#endif -#endif - } - else if (bitspixel == 24 || bitspixel == 32) - { - if (!is_rgba) - bitspixel = 24; - visual->type = GDK_VISUAL_TRUE_COLOR; - visual->red_mask = 0x00FF0000; - visual->green_mask = 0x0000FF00; - visual->blue_mask = 0x000000FF; - } - else - g_error ("_gdk_visual_init: unsupported BITSPIXEL: %d\n", bitspixel); - - visual->depth = bitspixel; - visual->byte_order = GDK_LSB_FIRST; - visual->bits_per_rgb = 42; /* Not used? */ - - if ((visual->type != GDK_VISUAL_TRUE_COLOR) && - (visual->type != GDK_VISUAL_DIRECT_COLOR)) - { - visual->red_mask = 0; - visual->green_mask = 0; - visual->blue_mask = 0; - } - else - map_entries = 1 << (MAX (get_color_precision (visual->red_mask), - MAX (get_color_precision (visual->green_mask), - get_color_precision (visual->blue_mask)))); - - visual->colormap_size = map_entries; - - available_depths[0] = visual->depth; - available_types[0] = visual->type; - - if (is_rgba) - rgba_visual = visual; - else - system_visual = visual; -} - -void -_gdk_visual_init (GdkScreen *screen) -{ - _gdk_visual_init_internal (screen, FALSE); - _gdk_visual_init_internal (screen, TRUE); -} - -gint -_gdk_win32_screen_visual_get_best_depth (GdkScreen *screen) -{ - return available_depths[0]; -} - -GdkVisualType -_gdk_win32_screen_visual_get_best_type (GdkScreen *screen) -{ - return available_types[0]; -} - -GdkVisual* -_gdk_win32_screen_get_system_visual (GdkScreen *screen) -{ - return system_visual; -} - -GdkVisual * -_gdk_win32_screen_get_rgba_visual (GdkScreen *screen) -{ - return rgba_visual; -} - -GdkVisual* -_gdk_win32_screen_visual_get_best (GdkScreen *screen) -{ - return ((GdkVisual*) rgba_visual); -} - -GdkVisual* -_gdk_win32_screen_visual_get_best_with_depth (GdkScreen *screen, gint depth) -{ - if (depth == rgba_visual->depth) - return (GdkVisual*) rgba_visual; - else if (depth == system_visual->depth) - return (GdkVisual*) system_visual; - else - return NULL; -} - -GdkVisual* -_gdk_win32_screen_visual_get_best_with_type (GdkScreen *screen, GdkVisualType visual_type) -{ - if (visual_type == rgba_visual->type) - return rgba_visual; - else if (visual_type == system_visual->type) - return system_visual; - else - return NULL; -} - -GdkVisual* -_gdk_win32_screen_visual_get_best_with_both (GdkScreen *screen, - gint depth, - GdkVisualType visual_type) -{ - if ((depth == rgba_visual->depth) && (visual_type == rgba_visual->type)) - return rgba_visual; - else if ((depth == system_visual->depth) && (visual_type == system_visual->type)) - return system_visual; - else - return NULL; -} - -void -_gdk_win32_screen_query_depths (GdkScreen *screen, - gint **depths, - gint *count) -{ - *count = 1; - *depths = available_depths; -} - -void -_gdk_win32_screen_query_visual_types (GdkScreen *screen, - GdkVisualType **visual_types, - gint *count) -{ - *count = 1; - *visual_types = available_types; -} - -GList* -_gdk_win32_screen_list_visuals (GdkScreen *screen) -{ - GList *result = NULL; - - result = g_list_append (result, (gpointer) rgba_visual); - result = g_list_append (result, (gpointer) system_visual); - - return result; -} diff --git a/gdk/win32/makefile.msc b/gdk/win32/makefile.msc index fbe7dca967..49e8d5e8bb 100644 --- a/gdk/win32/makefile.msc +++ b/gdk/win32/makefile.msc @@ -48,7 +48,6 @@ gdk_win32_OBJECTS = \ gdkscreen-win32.obj \ gdkselection-win32.obj \ gdktestutils-win32.obj \ - gdkvisual-win32.obj \ gdkwin32id.obj \ gdkwindow-win32.obj