1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
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.
8 *
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.
13 *
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/>.
16 */
17
18 /*
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/.
23 */
24
25 #include "config.h"
26
27 #include "gdkvisualprivate.h"
28
29 #include "gdkprivate-broadway.h"
30 #include "gdkscreen-broadway.h"
31 #include "gdkinternals.h"
32
33 struct _GdkBroadwayVisual
34 {
35 GdkVisual visual;
36 };
37
38 struct _GdkBroadwayVisualClass
39 {
40 GObjectClass parent_class;
41 };
42
G_DEFINE_TYPE(GdkBroadwayVisual,gdk_broadway_visual,GDK_TYPE_VISUAL)43 G_DEFINE_TYPE (GdkBroadwayVisual, gdk_broadway_visual, GDK_TYPE_VISUAL)
44
45 static void
46 gdk_broadway_visual_finalize (GObject *object)
47 {
48 G_OBJECT_CLASS (gdk_broadway_visual_parent_class)->finalize (object);
49 }
50
51 static void
gdk_broadway_visual_class_init(GdkBroadwayVisualClass * visual_class)52 gdk_broadway_visual_class_init (GdkBroadwayVisualClass *visual_class)
53 {
54 GObjectClass *object_class = G_OBJECT_CLASS (visual_class);
55
56 object_class->finalize = gdk_broadway_visual_finalize;
57 }
58
59 static void
gdk_broadway_visual_init(GdkBroadwayVisual * visual)60 gdk_broadway_visual_init (GdkBroadwayVisual *visual)
61 {
62 }
63
64 void
_gdk_broadway_screen_init_visuals(GdkScreen * screen)65 _gdk_broadway_screen_init_visuals (GdkScreen *screen)
66 {
67 GdkBroadwayScreen *broadway_screen;
68 GdkVisual **visuals;
69 int nvisuals;
70
71 g_return_if_fail (GDK_IS_SCREEN (screen));
72 broadway_screen = GDK_BROADWAY_SCREEN (screen);
73
74 nvisuals = 2;
75 visuals = g_new (GdkVisual *, nvisuals);
76
77 visuals[0] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
78 visuals[0]->screen = screen;
79 visuals[0]->type = GDK_VISUAL_TRUE_COLOR;
80 visuals[0]->depth = 32;
81 visuals[0]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
82 visuals[0]->red_mask = 0xff0000;
83 visuals[0]->green_mask = 0xff00;
84 visuals[0]->blue_mask = 0xff;
85 visuals[0]->colormap_size = 256;
86 visuals[0]->bits_per_rgb = 8;
87
88 visuals[1] = g_object_new (GDK_TYPE_BROADWAY_VISUAL, NULL);
89 visuals[1]->screen = screen;
90 visuals[1]->type = GDK_VISUAL_TRUE_COLOR;
91 visuals[1]->depth = 24;
92 visuals[1]->byte_order = (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? GDK_LSB_FIRST : GDK_MSB_FIRST;
93 visuals[1]->red_mask = 0xff0000;
94 visuals[1]->green_mask = 0xff00;
95 visuals[1]->blue_mask = 0xff;
96 visuals[1]->colormap_size = 256;
97 visuals[1]->bits_per_rgb = 8;
98
99 broadway_screen->system_visual = visuals[1];
100 broadway_screen->rgba_visual = visuals[0];
101
102 broadway_screen->navailable_depths = 2;
103 broadway_screen->available_depths[0] = 32;
104 broadway_screen->available_depths[1] = 24;
105
106 broadway_screen->navailable_types = 1;
107 broadway_screen->available_types[0] = GDK_VISUAL_TRUE_COLOR;
108
109 broadway_screen->visuals = visuals;
110 broadway_screen->nvisuals = nvisuals;
111 }
112
113 gint
_gdk_broadway_screen_visual_get_best_depth(GdkScreen * screen)114 _gdk_broadway_screen_visual_get_best_depth (GdkScreen * screen)
115 {
116 return GDK_BROADWAY_SCREEN (screen)->available_depths[0];
117 }
118
119 GdkVisualType
_gdk_broadway_screen_visual_get_best_type(GdkScreen * screen)120 _gdk_broadway_screen_visual_get_best_type (GdkScreen * screen)
121 {
122 return GDK_BROADWAY_SCREEN (screen)->available_types[0];
123 }
124
125 GdkVisual *
_gdk_broadway_screen_get_system_visual(GdkScreen * screen)126 _gdk_broadway_screen_get_system_visual (GdkScreen * screen)
127 {
128 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
129
130 return ((GdkVisual *) GDK_BROADWAY_SCREEN (screen)->system_visual);
131 }
132
133 GdkVisual*
_gdk_broadway_screen_visual_get_best(GdkScreen * screen)134 _gdk_broadway_screen_visual_get_best (GdkScreen * screen)
135 {
136 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
137
138 return (GdkVisual *)broadway_screen->visuals[0];
139 }
140
141 GdkVisual*
_gdk_broadway_screen_visual_get_best_with_depth(GdkScreen * screen,gint depth)142 _gdk_broadway_screen_visual_get_best_with_depth (GdkScreen * screen,
143 gint depth)
144 {
145 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
146 GdkVisual *return_val;
147 int i;
148
149 return_val = NULL;
150 for (i = 0; i < broadway_screen->nvisuals; i++)
151 if (depth == broadway_screen->visuals[i]->depth)
152 {
153 return_val = (GdkVisual *) broadway_screen->visuals[i];
154 break;
155 }
156
157 return return_val;
158 }
159
160 GdkVisual*
_gdk_broadway_screen_visual_get_best_with_type(GdkScreen * screen,GdkVisualType visual_type)161 _gdk_broadway_screen_visual_get_best_with_type (GdkScreen * screen,
162 GdkVisualType visual_type)
163 {
164 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
165 GdkVisual *return_val;
166 int i;
167
168 return_val = NULL;
169 for (i = 0; i < broadway_screen->nvisuals; i++)
170 if (visual_type == broadway_screen->visuals[i]->type)
171 {
172 return_val = (GdkVisual *) broadway_screen->visuals[i];
173 break;
174 }
175
176 return return_val;
177 }
178
179 GdkVisual*
_gdk_broadway_screen_visual_get_best_with_both(GdkScreen * screen,gint depth,GdkVisualType visual_type)180 _gdk_broadway_screen_visual_get_best_with_both (GdkScreen * screen,
181 gint depth,
182 GdkVisualType visual_type)
183 {
184 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
185 GdkVisual *return_val;
186 int i;
187
188 return_val = NULL;
189 for (i = 0; i < broadway_screen->nvisuals; i++)
190 if ((depth == broadway_screen->visuals[i]->depth) &&
191 (visual_type == broadway_screen->visuals[i]->type))
192 {
193 return_val = (GdkVisual *) broadway_screen->visuals[i];
194 break;
195 }
196
197 return return_val;
198 }
199
200 void
_gdk_broadway_screen_query_depths(GdkScreen * screen,gint ** depths,gint * count)201 _gdk_broadway_screen_query_depths (GdkScreen * screen,
202 gint **depths,
203 gint *count)
204 {
205 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
206
207 *count = broadway_screen->navailable_depths;
208 *depths = broadway_screen->available_depths;
209 }
210
211 void
_gdk_broadway_screen_query_visual_types(GdkScreen * screen,GdkVisualType ** visual_types,gint * count)212 _gdk_broadway_screen_query_visual_types (GdkScreen * screen,
213 GdkVisualType **visual_types,
214 gint *count)
215 {
216 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
217
218 *count = broadway_screen->navailable_types;
219 *visual_types = broadway_screen->available_types;
220 }
221
222 GList *
_gdk_broadway_screen_list_visuals(GdkScreen * screen)223 _gdk_broadway_screen_list_visuals (GdkScreen *screen)
224 {
225 GList *list;
226 GdkBroadwayScreen *broadway_screen;
227 guint i;
228
229 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
230 broadway_screen = GDK_BROADWAY_SCREEN (screen);
231
232 list = NULL;
233
234 for (i = 0; i < broadway_screen->nvisuals; ++i)
235 list = g_list_append (list, broadway_screen->visuals[i]);
236
237 return list;
238 }
239