1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
20 * file for a list of people on the GTK+ Team. See the ChangeLog
21 * files for a list of changes. These files are distributed with
22 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
27 #include "gdkvisualprivate.h"
29 #include "gdkprivate-broadway.h"
30 #include "gdkscreen-broadway.h"
31 #include "gdkinternals.h"
33 struct _GdkBroadwayVisual
38 struct _GdkBroadwayVisualClass
40 GObjectClass parent_class;
43 static void gdk_visual_decompose_mask (gulong mask,
48 G_DEFINE_TYPE (GdkBroadwayVisual, gdk_broadway_visual, GDK_TYPE_VISUAL)
51 gdk_broadway_visual_finalize (GObject *object)
53 G_OBJECT_CLASS (gdk_broadway_visual_parent_class)->finalize (object);
57 gdk_broadway_visual_class_init (GdkBroadwayVisualClass *visual_class)
59 GObjectClass *object_class = G_OBJECT_CLASS (visual_class);
61 object_class->finalize = gdk_broadway_visual_finalize;
65 gdk_broadway_visual_init (GdkBroadwayVisual *visual)
70 _gdk_broadway_screen_init_visuals (GdkScreen *screen)
72 GdkBroadwayScreen *broadway_screen;
76 g_return_if_fail (GDK_IS_SCREEN (screen));
77 broadway_screen = GDK_BROADWAY_SCREEN (screen);
80 visuals = g_new (GdkVisual *, nvisuals);
82 visuals[0] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
83 visuals[0]->screen = screen;
84 visuals[0]->type = GDK_VISUAL_TRUE_COLOR;
85 visuals[0]->depth = 32;
86 visuals[0]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
87 visuals[0]->red_mask = 0xff0000;
88 visuals[0]->green_mask = 0xff00;
89 visuals[0]->blue_mask = 0xff;
90 visuals[0]->colormap_size = 256;
91 visuals[0]->bits_per_rgb = 8;
92 gdk_visual_decompose_mask (visuals[0]->red_mask,
93 &visuals[0]->red_shift,
94 &visuals[0]->red_prec);
95 gdk_visual_decompose_mask (visuals[0]->green_mask,
96 &visuals[0]->green_shift,
97 &visuals[0]->green_prec);
98 gdk_visual_decompose_mask (visuals[0]->blue_mask,
99 &visuals[0]->blue_shift,
100 &visuals[0]->blue_prec);
102 visuals[1] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
103 visuals[1]->screen = screen;
104 visuals[1]->type = GDK_VISUAL_TRUE_COLOR;
105 visuals[1]->depth = 24;
106 visuals[1]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
107 visuals[1]->red_mask = 0xff0000;
108 visuals[1]->green_mask = 0xff00;
109 visuals[1]->blue_mask = 0xff;
110 visuals[1]->colormap_size = 256;
111 visuals[1]->bits_per_rgb = 8;
112 gdk_visual_decompose_mask (visuals[1]->red_mask,
113 &visuals[1]->red_shift,
114 &visuals[1]->red_prec);
115 gdk_visual_decompose_mask (visuals[1]->green_mask,
116 &visuals[1]->green_shift,
117 &visuals[1]->green_prec);
118 gdk_visual_decompose_mask (visuals[1]->blue_mask,
119 &visuals[1]->blue_shift,
120 &visuals[1]->blue_prec);
122 broadway_screen->system_visual = visuals[1];
123 broadway_screen->rgba_visual = visuals[0];
125 broadway_screen->navailable_depths = 2;
126 broadway_screen->available_depths[0] = 32;
127 broadway_screen->available_depths[1] = 24;
129 broadway_screen->navailable_types = 1;
130 broadway_screen->available_types[0] = GDK_VISUAL_TRUE_COLOR;
132 broadway_screen->visuals = visuals;
133 broadway_screen->nvisuals = nvisuals;
137 _gdk_broadway_screen_visual_get_best_depth (GdkScreen * screen)
139 return GDK_BROADWAY_SCREEN (screen)->available_depths[0];
143 _gdk_broadway_screen_visual_get_best_type (GdkScreen * screen)
145 return GDK_BROADWAY_SCREEN (screen)->available_types[0];
149 _gdk_broadway_screen_get_system_visual (GdkScreen * screen)
151 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
153 return ((GdkVisual *) GDK_BROADWAY_SCREEN (screen)->system_visual);
157 _gdk_broadway_screen_visual_get_best (GdkScreen * screen)
159 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
161 return (GdkVisual *)broadway_screen->visuals[0];
165 _gdk_broadway_screen_visual_get_best_with_depth (GdkScreen * screen,
168 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
169 GdkVisual *return_val;
173 for (i = 0; i < broadway_screen->nvisuals; i++)
174 if (depth == broadway_screen->visuals[i]->depth)
176 return_val = (GdkVisual *) broadway_screen->visuals[i];
184 _gdk_broadway_screen_visual_get_best_with_type (GdkScreen * screen,
185 GdkVisualType visual_type)
187 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
188 GdkVisual *return_val;
192 for (i = 0; i < broadway_screen->nvisuals; i++)
193 if (visual_type == broadway_screen->visuals[i]->type)
195 return_val = (GdkVisual *) broadway_screen->visuals[i];
203 _gdk_broadway_screen_visual_get_best_with_both (GdkScreen * screen,
205 GdkVisualType visual_type)
207 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
208 GdkVisual *return_val;
212 for (i = 0; i < broadway_screen->nvisuals; i++)
213 if ((depth == broadway_screen->visuals[i]->depth) &&
214 (visual_type == broadway_screen->visuals[i]->type))
216 return_val = (GdkVisual *) broadway_screen->visuals[i];
224 _gdk_broadway_screen_query_depths (GdkScreen * screen,
228 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
230 *count = broadway_screen->navailable_depths;
231 *depths = broadway_screen->available_depths;
235 _gdk_broadway_screen_query_visual_types (GdkScreen * screen,
236 GdkVisualType **visual_types,
239 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
241 *count = broadway_screen->navailable_types;
242 *visual_types = broadway_screen->available_types;
246 _gdk_broadway_screen_list_visuals (GdkScreen *screen)
249 GdkBroadwayScreen *broadway_screen;
252 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
253 broadway_screen = GDK_BROADWAY_SCREEN (screen);
257 for (i = 0; i < broadway_screen->nvisuals; ++i)
258 list = g_list_append (list, broadway_screen->visuals[i]);
264 gdk_visual_decompose_mask (gulong mask,
273 g_warning ("Mask is 0 in visual. Server bug ?");
277 while (!(mask & 0x1))