blob: 2ea43bb52c84281c6010c4d77d166a575e3d7657 [file] [log] [blame]
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +09001/*
2 * Copyright (C) 2013 DENSO CORPORATION
3 *
Bryce Harringtonaf637c22015-06-11 12:55:55 -07004 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +090011 *
Bryce Harringtonaf637c22015-06-11 12:55:55 -070012 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial
14 * portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +090024 */
25
26/**
27 * The ivi-layout library supports API set of controlling properties of
28 * surface and layer which groups surfaces. An unique ID whose type is integer
29 * is required to create surface and layer. With the unique ID, surface and
30 * layer are identified to control them. The API set consists of APIs to control
31 * properties of surface and layers about followings,
32 * - visibility.
33 * - opacity.
34 * - clipping (x,y,width,height).
35 * - position and size of it to be displayed.
36 * - orientation per 90 degree.
37 * - add or remove surfaces to a layer.
38 * - order of surfaces/layers in layer/screen to be displayed.
39 * - commit to apply property changes.
40 * - notifications of property change.
41 *
42 * Management of surfaces and layers grouping these surfaces are common
43 * way in In-Vehicle Infotainment system, which integrate several domains
44 * in one system. A layer is allocated to a domain in order to control
45 * application surfaces grouped to the layer all together.
46 *
47 * This API and ABI follow following specifications.
48 * http://projects.genivi.org/wayland-ivi-extension/layer-manager-apis
49 */
50
51#ifndef _IVI_LAYOUT_EXPORT_H_
52#define _IVI_LAYOUT_EXPORT_H_
53
54#ifdef __cplusplus
55extern "C" {
56#endif /* __cplusplus */
57
58#include "stdbool.h"
59#include "compositor.h"
60
61#define IVI_SUCCEEDED (0)
62#define IVI_FAILED (-1)
63
64struct ivi_layout_layer;
65struct ivi_layout_screen;
66struct ivi_layout_surface;
67
68struct ivi_layout_surface_properties
69{
70 wl_fixed_t opacity;
71 int32_t source_x;
72 int32_t source_y;
73 int32_t source_width;
74 int32_t source_height;
75 int32_t start_x;
76 int32_t start_y;
77 int32_t start_width;
78 int32_t start_height;
79 int32_t dest_x;
80 int32_t dest_y;
81 int32_t dest_width;
82 int32_t dest_height;
83 enum wl_output_transform orientation;
84 bool visibility;
85 int32_t transition_type;
86 uint32_t transition_duration;
Ucan, Emre (ADITG/SW1)0bd29b62016-03-31 11:08:52 +000087 uint32_t event_mask;
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +090088};
89
90struct ivi_layout_layer_properties
91{
92 wl_fixed_t opacity;
93 int32_t source_x;
94 int32_t source_y;
95 int32_t source_width;
96 int32_t source_height;
97 int32_t dest_x;
98 int32_t dest_y;
99 int32_t dest_width;
100 int32_t dest_height;
101 enum wl_output_transform orientation;
102 uint32_t visibility;
103 int32_t transition_type;
104 uint32_t transition_duration;
105 double start_alpha;
106 double end_alpha;
107 uint32_t is_fade_in;
Ucan, Emre (ADITG/SW1)0bd29b62016-03-31 11:08:52 +0000108 uint32_t event_mask;
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900109};
110
111enum ivi_layout_notification_mask {
112 IVI_NOTIFICATION_NONE = 0,
113 IVI_NOTIFICATION_OPACITY = (1 << 1),
114 IVI_NOTIFICATION_SOURCE_RECT = (1 << 2),
115 IVI_NOTIFICATION_DEST_RECT = (1 << 3),
116 IVI_NOTIFICATION_DIMENSION = (1 << 4),
117 IVI_NOTIFICATION_POSITION = (1 << 5),
118 IVI_NOTIFICATION_ORIENTATION = (1 << 6),
119 IVI_NOTIFICATION_VISIBILITY = (1 << 7),
120 IVI_NOTIFICATION_PIXELFORMAT = (1 << 8),
121 IVI_NOTIFICATION_ADD = (1 << 9),
122 IVI_NOTIFICATION_REMOVE = (1 << 10),
123 IVI_NOTIFICATION_CONFIGURE = (1 << 11),
124 IVI_NOTIFICATION_ALL = 0xFFFF
125};
126
127enum ivi_layout_transition_type{
128 IVI_LAYOUT_TRANSITION_NONE,
129 IVI_LAYOUT_TRANSITION_VIEW_DEFAULT,
130 IVI_LAYOUT_TRANSITION_VIEW_DEST_RECT_ONLY,
131 IVI_LAYOUT_TRANSITION_VIEW_FADE_ONLY,
132 IVI_LAYOUT_TRANSITION_LAYER_FADE,
133 IVI_LAYOUT_TRANSITION_LAYER_MOVE,
134 IVI_LAYOUT_TRANSITION_LAYER_VIEW_ORDER,
135 IVI_LAYOUT_TRANSITION_VIEW_MOVE_RESIZE,
136 IVI_LAYOUT_TRANSITION_VIEW_RESIZE,
137 IVI_LAYOUT_TRANSITION_VIEW_FADE,
138 IVI_LAYOUT_TRANSITION_MAX,
139};
140
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900141typedef void (*layer_create_notification_func)(
142 struct ivi_layout_layer *ivilayer,
143 void *userdata);
144
145typedef void (*layer_remove_notification_func)(
146 struct ivi_layout_layer *ivilayer,
147 void *userdata);
148
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900149typedef void (*surface_remove_notification_func)(
150 struct ivi_layout_surface *ivisurf,
151 void *userdata);
152
153typedef void (*surface_configure_notification_func)(
154 struct ivi_layout_surface *ivisurf,
155 void *userdata);
156
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000157struct ivi_layout_interface {
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900158
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900159 /**
160 * \brief Commit all changes and execute all enqueued commands since
161 * last commit.
162 *
163 * \return IVI_SUCCEEDED if the method call was successful
164 * \return IVI_FAILED if the method call was failed
165 */
166 int32_t (*commit_changes)(void);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900167
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900168 /**
169 * surface controller interface
170 */
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900171
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900172 /**
Ucan, Emre (ADITG/SW1)970f8312016-04-04 08:05:09 +0000173 * \brief add a listener for notification when ivi_surface is created
174 *
175 * When an ivi_surface is created, a signal is emitted
176 * to the listening controller plugins.
177 * The pointer of the created ivi_surface is sent as the void *data argument
178 * to the wl_listener::notify callback function of the listener.
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900179 */
Ucan, Emre (ADITG/SW1)970f8312016-04-04 08:05:09 +0000180 int32_t (*add_listener_create_surface)(struct wl_listener *listener);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900181
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900182 /**
183 * \brief register/unregister for notification when ivi_surface is removed
184 */
185 int32_t (*add_notification_remove_surface)(
186 surface_remove_notification_func callback,
187 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900188
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900189 void (*remove_notification_remove_surface)(
190 surface_remove_notification_func callback,
191 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900192
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900193 /**
194 * \brief register/unregister for notification when ivi_surface is configured
195 */
196 int32_t (*add_notification_configure_surface)(
197 surface_configure_notification_func callback,
198 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900199
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900200 void (*remove_notification_configure_surface)(
201 surface_configure_notification_func callback,
202 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900203
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900204 /**
205 * \brief Get all ivi_surfaces which are currently registered and managed
206 * by the services
207 *
208 * \return IVI_SUCCEEDED if the method call was successful
209 * \return IVI_FAILED if the method call was failed
210 */
211 int32_t (*get_surfaces)(int32_t *pLength, struct ivi_layout_surface ***ppArray);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900212
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900213 /**
214 * \brief get id of ivi_surface from ivi_layout_surface
215 *
216 * \return id of ivi_surface
217 */
218 uint32_t (*get_id_of_surface)(struct ivi_layout_surface *ivisurf);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900219
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900220 /**
221 * \brief get ivi_layout_surface from id of ivi_surface
222 *
223 * \return (struct ivi_layout_surface *)
224 * if the method call was successful
225 * \return NULL if the method call was failed
226 */
227 struct ivi_layout_surface *
228 (*get_surface_from_id)(uint32_t id_surface);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900229
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900230 /**
231 * \brief get ivi_layout_surface_properties from ivisurf
232 *
233 * \return (struct ivi_layout_surface_properties *)
234 * if the method call was successful
235 * \return NULL if the method call was failed
236 */
237 const struct ivi_layout_surface_properties *
238 (*get_properties_of_surface)(struct ivi_layout_surface *ivisurf);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900239
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900240 /**
241 * \brief Get all Surfaces which are currently registered to a given
242 * layer and are managed by the services
243 *
244 * \return IVI_SUCCEEDED if the method call was successful
245 * \return IVI_FAILED if the method call was failed
246 */
247 int32_t (*get_surfaces_on_layer)(struct ivi_layout_layer *ivilayer,
248 int32_t *pLength,
249 struct ivi_layout_surface ***ppArray);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900250
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900251 /**
252 * \brief Set the visibility of a ivi_surface.
253 *
254 * If a surface is not visible it will not be rendered.
255 *
256 * \return IVI_SUCCEEDED if the method call was successful
257 * \return IVI_FAILED if the method call was failed
258 */
259 int32_t (*surface_set_visibility)(struct ivi_layout_surface *ivisurf,
260 bool newVisibility);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900261
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900262 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900263 * \brief Set the opacity of a surface.
264 *
265 * \return IVI_SUCCEEDED if the method call was successful
266 * \return IVI_FAILED if the method call was failed
267 */
268 int32_t (*surface_set_opacity)(struct ivi_layout_surface *ivisurf,
269 wl_fixed_t opacity);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900270
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900271 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900272 * \brief Set the area of a ivi_surface which should be used for the rendering.
273 *
274 * \return IVI_SUCCEEDED if the method call was successful
275 * \return IVI_FAILED if the method call was failed
276 */
277 int32_t (*surface_set_source_rectangle)(struct ivi_layout_surface *ivisurf,
278 int32_t x, int32_t y,
279 int32_t width, int32_t height);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900280
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900281 /**
282 * \brief Set the destination area of a ivi_surface within a ivi_layer
283 * for rendering.
284 *
285 * The surface will be scaled to this rectangle for rendering.
286 *
287 * \return IVI_SUCCEEDED if the method call was successful
288 * \return IVI_FAILED if the method call was failed
289 */
290 int32_t (*surface_set_destination_rectangle)(struct ivi_layout_surface *ivisurf,
291 int32_t x, int32_t y,
292 int32_t width, int32_t height);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900293
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900294 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900295 * \brief Sets the orientation of a ivi_surface.
296 *
297 * \return IVI_SUCCEEDED if the method call was successful
298 * \return IVI_FAILED if the method call was failed
299 */
300 int32_t (*surface_set_orientation)(struct ivi_layout_surface *ivisurf,
301 enum wl_output_transform orientation);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900302
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900303 /**
Ucan, Emre (ADITG/SW1)706cb5a2016-04-04 08:05:03 +0000304 * \brief add a listener to listen property changes of ivi_surface
305 *
306 * When a property of the ivi_surface is changed, the property_changed
307 * signal is emitted to the listening controller plugins.
308 * The pointer of the ivi_surface is sent as the void *data argument
309 * to the wl_listener::notify callback function of the listener.
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900310 *
311 * \return IVI_SUCCEEDED if the method call was successful
312 * \return IVI_FAILED if the method call was failed
313 */
Ucan, Emre (ADITG/SW1)706cb5a2016-04-04 08:05:03 +0000314 int32_t (*surface_add_listener)(struct ivi_layout_surface *ivisurf,
315 struct wl_listener *listener);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900316
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900317 /**
318 * \brief get weston_surface of ivi_surface
319 */
320 struct weston_surface *
321 (*surface_get_weston_surface)(struct ivi_layout_surface *ivisurf);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900322
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900323 /**
324 * \brief set type of transition animation
325 */
326 int32_t (*surface_set_transition)(struct ivi_layout_surface *ivisurf,
327 enum ivi_layout_transition_type type,
328 uint32_t duration);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900329
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900330 /**
331 * \brief set duration of transition animation
332 */
333 int32_t (*surface_set_transition_duration)(
334 struct ivi_layout_surface *ivisurf,
335 uint32_t duration);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900336
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900337 /**
338 * layer controller interface
339 */
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900340
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900341 /**
342 * \brief register/unregister for notification when ivi_layer is created
343 */
344 int32_t (*add_notification_create_layer)(
345 layer_create_notification_func callback,
346 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900347
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900348 void (*remove_notification_create_layer)(
349 layer_create_notification_func callback,
350 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900351
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900352 /**
353 * \brief register/unregister for notification when ivi_layer is removed
354 */
355 int32_t (*add_notification_remove_layer)(
356 layer_remove_notification_func callback,
357 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900358
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900359 void (*remove_notification_remove_layer)(
360 layer_remove_notification_func callback,
361 void *userdata);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900362
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900363 /**
364 * \brief Create a ivi_layer which should be managed by the service
365 *
366 * \return (struct ivi_layout_layer *)
367 * if the method call was successful
368 * \return NULL if the method call was failed
369 */
370 struct ivi_layout_layer *
371 (*layer_create_with_dimension)(uint32_t id_layer,
372 int32_t width, int32_t height);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900373
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900374 /**
375 * \brief Removes a ivi_layer which is currently managed by the service
376 */
Nobuhiko Tanibata3aa8aed2015-06-22 15:32:23 +0900377 void (*layer_destroy)(struct ivi_layout_layer *ivilayer);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900378
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900379 /**
380 * \brief Get all ivi_layers which are currently registered and managed
381 * by the services
382 *
383 * \return IVI_SUCCEEDED if the method call was successful
384 * \return IVI_FAILED if the method call was failed
385 */
386 int32_t (*get_layers)(int32_t *pLength, struct ivi_layout_layer ***ppArray);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900387
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900388 /**
389 * \brief get id of ivi_layer from ivi_layout_layer
390 *
391 *
392 * \return id of ivi_layer
393 */
394 uint32_t (*get_id_of_layer)(struct ivi_layout_layer *ivilayer);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900395
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900396 /**
397 * \brief get ivi_layout_layer from id of layer
398 *
399 * \return (struct ivi_layout_layer *)
400 * if the method call was successful
401 * \return NULL if the method call was failed
402 */
403 struct ivi_layout_layer * (*get_layer_from_id)(uint32_t id_layer);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900404
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900405 /**
406 * \brief Get the ivi_layer properties
407 *
408 * \return (const struct ivi_layout_layer_properties *)
409 * if the method call was successful
410 * \return NULL if the method call was failed
411 */
412 const struct ivi_layout_layer_properties *
413 (*get_properties_of_layer)(struct ivi_layout_layer *ivilayer);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900414
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900415 /**
416 * \brief Get all ivi_ayers under the given ivi_surface
417 *
418 * \return IVI_SUCCEEDED if the method call was successful
419 * \return IVI_FAILED if the method call was failed
420 */
421 int32_t (*get_layers_under_surface)(struct ivi_layout_surface *ivisurf,
422 int32_t *pLength,
423 struct ivi_layout_layer ***ppArray);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900424
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900425 /**
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000426 * \brief Get all Layers of the given weston_output
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900427 *
428 * \return IVI_SUCCEEDED if the method call was successful
429 * \return IVI_FAILED if the method call was failed
430 */
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000431 int32_t (*get_layers_on_screen)(struct weston_output *output,
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900432 int32_t *pLength,
433 struct ivi_layout_layer ***ppArray);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900434
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900435 /**
436 * \brief Set the visibility of a ivi_layer. If a ivi_layer is not visible,
437 * the ivi_layer and its ivi_surfaces will not be rendered.
438 *
439 * \return IVI_SUCCEEDED if the method call was successful
440 * \return IVI_FAILED if the method call was failed
441 */
442 int32_t (*layer_set_visibility)(struct ivi_layout_layer *ivilayer,
443 bool newVisibility);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900444
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900445 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900446 * \brief Set the opacity of a ivi_layer.
447 *
448 * \return IVI_SUCCEEDED if the method call was successful
449 * \return IVI_FAILED if the method call was failed
450 */
451 int32_t (*layer_set_opacity)(struct ivi_layout_layer *ivilayer,
452 wl_fixed_t opacity);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900453
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900454 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900455 * \brief Set the area of a ivi_layer which should be used for the rendering.
456 *
457 * Only this part will be visible.
458 *
459 * \return IVI_SUCCEEDED if the method call was successful
460 * \return IVI_FAILED if the method call was failed
461 */
462 int32_t (*layer_set_source_rectangle)(struct ivi_layout_layer *ivilayer,
463 int32_t x, int32_t y,
464 int32_t width, int32_t height);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900465
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900466 /**
467 * \brief Set the destination area on the display for a ivi_layer.
468 *
469 * The ivi_layer will be scaled and positioned to this rectangle
470 * for rendering
471 *
472 * \return IVI_SUCCEEDED if the method call was successful
473 * \return IVI_FAILED if the method call was failed
474 */
475 int32_t (*layer_set_destination_rectangle)(struct ivi_layout_layer *ivilayer,
476 int32_t x, int32_t y,
477 int32_t width, int32_t height);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900478
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900479 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900480 * \brief Sets the orientation of a ivi_layer.
481 *
482 * \return IVI_SUCCEEDED if the method call was successful
483 * \return IVI_FAILED if the method call was failed
484 */
485 int32_t (*layer_set_orientation)(struct ivi_layout_layer *ivilayer,
486 enum wl_output_transform orientation);
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900487
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900488 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900489 * \brief Add a ivi_surface to a ivi_layer which is currently managed by the service
490 *
491 * \return IVI_SUCCEEDED if the method call was successful
492 * \return IVI_FAILED if the method call was failed
493 */
494 int32_t (*layer_add_surface)(struct ivi_layout_layer *ivilayer,
495 struct ivi_layout_surface *addsurf);
496
497 /**
498 * \brief Removes a surface from a layer which is currently managed by the service
499 */
500 void (*layer_remove_surface)(struct ivi_layout_layer *ivilayer,
501 struct ivi_layout_surface *remsurf);
502
503 /**
504 * \brief Sets render order of ivi_surfaces within a ivi_layer
505 *
506 * \return IVI_SUCCEEDED if the method call was successful
507 * \return IVI_FAILED if the method call was failed
508 */
509 int32_t (*layer_set_render_order)(struct ivi_layout_layer *ivilayer,
510 struct ivi_layout_surface **pSurface,
511 int32_t number);
512
513 /**
Ucan, Emre (ADITG/SW1)3750d1b2016-04-04 08:05:05 +0000514 * \brief add a listener to listen property changes of ivi_layer
515 *
516 * When a property of the ivi_layer is changed, the property_changed
517 * signal is emitted to the listening controller plugins.
518 * The pointer of the ivi_layer is sent as the void *data argument
519 * to the wl_listener::notify callback function of the listener.
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900520 *
521 * \return IVI_SUCCEEDED if the method call was successful
522 * \return IVI_FAILED if the method call was failed
523 */
Ucan, Emre (ADITG/SW1)3750d1b2016-04-04 08:05:05 +0000524 int32_t (*layer_add_listener)(struct ivi_layout_layer *ivilayer,
525 struct wl_listener *listener);
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900526
527 /**
528 * \brief set type of transition animation
529 */
530 int32_t (*layer_set_transition)(struct ivi_layout_layer *ivilayer,
531 enum ivi_layout_transition_type type,
532 uint32_t duration);
533
534 /**
535 * screen controller interface
536 */
537
538 /**
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000539 * \brief Get the weston_outputs under the given ivi_layer
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900540 *
541 * \return IVI_SUCCEEDED if the method call was successful
542 * \return IVI_FAILED if the method call was failed
543 */
544 int32_t (*get_screens_under_layer)(struct ivi_layout_layer *ivilayer,
545 int32_t *pLength,
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000546 struct weston_output ***ppArray);
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900547
548 /**
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000549 * \brief Add a ivi_layer to a weston_output which is currently managed
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900550 * by the service
551 *
552 * \return IVI_SUCCEEDED if the method call was successful
553 * \return IVI_FAILED if the method call was failed
554 */
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000555 int32_t (*screen_add_layer)(struct weston_output *output,
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900556 struct ivi_layout_layer *addlayer);
557
558 /**
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000559 * \brief Sets render order of ivi_layers on a weston_output
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900560 *
561 * \return IVI_SUCCEEDED if the method call was successful
562 * \return IVI_FAILED if the method call was failed
563 */
Ucan, Emre (ADITG/SW1)273874e2016-03-17 15:30:42 +0000564 int32_t (*screen_set_render_order)(struct weston_output *output,
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900565 struct ivi_layout_layer **pLayer,
566 const int32_t number);
567
568 /**
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900569 * transision animation for layer
570 */
571 void (*transition_move_layer_cancel)(struct ivi_layout_layer *layer);
572 int32_t (*layer_set_fade_info)(struct ivi_layout_layer* ivilayer,
573 uint32_t is_fade_in,
574 double start_alpha, double end_alpha);
575
Nobuhiko Tanibatac3fd6242015-04-21 02:13:15 +0900576 /**
577 * surface content dumping for debugging
578 */
579 int32_t (*surface_get_size)(struct ivi_layout_surface *ivisurf,
580 int32_t *width, int32_t *height,
581 int32_t *stride);
582
583 int32_t (*surface_dump)(struct weston_surface *surface,
584 void *target, size_t size,
585 int32_t x, int32_t y,
586 int32_t width, int32_t height);
Nobuhiko Tanibataee8e5832014-12-15 13:25:39 +0900587};
Nobuhiko Tanibata6f9df652014-11-27 13:22:00 +0900588
589#ifdef __cplusplus
590}
591#endif /* __cplusplus */
592
593#endif /* _IVI_LAYOUT_EXPORT_H_ */