mirror of
https://github.com/brl/mutter.git
synced 2024-11-23 00:20:42 -05:00
wayland: Add foreign surface support to stage
This adds support for optionally a providing a foreign Wayland surface to a ClutterStage before it is first show. Setting a foreign surface prevents Cogl from allocating a surface and shell surface for the stage automatically. v2: add CLUTTER_AVAILABLE_IN_1_16 annotation and API reference docs (review from Emmanuele Bassi) v3: set a boolean to indicate that this stage is using a foreign surface (Rob Bradford) https://bugzilla.gnome.org/show_bug.cgi?id=699578
This commit is contained in:
parent
a5e44d3934
commit
b6d2232150
@ -1597,6 +1597,7 @@ clutter_vertex_new
|
|||||||
clutter_wayland_input_device_get_wl_seat
|
clutter_wayland_input_device_get_wl_seat
|
||||||
clutter_wayland_stage_get_wl_shell_surface
|
clutter_wayland_stage_get_wl_shell_surface
|
||||||
clutter_wayland_stage_get_wl_surface
|
clutter_wayland_stage_get_wl_surface
|
||||||
|
clutter_wayland_stage_set_wl_surface
|
||||||
clutter_wayland_set_display
|
clutter_wayland_set_display
|
||||||
clutter_wayland_disable_event_retrieval
|
clutter_wayland_disable_event_retrieval
|
||||||
#endif
|
#endif
|
||||||
|
@ -290,3 +290,50 @@ clutter_wayland_stage_get_wl_surface (ClutterStage *stage)
|
|||||||
return stage_wayland->wayland_surface;
|
return stage_wayland->wayland_surface;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_wayland_stage_set_wl_surface:
|
||||||
|
* @stage: a #ClutterStage
|
||||||
|
* @surface: A Wayland surface to associate with the @stage.
|
||||||
|
*
|
||||||
|
* Allows you to explicitly provide an existing Wayland surface to associate
|
||||||
|
* with @stage, preventing Cogl from allocating a surface and shell surface for
|
||||||
|
* the stage automatically.
|
||||||
|
*
|
||||||
|
* This function must be called before @stage is shown.
|
||||||
|
*
|
||||||
|
* Note: this function can only be called when running on the Wayland
|
||||||
|
* platform. Calling this function at any other time has no effect.
|
||||||
|
*
|
||||||
|
* Since: 1.16
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clutter_wayland_stage_set_wl_surface (ClutterStage *stage,
|
||||||
|
struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
ClutterStageWindow *stage_window = _clutter_stage_get_window (stage);
|
||||||
|
ClutterStageWayland *stage_wayland;
|
||||||
|
ClutterStageCogl *stage_cogl;
|
||||||
|
|
||||||
|
if (!CLUTTER_IS_STAGE_WAYLAND (stage_window))
|
||||||
|
return;
|
||||||
|
|
||||||
|
stage_cogl = CLUTTER_STAGE_COGL (stage_window);
|
||||||
|
|
||||||
|
if (stage_cogl->onscreen == NULL)
|
||||||
|
{
|
||||||
|
ClutterBackend *backend = clutter_get_default_backend ();
|
||||||
|
|
||||||
|
/* Use the same default dimensions as clutter_stage_cogl_realize() */
|
||||||
|
stage_cogl->onscreen = cogl_onscreen_new (backend->cogl_context,
|
||||||
|
800, 600);
|
||||||
|
|
||||||
|
cogl_wayland_onscreen_set_foreign_surface (stage_cogl->onscreen,
|
||||||
|
surface);
|
||||||
|
|
||||||
|
stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
|
||||||
|
stage_wayland->foreign_wl_surface = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_warning (G_STRLOC ": cannot set foreign surface for stage");
|
||||||
|
}
|
||||||
|
@ -53,6 +53,7 @@ struct _ClutterStageWayland
|
|||||||
struct wl_surface *wayland_surface;
|
struct wl_surface *wayland_surface;
|
||||||
struct wl_shell_surface *wayland_shell_surface;
|
struct wl_shell_surface *wayland_shell_surface;
|
||||||
gboolean fullscreen;
|
gboolean fullscreen;
|
||||||
|
gboolean foreign_wl_surface;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterStageWaylandClass
|
struct _ClutterStageWaylandClass
|
||||||
|
@ -49,6 +49,9 @@ struct wl_shell_surface *clutter_wayland_stage_get_wl_shell_surface (ClutterStag
|
|||||||
CLUTTER_AVAILABLE_IN_1_10
|
CLUTTER_AVAILABLE_IN_1_10
|
||||||
struct wl_surface *clutter_wayland_stage_get_wl_surface (ClutterStage *stage);
|
struct wl_surface *clutter_wayland_stage_get_wl_surface (ClutterStage *stage);
|
||||||
|
|
||||||
|
CLUTTER_AVAILABLE_IN_1_16
|
||||||
|
void clutter_wayland_stage_set_wl_surface (ClutterStage *stage, struct wl_surface *surface);
|
||||||
|
|
||||||
CLUTTER_AVAILABLE_IN_1_16
|
CLUTTER_AVAILABLE_IN_1_16
|
||||||
void clutter_wayland_set_display (struct wl_display *display);
|
void clutter_wayland_set_display (struct wl_display *display);
|
||||||
|
|
||||||
|
@ -1435,6 +1435,7 @@ clutter_glx_texture_pixmap_get_type
|
|||||||
clutter_wayland_input_device_get_wl_seat
|
clutter_wayland_input_device_get_wl_seat
|
||||||
clutter_wayland_stage_get_wl_shell_surface
|
clutter_wayland_stage_get_wl_shell_surface
|
||||||
clutter_wayland_stage_get_wl_surface
|
clutter_wayland_stage_get_wl_surface
|
||||||
|
clutter_wayland_stage_set_wl_surface
|
||||||
clutter_wayland_set_display
|
clutter_wayland_set_display
|
||||||
clutter_wayland_disable_event_retrieval
|
clutter_wayland_disable_event_retrieval
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
Loading…
Reference in New Issue
Block a user