From: Alex Wu Date: Tue, 17 Apr 2012 09:20:47 +0000 (+0800) Subject: compositor: Add a switch_mode hook and a wrapper into the output. X-Git-Tag: 20120702.1049~275 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2dda604093e8744bcf48a125c4605378d1426d88;p=profile%2Fivi%2Fweston.git compositor: Add a switch_mode hook and a wrapper into the output. This allow each output backend to switch the display mode. It is useful to some applications like fullscreen game, xbmc. --- diff --git a/src/compositor-drm.c b/src/compositor-drm.c index d2a2ea1..0121100 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -1166,6 +1166,7 @@ create_output_for_connector(struct drm_compositor *ec, output->base.assign_planes = drm_assign_planes; output->base.read_pixels = drm_output_read_pixels; output->base.set_dpms = drm_set_dpms; + output->base.switch_mode = NULL; return 0; diff --git a/src/compositor-openwfd.c b/src/compositor-openwfd.c index 2dba07d..bbf1067 100644 --- a/src/compositor-openwfd.c +++ b/src/compositor-openwfd.c @@ -409,6 +409,7 @@ create_output_for_port(struct wfd_compositor *ec, output->base.assign_planes = NULL; output->base.set_backlight = NULL; output->base.set_dpms = NULL; + output->base.switch_mode = NULL; wl_list_insert(ec->base.output_list.prev, &output->base.link); diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index c9d599d..93094b0 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -462,6 +462,7 @@ wayland_compositor_create_output(struct wayland_compositor *c, output->base.read_pixels = wayland_output_read_pixels; output->base.set_backlight = NULL; output->base.set_dpms = NULL; + output->base.switch_mode = NULL; wl_list_insert(c->base.output_list.prev, &output->base.link); diff --git a/src/compositor-x11.c b/src/compositor-x11.c index 4361a01..87ab5dd 100644 --- a/src/compositor-x11.c +++ b/src/compositor-x11.c @@ -472,6 +472,7 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y, output->base.read_pixels = x11_output_read_pixels; output->base.set_backlight = NULL; output->base.set_dpms = NULL; + output->base.switch_mode = NULL; wl_list_insert(c->base.output_list.prev, &output->base.link); diff --git a/src/compositor.c b/src/compositor.c index 17daac4..9b7badf 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -79,6 +79,15 @@ sigchld_handler(int signal_number, void *data) return 1; } +WL_EXPORT int +weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode) +{ + if (!output->switch_mode) + return -1; + + return output->switch_mode(output, mode); +} + WL_EXPORT void weston_watch_process(struct weston_process *process) { diff --git a/src/compositor.h b/src/compositor.h index 93284c5..f21f769 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -99,6 +99,7 @@ struct weston_output { void (*destroy)(struct weston_output *output); void (*assign_planes)(struct weston_output *output); void (*read_pixels)(struct weston_output *output, void *data); + int (*switch_mode)(struct weston_output *output, struct weston_mode *mode); /* backlight values are on 0-255 range, where higher is brighter */ uint32_t backlight_current; @@ -563,4 +564,7 @@ weston_surface_destroy(struct weston_surface *surface); struct weston_compositor * backend_init(struct wl_display *display, int argc, char *argv[]); +int +weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode); + #endif