Skip to content

Commit 1f36ea8

Browse files
MortimerGoroaperezdc
authored andcommitted
Add fullscreen API
1 parent 4bdc57a commit 1f36ea8

File tree

3 files changed

+204
-0
lines changed

3 files changed

+204
-0
lines changed

include/wpe/view-backend.h

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
extern "C" {
4646
#endif
4747

48+
#include <stdbool.h>
4849
#include <stdint.h>
4950

5051
struct wpe_view_backend;
@@ -56,6 +57,7 @@ struct wpe_input_touch_event;
5657

5758
struct wpe_view_backend_client;
5859
struct wpe_view_backend_input_client;
60+
struct wpe_view_backend_fullscreen_client;
5961

6062
struct wpe_view_backend_interface {
6163
void* (*create)(void*, struct wpe_view_backend*);
@@ -97,6 +99,53 @@ WPE_EXPORT
9799
void
98100
wpe_view_backend_set_input_client(struct wpe_view_backend*, const struct wpe_view_backend_input_client*, void*);
99101

102+
/**
103+
* wpe_view_backend_set_fullscreen_client:
104+
* @view_backend: (transfer none): The view backend to obtains events from.
105+
* @client: (transfer none): Client with callbacks for the events.
106+
* @userdata: (transfer none): User data passed to client callbacks.
107+
*
108+
* Configure a @client with callbacks invoked for DOM fullscreen requests.
109+
*
110+
* This function must be only used once for a given @view_backend, the client
111+
* cannot be changed once it has been set.
112+
*
113+
* Since: 1.12
114+
*/
115+
WPE_EXPORT
116+
void
117+
wpe_view_backend_set_fullscreen_client(struct wpe_view_backend*, const struct wpe_view_backend_fullscreen_client*, void*);
118+
119+
/**
120+
* wpe_view_backend_fullscreen_handler:
121+
* @userdata: (transfer none): User data passed to the embedder.
122+
* @enable: (transfer none): User data passed to the embedder.
123+
*
124+
* Type of functions used by an embedder to implement fullscreening web views.
125+
*
126+
* Returns: a boolean indicating whether the operation was completed.
127+
*
128+
* Since: 1.12
129+
*/
130+
typedef bool (*wpe_view_backend_fullscreen_handler)(void *userdata, bool enable);
131+
132+
/**
133+
* wpe_view_backend_set_fullscreen_handler:
134+
* @view_backend: (transfer none): The view backend to obtains events from.
135+
* @handler: (transfer none): Function used by an embedder to implement fullscreening web views.
136+
* @userdata: (transfer none): User data passed to the handler function.
137+
*
138+
* Handler function set by an embedder to implement fullscreening web views.
139+
*
140+
* This function must be only used once for a given @view_backend, the handler
141+
* cannot be changed once it has been set.
142+
*
143+
* Since: 1.12
144+
*/
145+
WPE_EXPORT
146+
void
147+
wpe_view_backend_set_fullscreen_handler(struct wpe_view_backend*, wpe_view_backend_fullscreen_handler handler, void* userdata);
148+
100149
WPE_EXPORT
101150
void
102151
wpe_view_backend_initialize(struct wpe_view_backend*);
@@ -179,6 +228,97 @@ WPE_EXPORT
179228
void
180229
wpe_view_backend_dispatch_touch_event(struct wpe_view_backend*, struct wpe_input_touch_event*);
181230

231+
/**
232+
* wpe_view_backend_fullscreen_client:
233+
* @did_enter_fullscreen: Invoked after fullscreen has been successfully entered.
234+
* @did_exit_fullscreen: Invoked after fullscreen has been exited.
235+
* @request_enter_fullscreen: Invoked after user has requested to enter fullscreen.
236+
* @request_exit_fullscreen: Invoked after user has requested to exit fullscreen.
237+
*
238+
* A view backend's fullscreen client provides a series of callback functions
239+
* which are invoked at different stages when a web view becomes fullscreened
240+
* and back.
241+
*
242+
* Since: 1.12
243+
*/
244+
struct wpe_view_backend_fullscreen_client {
245+
void (*did_enter_fullscreen)(void*);
246+
void (*did_exit_fullscreen)(void*);
247+
void (*request_enter_fullscreen)(void*);
248+
void (*request_exit_fullscreen)(void*);
249+
250+
/*< private >*/
251+
void (*_wpe_reserved0)(void);
252+
void (*_wpe_reserved1)(void);
253+
void (*_wpe_reserved2)(void);
254+
void (*_wpe_reserved3)(void);
255+
};
256+
257+
/**
258+
* wpe_view_backend_platform_set_fullscreen:
259+
* @view_backend: (transfer none): The view backend which fullscreen state will be changed.
260+
* @fullscreen: (transfer none): True if fullscreen.
261+
*
262+
* Returns: a boolean indicating whether the operation was completed.
263+
*
264+
* DOM content calls this function to request the platform to enter/exit fullscreen.
265+
* The platform will attempt to change it's window fullscreen state.
266+
*
267+
* Since: 1.12
268+
*/
269+
WPE_EXPORT
270+
bool
271+
wpe_view_backend_platform_set_fullscreen(struct wpe_view_backend*, bool);
272+
273+
/**
274+
* wpe_view_backend_dispatch_did_enter_fullscreen:
275+
* @view_backend: (transfer none): The view backend that triggered the event.
276+
*
277+
* Dispatchs the event that indicates fullscreen has been successfully entered.
278+
*
279+
* Since: 1.12
280+
*/
281+
WPE_EXPORT
282+
void
283+
wpe_view_backend_dispatch_did_enter_fullscreen(struct wpe_view_backend*);
284+
285+
/**
286+
* wpe_view_backend_dispatch_did_exit_fullscreen:
287+
* @view_backend: (transfer none): The view backend that triggered the event.
288+
*
289+
* Dispatchs the event that indicated fullscreen has been successfully entered.
290+
*
291+
* Since: 1.12
292+
*/
293+
WPE_EXPORT
294+
void
295+
wpe_view_backend_dispatch_did_exit_fullscreen(struct wpe_view_backend*);
296+
297+
/**
298+
* wpe_view_backend_dispatch_request_enter_fullscreen:
299+
* @view_backend: (transfer none): The view backend that triggered the event.
300+
*
301+
* Dispatchs the event that indicates user wants to enter DOM fullscreen state.
302+
*
303+
* Since: 1.12
304+
*/
305+
WPE_EXPORT
306+
void
307+
wpe_view_backend_dispatch_request_enter_fullscreen(struct wpe_view_backend*);
308+
309+
/**
310+
* wpe_view_backend_dispatch_request_exit_fullscreen:
311+
* @view_backend: (transfer none): The view backend that triggered the event.
312+
*
313+
* Dispatchs the event that indicates user wants to exit DOM fullscreen state.
314+
*
315+
* Since: 1.12
316+
*/
317+
WPE_EXPORT
318+
void
319+
wpe_view_backend_dispatch_request_exit_fullscreen(struct wpe_view_backend*);
320+
321+
182322
#ifdef __cplusplus
183323
}
184324
#endif

src/view-backend-private.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ struct wpe_view_backend {
4242
const struct wpe_view_backend_input_client* input_client;
4343
void* input_client_data;
4444

45+
const struct wpe_view_backend_fullscreen_client* fullscreen_client;
46+
void* fullscreen_client_data;
47+
48+
wpe_view_backend_fullscreen_handler fullscreen_handler;
49+
void* fullscreen_handler_data;
50+
4551
uint32_t activity_state;
4652
};
4753

src/view-backend.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "view-backend-private.h"
2828

2929
#include "loader-private.h"
30+
#include <assert.h>
3031
#include <stdlib.h>
3132

3233

@@ -65,6 +66,9 @@ wpe_view_backend_destroy(struct wpe_view_backend* backend)
6566
backend->input_client = 0;
6667
backend->input_client_data = 0;
6768

69+
backend->fullscreen_client = NULL;
70+
backend->fullscreen_client_data = NULL;
71+
6872
backend->activity_state = 0;
6973

7074
free(backend);
@@ -93,6 +97,15 @@ wpe_view_backend_set_input_client(struct wpe_view_backend* backend, const struct
9397
backend->input_client_data = client_data;
9498
}
9599

100+
void
101+
wpe_view_backend_set_fullscreen_client(struct wpe_view_backend* backend, const struct wpe_view_backend_fullscreen_client* client, void* client_data)
102+
{
103+
assert(!backend->fullscreen_client);
104+
105+
backend->fullscreen_client = client;
106+
backend->fullscreen_client_data = client_data;
107+
}
108+
96109
void
97110
wpe_view_backend_initialize(struct wpe_view_backend* backend)
98111
{
@@ -187,3 +200,48 @@ wpe_view_backend_dispatch_touch_event(struct wpe_view_backend* backend, struct w
187200
if (backend->input_client)
188201
backend->input_client->handle_touch_event(backend->input_client_data, event);
189202
}
203+
204+
void
205+
wpe_view_backend_set_fullscreen_handler(struct wpe_view_backend* backend, wpe_view_backend_fullscreen_handler handler, void* userdata)
206+
{
207+
assert(!backend->fullscreen_handler);
208+
209+
backend->fullscreen_handler = handler;
210+
backend->fullscreen_handler_data = userdata;
211+
}
212+
213+
bool
214+
wpe_view_backend_platform_set_fullscreen(struct wpe_view_backend* backend, bool fullscreen)
215+
{
216+
if (backend->fullscreen_handler)
217+
return backend->fullscreen_handler(backend->fullscreen_handler_data, fullscreen);
218+
return false;
219+
}
220+
221+
void
222+
wpe_view_backend_dispatch_did_enter_fullscreen(struct wpe_view_backend* backend)
223+
{
224+
if (backend->fullscreen_client)
225+
backend->fullscreen_client->did_enter_fullscreen(backend->fullscreen_client_data);
226+
}
227+
228+
void
229+
wpe_view_backend_dispatch_did_exit_fullscreen(struct wpe_view_backend* backend)
230+
{
231+
if (backend->fullscreen_client)
232+
backend->fullscreen_client->did_exit_fullscreen(backend->fullscreen_client_data);
233+
}
234+
235+
void
236+
wpe_view_backend_dispatch_request_enter_fullscreen(struct wpe_view_backend* backend)
237+
{
238+
if (backend->fullscreen_client)
239+
backend->fullscreen_client->request_enter_fullscreen(backend->fullscreen_client_data);
240+
}
241+
242+
void
243+
wpe_view_backend_dispatch_request_exit_fullscreen(struct wpe_view_backend* backend)
244+
{
245+
if (backend->fullscreen_client)
246+
backend->fullscreen_client->request_exit_fullscreen(backend->fullscreen_client_data);
247+
}

0 commit comments

Comments
 (0)