Convert a bunch of visual related calls to use the screen vtable, quartz

This commit is contained in:
Matthias Clasen 2010-12-17 10:17:04 -05:00 committed by Kristian Rietveld
parent 41352f24d6
commit d2ce9ec3dc
3 changed files with 91 additions and 55 deletions

View File

@ -157,7 +157,28 @@ void _gdk_quartz_display_add_client_message_filter (GdkDisplay *disp
GdkFilterFunc func,
gpointer data);
GdkVisual * _gdk_quartz_screen_get_rgba_visual (GdkScreen *screen);
GdkVisual * _gdk_quartz_screen_get_rgba_visual (GdkScreen *screen);
GdkVisual * _gdk_quartz_screen_get_system_visual (GdkScreen *screen);
gint _gdk_quartz_screen_visual_get_best_depth (GdkScreen *screen);
GdkVisualType _gdk_quartz_screen_visual_get_best_type (GdkScreen *screen);
GdkVisual * _gdk_quartz_screen_get_system_visual (GdkScreen *screen);
GdkVisual* _gdk_quartz_screen_visual_get_best (GdkScreen *screen);
GdkVisual* _gdk_quartz_screen_visual_get_best_with_depth (GdkScreen *screen,
gint depth);
GdkVisual* _gdk_quartz_screen_visual_get_best_with_type (GdkScreen *screen,
GdkVisualType visual_type);
GdkVisual* _gdk_quartz_screen_visual_get_best_with_both (GdkScreen *screen,
gint depth,
GdkVisualType visual_type);
void _gdk_quartz_screen_query_depths (GdkScreen *screen,
gint **depths,
gint *count);
void _gdk_quartz_screen_query_visual_types (GdkScreen *screen,
GdkVisualType **visual_types,
gint *count);
GList * _gdk_quartz_screen_list_visuals (GdkScreen *screen);
void _gdk_quartz_screen_broadcast_client_message (GdkScreen *screen,
GdkEvent *event);
gboolean _gdk_quartz_screen_get_setting (GdkScreen *screen,

View File

@ -48,7 +48,7 @@
* all monitors in the root window. Once that size is known, we iterate
* over the monitors and translate their Cocoa position to a position
* in the root window of the GdkScreen. This happens below in the
* function gdk_screen_quartz_calculate_layout().
* function gdk_quartz_screen_calculate_layout().
*
* A Cocoa coordinate is always relative to the origin of the monitor
* coordinate space. Such coordinates are mapped to their respective
@ -59,36 +59,36 @@
* but GDK coordinates can *not*!
*/
static void gdk_screen_quartz_dispose (GObject *object);
static void gdk_screen_quartz_finalize (GObject *object);
static void gdk_screen_quartz_calculate_layout (GdkScreenQuartz *screen);
static void gdk_quartz_screen_dispose (GObject *object);
static void gdk_quartz_screen_finalize (GObject *object);
static void gdk_quartz_screen_calculate_layout (GdkScreenQuartz *screen);
static void display_reconfiguration_callback (CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo);
G_DEFINE_TYPE (GdkScreenQuartz, _gdk_screen_quartz, GDK_TYPE_SCREEN);
G_DEFINE_TYPE (GdkScreenQuartz, _gdk_quartz_screen, GDK_TYPE_SCREEN);
static void
_gdk_screen_quartz_init (GdkScreenQuartz *screen_quartz)
_gdk_quartz_screen_init (GdkScreenQuartz *screen_quartz)
{
GdkScreen *screen = GDK_SCREEN (screen_quartz);
GdkScreen *screen = GDK_SCREEN (quartz_screen);
NSScreen *nsscreen;
nsscreen = [[NSScreen screens] objectAtIndex:0];
gdk_screen_set_resolution (screen,
72.0 * [nsscreen userSpaceScaleFactor]);
gdk_screen_quartz_calculate_layout (screen_quartz);
gdk_quartz_screen_calculate_layout (screen_quartz);
CGDisplayRegisterReconfigurationCallback (display_reconfiguration_callback,
screen);
screen_quartz->emit_monitors_changed = FALSE;
quartz_screen->emit_monitors_changed = FALSE;
}
static void
gdk_screen_quartz_dispose (GObject *object)
gdk_quartz_screen_dispose (GObject *object)
{
GdkScreenQuartz *screen = GDK_SCREEN_QUARTZ (object);
@ -101,11 +101,11 @@ gdk_screen_quartz_dispose (GObject *object)
CGDisplayRemoveReconfigurationCallback (display_reconfiguration_callback,
screen);
G_OBJECT_CLASS (_gdk_screen_quartz_parent_class)->dispose (object);
G_OBJECT_CLASS (_gdk_quartz_screen_parent_class)->dispose (object);
}
static void
gdk_screen_quartz_screen_rects_free (GdkScreenQuartz *screen)
gdk_quartz_screen_screen_rects_free (GdkScreenQuartz *screen)
{
screen->n_screens = 0;
@ -117,16 +117,16 @@ gdk_screen_quartz_screen_rects_free (GdkScreenQuartz *screen)
}
static void
gdk_screen_quartz_finalize (GObject *object)
gdk_quartz_screen_finalize (GObject *object)
{
GdkScreenQuartz *screen = GDK_SCREEN_QUARTZ (object);
gdk_screen_quartz_screen_rects_free (screen);
gdk_quartz_screen_screen_rects_free (screen);
}
static void
gdk_screen_quartz_calculate_layout (GdkScreenQuartz *screen)
gdk_quartz_screen_calculate_layout (GdkScreenQuartz *screen)
{
NSArray *array;
int i;
@ -134,7 +134,7 @@ gdk_screen_quartz_calculate_layout (GdkScreenQuartz *screen)
GDK_QUARTZ_ALLOC_POOL;
gdk_screen_quartz_screen_rects_free (screen);
gdk_quartz_screen_screen_rects_free (screen);
array = [NSScreen screens];
@ -192,7 +192,7 @@ process_display_reconfiguration (GdkScreenQuartz *screen)
width = gdk_screen_get_width (GDK_SCREEN (screen));
height = gdk_screen_get_height (GDK_SCREEN (screen));
gdk_screen_quartz_calculate_layout (GDK_SCREEN_QUARTZ (screen));
gdk_quartz_screen_calculate_layout (GDK_SCREEN_QUARTZ (screen));
_gdk_windowing_update_window_sizes (GDK_SCREEN (screen));
@ -255,7 +255,7 @@ display_reconfiguration_callback (CGDirectDisplayID display,
}
GdkScreen *
_gdk_screen_quartz_new (void)
_gdk_quartz_screen_new (void)
{
return g_object_new (GDK_TYPE_SCREEN_QUARTZ, NULL);
}
@ -416,32 +416,42 @@ gdk_quartz_screen_is_composited (GdkScreen *screen)
}
static void
_gdk_screen_quartz_class_init (GdkScreenQuartzClass *klass)
_gdk_quartz_screen_class_init (GdkScreenQuartzClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
object_class->dispose = gdk_screen_quartz_dispose;
object_class->finalize = gdk_screen_quartz_finalize;
object_class->dispose = gdk_quartz_screen_dispose;
object_class->finalize = gdk_quartz_screen_finalize;
screen_class->get_display = gdk_screen_quartz_get_display;
screen_class->get_width = gdk_screen_quartz_get_width;
screen_class->get_height = gdk_screen_quartz_get_height;
screen_class->get_width_mm = gdk_screen_quartz_get_width_mm;
screen_class->get_height_mm = gdk_screen_quartz_get_height_mm;
screen_class->get_number = gdk_screen_quartz_get_number;
screen_class->get_root_window = gdk_screen_quartz_get_root_window;
screen_class->get_n_monitors = gdk_screen_quartz_get_n_monitors;
screen_class->get_primary_monitor = gdk_screen_quartz_get_primary_monitor;
screen_class->get_monitor_width_mm = gdk_screen_quartz_get_monitor_width_mm;
screen_class->get_monitor_height_mm = gdk_screen_quartz_get_monitor_height_mm;
screen_class->get_monitor_plug_name = gdk_screen_quartz_get_monitor_plug_name;
screen_class->get_monitor_geometry = gdk_screen_quartz_get_monitor_geometry;
screen_class->get_rgba_visual = _gdk_screen_quartz_get_rgba_visual;
screen_class->is_composited = gdk_screen_quartz_is_composited;
screen_class->make_display_name = gdk_screen_quartz_make_display_name;
screen_class->get_active_window = gdk_screen_quartz_get_active_window;
screen_class->get_window_stack = gdk_screen_quartz_get_window_stack;
screen_class->broadcast_client_message = _gdk_screen_quartz_broadcast_client_message;
screen_class->get_setting = _gdk_screen_quartz_get_setting;
screen_class->get_display = gdk_quartz_screen_get_display;
screen_class->get_width = gdk_quartz_screen_get_width;
screen_class->get_height = gdk_quartz_screen_get_height;
screen_class->get_width_mm = gdk_quartz_screen_get_width_mm;
screen_class->get_height_mm = gdk_quartz_screen_get_height_mm;
screen_class->get_number = gdk_quartz_screen_get_number;
screen_class->get_root_window = gdk_quartz_screen_get_root_window;
screen_class->get_n_monitors = gdk_quartz_screen_get_n_monitors;
screen_class->get_primary_monitor = gdk_quartz_screen_get_primary_monitor;
screen_class->get_monitor_width_mm = gdk_quartz_screen_get_monitor_width_mm;
screen_class->get_monitor_height_mm = gdk_quartz_screen_get_monitor_height_mm;
screen_class->get_monitor_plug_name = gdk_quartz_screen_get_monitor_plug_name;
screen_class->get_monitor_geometry = gdk_quartz_screen_get_monitor_geometry;
screen_class->is_composited = gdk_quartz_screen_is_composited;
screen_class->make_display_name = gdk_quartz_screen_make_display_name;
screen_class->get_active_window = gdk_quartz_screen_get_active_window;
screen_class->get_window_stack = gdk_quartz_screen_get_window_stack;
screen_class->broadcast_client_message = _gdk_quartz_screen_broadcast_client_message;
screen_class->get_setting = _gdk_quartz_screen_get_setting;
screen_class->get_rgba_visual = _gdk_quartz_screen_get_rgba_visual;
screen_class->get_system_visual = _gdk_quartz_screen_get_system_visual;
screen_class->visual_get_best_depth = _gdk_quartz_screen_visual_get_best_depth;
screen_class->visual_get_best_type = _gdk_quartz_screen_visual_get_best_type;
screen_class->visual_get_best = _gdk_quartz_screen_visual_get_best;
screen_class->visual_get_best_with_depth = _gdk_quartz_screen_visual_get_best_with_depth;
screen_class->visual_get_best_with_type = _gdk_quartz_screen_visual_get_best_with_type;
screen_class->visual_get_best_with_both = _gdk_quartz_screen_visual_get_best_with_both;
screen_class->query_depths = _gdk_quartz_screen_query_depths;
screen_class->query_visual_types = _gdk_quartz_screen_query_visual_types;
screen_class->list_visuals = _gdk_quartz_screen_list_visuals;
}

View File

@ -140,13 +140,13 @@ _gdk_visual_init (void)
/* We prefer the system visual for now ... */
gint
gdk_visual_get_best_depth (void)
_gdk_quartz_screen_visual_get_best_depth (GdkScreen *screen)
{
return system_visual->depth;
}
GdkVisualType
gdk_visual_get_best_type (void)
_gdk_quartz_screen_visual_get_best_type (GdkScreen *screen)
{
return system_visual->type;
}
@ -158,19 +158,20 @@ _gdk_quartz_screen_get_rgba_visual (GdkScreen *screen)
}
GdkVisual*
gdk_screen_get_system_visual (GdkScreen *screen)
_gdk_quartz_screen_get_system_visual (GdkScreen *screen)
{
return system_visual;
}
GdkVisual*
gdk_visual_get_best (void)
_gdk_quartz_screen_visual_get_best (GdkScreen *screen)
{
return system_visual;
}
GdkVisual*
gdk_visual_get_best_with_depth (gint depth)
_gdk_quartz_screen_visual_get_best_with_depth (GdkScreen *screen,
gint depth)
{
GdkVisual *visual = NULL;
@ -196,7 +197,8 @@ gdk_visual_get_best_with_depth (gint depth)
}
GdkVisual*
gdk_visual_get_best_with_type (GdkVisualType visual_type)
_gdk_quartz_screen_visual_get_best_with_type (GdkScreen *screen,
GdkVisualType visual_type)
{
if (system_visual->type == visual_type)
return system_visual;
@ -207,8 +209,9 @@ gdk_visual_get_best_with_type (GdkVisualType visual_type)
}
GdkVisual*
gdk_visual_get_best_with_both (gint depth,
GdkVisualType visual_type)
_gdk_quartz_screen_visual_get_best_with_both (GdkScreen *screen,
gint depth,
GdkVisualType visual_type)
{
if (system_visual->depth == depth
&& system_visual->type == visual_type)
@ -225,23 +228,25 @@ gdk_visual_get_best_with_both (gint depth,
/* For these, we also prefer the system visual */
void
gdk_query_depths (gint **depths,
gint *count)
_gdk_quartz_screen_query_depths (GdkScreen *screen,
gint **depths,
gint *count)
{
*count = 1;
*depths = &system_visual->depth;
}
void
gdk_query_visual_types (GdkVisualType **visual_types,
gint *count)
_gdk_quartz_screen_query_visual_types (GdkScreen *screen,
GdkVisualType **visual_types,
gint *count)
{
*count = 1;
*visual_types = &system_visual->type;
}
GList*
gdk_screen_list_visuals (GdkScreen *screen)
_gdk_quartz_screen_list_visuals (GdkScreen *screen)
{
GList *visuals = NULL;