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