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, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
29 #include "gdkvisualprivate.h"
31 #include "gdkprivate-broadway.h"
32 #include "gdkscreen-broadway.h"
33 #include "gdkinternals.h"
35 struct _GdkBroadwayVisual
40 struct _GdkBroadwayVisualClass
42 GObjectClass parent_class;
45 static void gdk_visual_decompose_mask (gulong mask,
50 G_DEFINE_TYPE (GdkBroadwayVisual, gdk_broadway_visual, GDK_TYPE_VISUAL)
53 gdk_broadway_visual_finalize (GObject *object)
55 G_OBJECT_CLASS (gdk_broadway_visual_parent_class)->finalize (object);
59 gdk_broadway_visual_class_init (GdkBroadwayVisualClass *visual_class)
61 GObjectClass *object_class = G_OBJECT_CLASS (visual_class);
63 object_class->finalize = gdk_broadway_visual_finalize;
67 gdk_broadway_visual_init (GdkBroadwayVisual *visual)
72 _gdk_broadway_screen_init_visuals (GdkScreen *screen)
74 GdkBroadwayScreen *broadway_screen;
78 g_return_if_fail (GDK_IS_SCREEN (screen));
79 broadway_screen = GDK_BROADWAY_SCREEN (screen);
82 visuals = g_new (GdkVisual *, nvisuals);
84 visuals[0] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
85 visuals[0]->screen = screen;
86 visuals[0]->type = GDK_VISUAL_TRUE_COLOR;
87 visuals[0]->depth = 32;
88 visuals[0]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
89 visuals[0]->red_mask = 0xff0000;
90 visuals[0]->green_mask = 0xff00;
91 visuals[0]->blue_mask = 0xff;
92 visuals[0]->colormap_size = 256;
93 visuals[0]->bits_per_rgb = 8;
94 gdk_visual_decompose_mask (visuals[0]->red_mask,
95 &visuals[0]->red_shift,
96 &visuals[0]->red_prec);
97 gdk_visual_decompose_mask (visuals[0]->green_mask,
98 &visuals[0]->green_shift,
99 &visuals[0]->green_prec);
100 gdk_visual_decompose_mask (visuals[0]->blue_mask,
101 &visuals[0]->blue_shift,
102 &visuals[0]->blue_prec);
104 visuals[1] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
105 visuals[1]->screen = screen;
106 visuals[1]->type = GDK_VISUAL_TRUE_COLOR;
107 visuals[1]->depth = 24;
108 visuals[1]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
109 visuals[1]->red_mask = 0xff0000;
110 visuals[1]->green_mask = 0xff00;
111 visuals[1]->blue_mask = 0xff;
112 visuals[1]->colormap_size = 256;
113 visuals[1]->bits_per_rgb = 8;
114 gdk_visual_decompose_mask (visuals[1]->red_mask,
115 &visuals[1]->red_shift,
116 &visuals[1]->red_prec);
117 gdk_visual_decompose_mask (visuals[1]->green_mask,
118 &visuals[1]->green_shift,
119 &visuals[1]->green_prec);
120 gdk_visual_decompose_mask (visuals[1]->blue_mask,
121 &visuals[1]->blue_shift,
122 &visuals[1]->blue_prec);
124 broadway_screen->system_visual = visuals[1];
125 broadway_screen->rgba_visual = visuals[0];
127 broadway_screen->navailable_depths = 2;
128 broadway_screen->available_depths[0] = 32;
129 broadway_screen->available_depths[1] = 24;
131 broadway_screen->navailable_types = 1;
132 broadway_screen->available_types[0] = GDK_VISUAL_TRUE_COLOR;
134 broadway_screen->visuals = visuals;
135 broadway_screen->nvisuals = nvisuals;
139 _gdk_broadway_screen_visual_get_best_depth (GdkScreen * screen)
141 return GDK_BROADWAY_SCREEN (screen)->available_depths[0];
145 _gdk_broadway_screen_visual_get_best_type (GdkScreen * screen)
147 return GDK_BROADWAY_SCREEN (screen)->available_types[0];
151 _gdk_broadway_screen_get_system_visual (GdkScreen * screen)
153 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
155 return ((GdkVisual *) GDK_BROADWAY_SCREEN (screen)->system_visual);
159 _gdk_broadway_screen_visual_get_best (GdkScreen * screen)
161 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
163 return (GdkVisual *)broadway_screen->visuals[0];
167 _gdk_broadway_screen_visual_get_best_with_depth (GdkScreen * screen,
170 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
171 GdkVisual *return_val;
175 for (i = 0; i < broadway_screen->nvisuals; i++)
176 if (depth == broadway_screen->visuals[i]->depth)
178 return_val = (GdkVisual *) broadway_screen->visuals[i];
186 _gdk_broadway_screen_visual_get_best_with_type (GdkScreen * screen,
187 GdkVisualType visual_type)
189 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
190 GdkVisual *return_val;
194 for (i = 0; i < broadway_screen->nvisuals; i++)
195 if (visual_type == broadway_screen->visuals[i]->type)
197 return_val = (GdkVisual *) broadway_screen->visuals[i];
205 _gdk_broadway_screen_visual_get_best_with_both (GdkScreen * screen,
207 GdkVisualType visual_type)
209 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
210 GdkVisual *return_val;
214 for (i = 0; i < broadway_screen->nvisuals; i++)
215 if ((depth == broadway_screen->visuals[i]->depth) &&
216 (visual_type == broadway_screen->visuals[i]->type))
218 return_val = (GdkVisual *) broadway_screen->visuals[i];
226 _gdk_broadway_screen_query_depths (GdkScreen * screen,
230 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
232 *count = broadway_screen->navailable_depths;
233 *depths = broadway_screen->available_depths;
237 _gdk_broadway_screen_query_visual_types (GdkScreen * screen,
238 GdkVisualType **visual_types,
241 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
243 *count = broadway_screen->navailable_types;
244 *visual_types = broadway_screen->available_types;
248 _gdk_broadway_screen_list_visuals (GdkScreen *screen)
251 GdkBroadwayScreen *broadway_screen;
254 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
255 broadway_screen = GDK_BROADWAY_SCREEN (screen);
259 for (i = 0; i < broadway_screen->nvisuals; ++i)
260 list = g_list_append (list, broadway_screen->visuals[i]);
266 gdk_visual_decompose_mask (gulong mask,
275 g_warning ("Mask is 0 in visual. Server bug ?");
279 while (!(mask & 0x1))