ivi-shell: add IVI layout APIs

- ivi-layout.so
- introduces ivi-layout-export.h, ivi-layout.[ch]

API set of controlling properties of surface and layer which groups
surfaces. An unique ID whose type is integer is required to create
surface and layer. With the unique ID, surface and layer are identified
to control them. The API set consists of APIs to control properties of
surface and layers about followings,

- visibility.
- opacity.
- clipping (x,y,width,height).
- position and size of it to be displayed.
- orientation per 90 degree.
- add or remove surfaces to a layer.
- order of surfaces/layers in layer/screen to be displayed.
- commit to apply property changes.
- notifications of property change.

Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
dev
Nobuhiko Tanibata 10 years ago committed by Pekka Paalanen
parent bff1b4a596
commit 6f9df656e0
  1. 18
      Makefile.am
  2. 9
      configure.ac
  3. 683
      ivi-shell/ivi-layout-export.h
  4. 319
      ivi-shell/ivi-layout-private.h
  5. 1111
      ivi-shell/ivi-layout-transition.c
  6. 2780
      ivi-shell/ivi-layout.c

@ -722,6 +722,24 @@ nodist_fullscreen_shell_la_SOURCES = \
BUILT_SOURCES += $(nodist_fullscreen_shell_la_SOURCES)
endif
if ENABLE_IVI_SHELL
module_LTLIBRARIES += \
$(ivi_layout)
ivi_layout = ivi-layout.la
ivi_layout_la_LDFLAGS = -module -avoid-version
ivi_layout_la_LIBADD = $(COMPOSITOR_LIBS) libshared.la
ivi_layout_la_CFLAGS = $(GCC_CFLAGS) $(COMPOSITOR_CFLAGS)
ivi_layout_la_SOURCES = \
ivi-shell/ivi-layout-export.h \
ivi-shell/ivi-layout-private.h \
ivi-shell/ivi-layout.c \
ivi-shell/ivi-layout-transition.c
endif
if ENABLE_SCREEN_SHARING
module_LTLIBRARIES += screen-share.la

@ -429,6 +429,13 @@ if test "x$enable_dbus" != "xno"; then
fi
AM_CONDITIONAL(ENABLE_DBUS, test "x$enable_dbus" = "xyes")
# ivi-shell support
AC_ARG_ENABLE(ivi-shell,
AS_HELP_STRING([--disable-ivi-shell],
[do not build ivi-shell server plugin and client]),,
enable_ivi_shell=yes)
AM_CONDITIONAL(ENABLE_IVI_SHELL, test "x$enable_ivi_shell" = "xyes")
AC_ARG_ENABLE(wcap-tools, [ --disable-wcap-tools],, enable_wcap_tools=yes)
AM_CONDITIONAL(BUILD_WCAP_TOOLS, test x$enable_wcap_tools = xyes)
if test x$enable_wcap_tools = xyes; then
@ -518,6 +525,8 @@ AC_MSG_RESULT([
XWayland ${enable_xwayland}
dbus ${enable_dbus}
ivi-shell ${enable_ivi_shell}
Build wcap utility ${enable_wcap_tools}
Build Fullscreen Shell ${enable_fullscreen_shell}

@ -0,0 +1,683 @@
/*
* Copyright (C) 2013 DENSO CORPORATION
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the copyright holders not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission. The copyright holders make
* no representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/**
* The ivi-layout library supports API set of controlling properties of
* surface and layer which groups surfaces. An unique ID whose type is integer
* is required to create surface and layer. With the unique ID, surface and
* layer are identified to control them. The API set consists of APIs to control
* properties of surface and layers about followings,
* - visibility.
* - opacity.
* - clipping (x,y,width,height).
* - position and size of it to be displayed.
* - orientation per 90 degree.
* - add or remove surfaces to a layer.
* - order of surfaces/layers in layer/screen to be displayed.
* - commit to apply property changes.
* - notifications of property change.
*
* Management of surfaces and layers grouping these surfaces are common
* way in In-Vehicle Infotainment system, which integrate several domains
* in one system. A layer is allocated to a domain in order to control
* application surfaces grouped to the layer all together.
*
* This API and ABI follow following specifications.
* http://projects.genivi.org/wayland-ivi-extension/layer-manager-apis
*/
#ifndef _IVI_LAYOUT_EXPORT_H_
#define _IVI_LAYOUT_EXPORT_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "stdbool.h"
#include "compositor.h"
#define IVI_SUCCEEDED (0)
#define IVI_FAILED (-1)
struct ivi_layout_layer;
struct ivi_layout_screen;
struct ivi_layout_surface;
struct ivi_layout_surface_properties
{
wl_fixed_t opacity;
int32_t source_x;
int32_t source_y;
int32_t source_width;
int32_t source_height;
int32_t start_x;
int32_t start_y;
int32_t start_width;
int32_t start_height;
int32_t dest_x;
int32_t dest_y;
int32_t dest_width;
int32_t dest_height;
enum wl_output_transform orientation;
bool visibility;
int32_t transition_type;
uint32_t transition_duration;
};
struct ivi_layout_layer_properties
{
wl_fixed_t opacity;
int32_t source_x;
int32_t source_y;
int32_t source_width;
int32_t source_height;
int32_t dest_x;
int32_t dest_y;
int32_t dest_width;
int32_t dest_height;
enum wl_output_transform orientation;
uint32_t visibility;
int32_t transition_type;
uint32_t transition_duration;
double start_alpha;
double end_alpha;
uint32_t is_fade_in;
};
enum ivi_layout_notification_mask {
IVI_NOTIFICATION_NONE = 0,
IVI_NOTIFICATION_OPACITY = (1 << 1),
IVI_NOTIFICATION_SOURCE_RECT = (1 << 2),
IVI_NOTIFICATION_DEST_RECT = (1 << 3),
IVI_NOTIFICATION_DIMENSION = (1 << 4),
IVI_NOTIFICATION_POSITION = (1 << 5),
IVI_NOTIFICATION_ORIENTATION = (1 << 6),
IVI_NOTIFICATION_VISIBILITY = (1 << 7),
IVI_NOTIFICATION_PIXELFORMAT = (1 << 8),
IVI_NOTIFICATION_ADD = (1 << 9),
IVI_NOTIFICATION_REMOVE = (1 << 10),
IVI_NOTIFICATION_CONFIGURE = (1 << 11),
IVI_NOTIFICATION_ALL = 0xFFFF
};
enum ivi_layout_transition_type{
IVI_LAYOUT_TRANSITION_NONE,
IVI_LAYOUT_TRANSITION_VIEW_DEFAULT,
IVI_LAYOUT_TRANSITION_VIEW_DEST_RECT_ONLY,
IVI_LAYOUT_TRANSITION_VIEW_FADE_ONLY,
IVI_LAYOUT_TRANSITION_LAYER_FADE,
IVI_LAYOUT_TRANSITION_LAYER_MOVE,
IVI_LAYOUT_TRANSITION_LAYER_VIEW_ORDER,
IVI_LAYOUT_TRANSITION_VIEW_MOVE_RESIZE,
IVI_LAYOUT_TRANSITION_VIEW_RESIZE,
IVI_LAYOUT_TRANSITION_VIEW_FADE,
IVI_LAYOUT_TRANSITION_MAX,
};
typedef void (*layer_property_notification_func)(
struct ivi_layout_layer *ivilayer,
const struct ivi_layout_layer_properties *,
enum ivi_layout_notification_mask mask,
void *userdata);
typedef void (*surface_property_notification_func)(
struct ivi_layout_surface *ivisurf,
const struct ivi_layout_surface_properties *,
enum ivi_layout_notification_mask mask,
void *userdata);
typedef void (*layer_create_notification_func)(
struct ivi_layout_layer *ivilayer,
void *userdata);
typedef void (*layer_remove_notification_func)(
struct ivi_layout_layer *ivilayer,
void *userdata);
typedef void (*surface_create_notification_func)(
struct ivi_layout_surface *ivisurf,
void *userdata);
typedef void (*surface_remove_notification_func)(
struct ivi_layout_surface *ivisurf,
void *userdata);
typedef void (*surface_configure_notification_func)(
struct ivi_layout_surface *ivisurf,
void *userdata);
typedef void (*ivi_controller_surface_content_callback)(
struct ivi_layout_surface *ivisurf,
int32_t content,
void *userdata);
/**
* \brief register for notification when layer is created
*/
int32_t
ivi_layout_add_notification_create_layer(
layer_create_notification_func callback,
void *userdata);
void
ivi_layout_remove_notification_create_layer(
layer_create_notification_func callback,
void *userdata);
/**
* \brief register for notification when layer is removed
*/
int32_t
ivi_layout_add_notification_remove_layer(
layer_remove_notification_func callback,
void *userdata);
void
ivi_layout_remove_notification_remove_layer(
layer_remove_notification_func callback,
void *userdata);
/**
* \brief register for notification when surface is created
*/
int32_t
ivi_layout_add_notification_create_surface(
surface_create_notification_func callback,
void *userdata);
void
ivi_layout_remove_notification_create_surface(
surface_create_notification_func callback,
void *userdata);
/**
* \brief register for notification when surface is removed
*/
int32_t
ivi_layout_add_notification_remove_surface(
surface_remove_notification_func callback,
void *userdata);
void
ivi_layout_remove_notification_remove_surface(
surface_remove_notification_func callback,
void *userdata);
/**
* \brief register for notification when surface is configured
*/
int32_t
ivi_layout_add_notification_configure_surface(
surface_configure_notification_func callback,
void *userdata);
void
ivi_layout_remove_notification_configure_surface(
surface_configure_notification_func callback,
void *userdata);
/**
* \brief get id of surface from ivi_layout_surface
*
* \return id of surface
*/
uint32_t
ivi_layout_get_id_of_surface(struct ivi_layout_surface *ivisurf);
/**
* \brief get id of layer from ivi_layout_layer
*
*
* \return id of layer
*/
uint32_t
ivi_layout_get_id_of_layer(struct ivi_layout_layer *ivilayer);
/**
* \brief get ivi_layout_surface from id of surface
*
* \return (struct ivi_layout_surface *)
* if the method call was successful
* \return NULL if the method call was failed
*/
struct ivi_layout_surface *
ivi_layout_get_surface_from_id(uint32_t id_surface);
/**
* \brief get ivi_layout_screen from id of screen
*
* \return (struct ivi_layout_screen *)
* if the method call was successful
* \return NULL if the method call was failed
*/
struct ivi_layout_screen *
ivi_layout_get_screen_from_id(uint32_t id_screen);
/**
* \brief Get the screen resolution of a specific screen
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_screen_resolution(struct ivi_layout_screen *iviscrn,
int32_t *pWidth,
int32_t *pHeight);
/**
* \brief Set an observer callback for surface content status change.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_content_observer(
struct ivi_layout_surface *ivisurf,
ivi_controller_surface_content_callback callback,
void* userdata);
/**
* \brief Get the layer properties
*
* \return (const struct ivi_layout_layer_properties *)
* if the method call was successful
* \return NULL if the method call was failed
*/
const struct ivi_layout_layer_properties *
ivi_layout_get_properties_of_layer(struct ivi_layout_layer *ivilayer);
/**
* \brief Get the screens
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_screens(int32_t *pLength, struct ivi_layout_screen ***ppArray);
/**
* \brief Get the screens under the given layer
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_screens_under_layer(struct ivi_layout_layer *ivilayer,
int32_t *pLength,
struct ivi_layout_screen ***ppArray);
/**
* \brief Get all Layers which are currently registered and managed
* by the services
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_layers(int32_t *pLength, struct ivi_layout_layer ***ppArray);
/**
* \brief Get all Layers under the given surface
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_layers_under_surface(struct ivi_layout_surface *ivisurf,
int32_t *pLength,
struct ivi_layout_layer ***ppArray);
/**
* \brief Get all Surfaces which are currently registered and managed
* by the services
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_surfaces(int32_t *pLength, struct ivi_layout_surface ***ppArray);
/**
* \brief Create a layer which should be managed by the service
*
* \return (struct ivi_layout_layer *)
* if the method call was successful
* \return NULL if the method call was failed
*/
struct ivi_layout_layer *
ivi_layout_layer_create_with_dimension(uint32_t id_layer,
int32_t width, int32_t height);
/**
* \brief Removes a layer which is currently managed by the service
*/
void
ivi_layout_layer_remove(struct ivi_layout_layer *ivilayer);
/**
* \brief Set the visibility of a layer. If a layer is not visible, the
* layer and its surfaces will not be rendered.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_visibility(struct ivi_layout_layer *ivilayer,
bool newVisibility);
/**
* \brief Set the opacity of a layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_opacity(struct ivi_layout_layer *ivilayer,
wl_fixed_t opacity);
/**
* \brief Get the opacity of a layer.
*
* \return opacity if the method call was successful
* \return wl_fixed_from_double(0.0) if the method call was failed
*/
wl_fixed_t
ivi_layout_layer_get_opacity(struct ivi_layout_layer *ivilayer);
/**
* \brief Set the area of a layer which should be used for the rendering.
*
* Only this part will be visible.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_source_rectangle(struct ivi_layout_layer *ivilayer,
int32_t x, int32_t y,
int32_t width, int32_t height);
/**
* \brief Set the destination area on the display for a layer.
*
* The layer will be scaled and positioned to this rectangle
* for rendering
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_destination_rectangle(struct ivi_layout_layer *ivilayer,
int32_t x, int32_t y,
int32_t width, int32_t height);
/**
* \brief Get the horizontal and vertical position of the layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_get_position(struct ivi_layout_layer *ivilayer,
int32_t *dest_x, int32_t *dest_y);
/**
* \brief Sets the horizontal and vertical position of the layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_position(struct ivi_layout_layer *ivilayer,
int32_t dest_x, int32_t dest_y);
/**
* \brief Sets the orientation of a layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_orientation(struct ivi_layout_layer *ivilayer,
enum wl_output_transform orientation);
/**
* \brief Sets render order of surfaces within one layer
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_render_order(struct ivi_layout_layer *ivilayer,
struct ivi_layout_surface **pSurface,
int32_t number);
/**
* \brief Set the visibility of a surface.
*
* If a surface is not visible it will not be rendered.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_visibility(struct ivi_layout_surface *ivisurf,
bool newVisibility);
/**
* \brief Get the visibility of a surface.
*
* If a surface is not visible it will not be rendered.
*
* \return true if surface is visible
* \return false if surface is invisible or the method call was failed
*/
bool
ivi_layout_surface_get_visibility(struct ivi_layout_surface *ivisurf);
/**
* \brief Set the opacity of a surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_opacity(struct ivi_layout_surface *ivisurf,
wl_fixed_t opacity);
/**
* \brief Get the opacity of a surface.
*
* \return opacity if the method call was successful
* \return wl_fixed_from_double(0.0) if the method call was failed
*/
wl_fixed_t
ivi_layout_surface_get_opacity(struct ivi_layout_surface *ivisurf);
/**
* \brief Set the destination area of a surface within a layer for rendering.
*
* The surface will be scaled to this rectangle for rendering.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_destination_rectangle(struct ivi_layout_surface *ivisurf,
int32_t x, int32_t y,
int32_t width, int32_t height);
/**
* \brief Sets the orientation of a surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_orientation(struct ivi_layout_surface *ivisurf,
enum wl_output_transform orientation);
/**
* \brief Add a layer to a screen which is currently managed by the service
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_screen_add_layer(struct ivi_layout_screen *iviscrn,
struct ivi_layout_layer *addlayer);
/**
* \brief Sets render order of layers on a display
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_screen_set_render_order(struct ivi_layout_screen *iviscrn,
struct ivi_layout_layer **pLayer,
const int32_t number);
/**
* \brief register for notification on property changes of layer
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_add_notification(struct ivi_layout_layer *ivilayer,
layer_property_notification_func callback,
void *userdata);
/**
* \brief remove notification on property changes of layer
*/
void
ivi_layout_layer_remove_notification(struct ivi_layout_layer *ivilayer);
/**
* \brief register for notification on property changes of surface
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_add_notification(struct ivi_layout_surface *ivisurf,
surface_property_notification_func callback,
void *userdata);
/**
* \brief remove notification on property changes of surface
*/
void
ivi_layout_surface_remove_notification(struct ivi_layout_surface *ivisurf);
/**
* \brief Get the surface properties
*
* \return (const struct ivi_surface_layer_properties *)
* if the method call was successful
* \return NULL if the method call was failed
*/
const struct ivi_layout_surface_properties *
ivi_layout_get_properties_of_surface(struct ivi_layout_surface *ivisurf);
/**
* \brief Add a surface to a layer which is currently managed by the service
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_add_surface(struct ivi_layout_layer *ivilayer,
struct ivi_layout_surface *addsurf);
/**
* \brief Removes a surface from a layer which is currently managed by the service
*/
void
ivi_layout_layer_remove_surface(struct ivi_layout_layer *ivilayer,
struct ivi_layout_surface *remsurf);
/**
* \brief Set the area of a surface which should be used for the rendering.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_source_rectangle(struct ivi_layout_surface *ivisurf,
int32_t x, int32_t y,
int32_t width, int32_t height);
/**
* \brief get weston_output from ivi_layout_screen.
*
* \return (struct weston_output *)
* if the method call was successful
* \return NULL if the method call was failed
*/
struct weston_output *
ivi_layout_screen_get_output(struct ivi_layout_screen *);
struct weston_surface *
ivi_layout_surface_get_weston_surface(struct ivi_layout_surface *ivisurf);
int32_t
ivi_layout_layer_set_transition(struct ivi_layout_layer *ivilayer,
enum ivi_layout_transition_type type,
uint32_t duration);
int32_t
ivi_layout_layer_set_fade_info(struct ivi_layout_layer* layer,
uint32_t is_fade_in,
double start_alpha, double end_alpha);
int32_t
ivi_layout_surface_set_transition(struct ivi_layout_surface *ivisurf,
enum ivi_layout_transition_type type,
uint32_t duration);
void
ivi_layout_transition_layer_render_order(struct ivi_layout_layer* layer,
struct ivi_layout_surface** new_order,
uint32_t surface_num,
uint32_t duration);
void
ivi_layout_transition_move_layer_cancel(struct ivi_layout_layer* layer);
/**
* \brief Commit all changes and execute all enqueued commands since
* last commit.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_commit_changes(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _IVI_LAYOUT_EXPORT_H_ */

@ -0,0 +1,319 @@
/*
* Copyright (C) 2014 DENSO CORPORATION
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the copyright holders not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission. The copyright holders make
* no representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _ivi_layout_PRIVATE_H_
#define _ivi_layout_PRIVATE_H_
#include "compositor.h"
#include "ivi-layout-export.h"
struct ivi_layout_surface {
struct wl_list link;
struct wl_signal property_changed;
struct wl_list layer_list;
int32_t update_count;
uint32_t id_surface;
struct ivi_layout *layout;
struct weston_surface *surface;
struct wl_listener surface_destroy_listener;
struct weston_transform surface_rotation;
struct weston_transform layer_rotation;
struct weston_transform surface_pos;
struct weston_transform layer_pos;
struct weston_transform scaling;
struct ivi_layout_surface_properties prop;
uint32_t event_mask;
struct {
struct ivi_layout_surface_properties prop;
struct wl_list link;
} pending;
struct {
struct wl_list link;
struct wl_list layer_list;
} order;
struct {
ivi_controller_surface_content_callback callback;
void *userdata;
} content_observer;
struct wl_signal configured;
};
struct ivi_layout_layer {
struct wl_list link;
struct wl_signal property_changed;
struct wl_list screen_list;
struct wl_list link_to_surface;
uint32_t id_layer;
struct ivi_layout *layout;
struct ivi_layout_layer_properties prop;
uint32_t event_mask;
struct {
struct ivi_layout_layer_properties prop;
struct wl_list surface_list;
struct wl_list link;
} pending;
struct {
struct wl_list surface_list;
struct wl_list link;
} order;
};
struct ivi_layout {
struct weston_compositor *compositor;
struct wl_list surface_list;
struct wl_list layer_list;
struct wl_list screen_list;
struct {
struct wl_signal created;
struct wl_signal removed;
} layer_notification;
struct {
struct wl_signal created;
struct wl_signal removed;
struct wl_signal configure_changed;
} surface_notification;
struct weston_layer layout_layer;
struct wl_signal warning_signal;
struct ivi_layout_transition_set *transitions;
struct wl_list pending_transition_list;
};
struct ivi_layout *get_instance(void);
struct ivi_layout_transition;
struct ivi_layout_transition_set {
struct wl_event_source *event_source;
struct wl_list transition_list;
};
typedef void (*ivi_layout_transition_destroy_user_func)(void *user_data);
struct ivi_layout_transition_set *
ivi_layout_transition_set_create(struct weston_compositor *ec);
void
ivi_layout_transition_move_resize_view(struct ivi_layout_surface *surface,
int32_t dest_x, int32_t dest_y,
int32_t dest_width, int32_t dest_height,
uint32_t duration);
void
ivi_layout_transition_visibility_on(struct ivi_layout_surface *surface,
uint32_t duration);
void
ivi_layout_transition_visibility_off(struct ivi_layout_surface *surface,
uint32_t duration);
void
ivi_layout_transition_move_layer(struct ivi_layout_layer *layer,
int32_t dest_x, int32_t dest_y,
uint32_t duration);
void
ivi_layout_transition_fade_layer(struct ivi_layout_layer *layer,
uint32_t is_fade_in,
double start_alpha, double end_alpha,
void *user_data,
ivi_layout_transition_destroy_user_func destroy_func,
uint32_t duration);
int32_t
is_surface_transition(struct ivi_layout_surface *surface);
/**
* \brief get ivi_layout_layer from id of layer
*
* \return (struct ivi_layout_layer *)
* if the method call was successful
* \return NULL if the method call was failed
*/
struct ivi_layout_layer *
ivi_layout_get_layer_from_id(uint32_t id_layer);
/**
* \brief Remove a surface
*/
void
ivi_layout_surface_remove(struct ivi_layout_surface *ivisurf);
/**
* \brief Get all Layers of the given screen
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_layers_on_screen(struct ivi_layout_screen *iviscrn,
int32_t *pLength,
struct ivi_layout_layer ***ppArray);
/**
* \brief Get all Surfaces which are currently registered to a given
* layer and are managed by the services
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_get_surfaces_on_layer(struct ivi_layout_layer *ivilayer,
int32_t *pLength,
struct ivi_layout_surface ***ppArray);
/**
* \brief Get the visibility of a layer. If a layer is not visible,
* the layer and its surfaces will not be rendered.
*
* \return true if layer is visible
* \return false if layer is invisible or the method call was failed
*/
bool
ivi_layout_layer_get_visibility(struct ivi_layout_layer *ivilayer);
/**
* \brief Get the horizontal and vertical dimension of the layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_get_dimension(struct ivi_layout_layer *ivilayer,
int32_t *dest_width, int32_t *dest_height);
/**
* \brief Set the horizontal and vertical dimension of the layer.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_layer_set_dimension(struct ivi_layout_layer *ivilayer,
int32_t dest_width, int32_t dest_height);
/**
* \brief Gets the orientation of a layer.
*
* \return (enum wl_output_transform)
* if the method call was successful
* \return WL_OUTPUT_TRANSFORM_NORMAL if the method call was failed
*/
enum wl_output_transform
ivi_layout_layer_get_orientation(struct ivi_layout_layer *ivilayer);
/**
* \brief Set the horizontal and vertical dimension of the surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_dimension(struct ivi_layout_surface *ivisurf,
int32_t dest_width, int32_t dest_height);
/**
* \brief Get the horizontal and vertical dimension of the surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_get_dimension(struct ivi_layout_surface *ivisurf,
int32_t *dest_width, int32_t *dest_height);
/**
* \brief Sets the horizontal and vertical position of the surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_set_position(struct ivi_layout_surface *ivisurf,
int32_t dest_x, int32_t dest_y);
/**
* \brief Get the horizontal and vertical position of the surface.
*
* \return IVI_SUCCEEDED if the method call was successful
* \return IVI_FAILED if the method call was failed
*/
int32_t
ivi_layout_surface_get_position(struct ivi_layout_surface *ivisurf,
int32_t *dest_x, int32_t *dest_y);
/**
* \brief Gets the orientation of a surface.
*
* \return (enum wl_output_transform)
* if the method call was successful
* \return WL_OUTPUT_TRANSFORM_NORMAL if the method call was failed
*/
enum wl_output_transform
ivi_layout_surface_get_orientation(struct ivi_layout_surface *ivisurf);
int32_t
ivi_layout_surface_set_transition_duration(
struct ivi_layout_surface *ivisurf,
uint32_t duration);
struct ivi_layout_interface {
struct weston_view *(*get_weston_view)(
struct ivi_layout_surface *surface);
void (*surface_configure)(struct ivi_layout_surface *ivisurf,
int32_t width,
int32_t height);
struct ivi_layout_surface *(*surface_create)(
struct weston_surface *wl_surface,
uint32_t id_surface);
void (*init_with_compositor)(struct weston_compositor *ec);
int32_t (*get_surface_dimension)(
struct ivi_layout_surface *ivisurf,
int32_t *dest_width,
int32_t *dest_height);
void (*add_surface_configured_listener)(
struct ivi_layout_surface *ivisurf,
struct wl_listener* listener);
};
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save