hmi-controller: allocate background surfaces for multi-screen
A surface ID for layer of background/panel image is set by key: background-id or panel-id at weston.ini. To support multi screens, it also support offset, surface-id-offset, to offset the surface ID to next ID for a layer on next screen. According to the above key, hmi-controller and ivi-shell-user-interface who increments the number of screens per notification of wl_output. crate surface and draw background/panel image on multi surface on screens. Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
committed by
Pekka Paalanen
parent
744b03093b
commit
2e656769b6
@@ -158,6 +158,8 @@ hmi_homescreen_setting {
|
||||
char *cursor_theme;
|
||||
int32_t cursor_size;
|
||||
uint32_t transition_duration;
|
||||
uint32_t surface_id_offset;
|
||||
int32_t screen_num;
|
||||
};
|
||||
|
||||
static void *
|
||||
@@ -621,6 +623,8 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t name,
|
||||
|
||||
ivi_hmi_controller_add_listener(p_wlCtx->hmiCtrl,
|
||||
&hmi_controller_listener, p_wlCtx);
|
||||
} else if (!strcmp(interface, "wl_output")) {
|
||||
p_wlCtx->hmi_setting->screen_num++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1161,6 +1165,9 @@ hmi_homescreen_setting_create(void)
|
||||
shellSection, "workspace-background-id",
|
||||
&setting->workspace_background.id, 2001);
|
||||
|
||||
weston_config_section_get_uint(
|
||||
shellSection, "surface-id-offset", &setting->surface_id_offset, 10);
|
||||
|
||||
icon_surface_id = workspace_layer_id + 1;
|
||||
|
||||
while (weston_config_next_section(config, §ion, &name)) {
|
||||
@@ -1201,8 +1208,8 @@ hmi_homescreen_setting_create(void)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct wlContextCommon wlCtxCommon;
|
||||
struct wlContextStruct wlCtx_BackGround;
|
||||
struct wlContextStruct wlCtx_Panel;
|
||||
struct wlContextStruct *wlCtx_BackGround;
|
||||
struct wlContextStruct *wlCtx_Panel;
|
||||
struct wlContextStruct wlCtx_Button_1;
|
||||
struct wlContextStruct wlCtx_Button_2;
|
||||
struct wlContextStruct wlCtx_Button_3;
|
||||
@@ -1213,12 +1220,11 @@ int main(int argc, char **argv)
|
||||
int ret = 0;
|
||||
struct hmi_homescreen_setting *hmi_setting;
|
||||
struct wlContextStruct *pWlCtxSt = NULL;
|
||||
int i = 0;
|
||||
|
||||
hmi_setting = hmi_homescreen_setting_create();
|
||||
|
||||
memset(&wlCtxCommon, 0x00, sizeof(wlCtxCommon));
|
||||
memset(&wlCtx_BackGround, 0x00, sizeof(wlCtx_BackGround));
|
||||
memset(&wlCtx_Panel, 0x00, sizeof(wlCtx_Panel));
|
||||
memset(&wlCtx_Button_1, 0x00, sizeof(wlCtx_Button_1));
|
||||
memset(&wlCtx_Button_2, 0x00, sizeof(wlCtx_Button_2));
|
||||
memset(&wlCtx_Button_3, 0x00, sizeof(wlCtx_Button_3));
|
||||
@@ -1256,6 +1262,9 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
wlCtx_BackGround = MEM_ALLOC(hmi_setting->screen_num * sizeof(struct wlContextStruct));
|
||||
wlCtx_Panel= MEM_ALLOC(hmi_setting->screen_num * sizeof(struct wlContextStruct));
|
||||
|
||||
if (wlCtxCommon.hmi_setting->cursor_theme) {
|
||||
create_cursors(&wlCtxCommon);
|
||||
|
||||
@@ -1265,8 +1274,6 @@ int main(int argc, char **argv)
|
||||
wlCtxCommon.current_cursor = CURSOR_LEFT_PTR;
|
||||
}
|
||||
|
||||
wlCtx_BackGround.cmm = &wlCtxCommon;
|
||||
wlCtx_Panel.cmm = &wlCtxCommon;
|
||||
wlCtx_Button_1.cmm = &wlCtxCommon;
|
||||
wlCtx_Button_2.cmm = &wlCtxCommon;
|
||||
wlCtx_Button_3.cmm = &wlCtxCommon;
|
||||
@@ -1275,11 +1282,18 @@ int main(int argc, char **argv)
|
||||
wlCtx_WorkSpaceBackGround.cmm = &wlCtxCommon;
|
||||
|
||||
/* create desktop widgets */
|
||||
create_background(&wlCtx_BackGround, hmi_setting->background.id,
|
||||
hmi_setting->background.filePath);
|
||||
for (i = 0; i < hmi_setting->screen_num; i++) {
|
||||
wlCtx_BackGround[i].cmm = &wlCtxCommon;
|
||||
create_background(&wlCtx_BackGround[i],
|
||||
hmi_setting->background.id +
|
||||
(i * hmi_setting->surface_id_offset),
|
||||
hmi_setting->background.filePath);
|
||||
|
||||
create_panel(&wlCtx_Panel, hmi_setting->panel.id,
|
||||
hmi_setting->panel.filePath);
|
||||
wlCtx_Panel[i].cmm = &wlCtxCommon;
|
||||
create_panel(&wlCtx_Panel[i],
|
||||
hmi_setting->panel.id + (i * hmi_setting->surface_id_offset),
|
||||
hmi_setting->panel.filePath);
|
||||
}
|
||||
|
||||
create_button(&wlCtx_Button_1, hmi_setting->tiling.id,
|
||||
hmi_setting->tiling.filePath, 0);
|
||||
@@ -1310,6 +1324,9 @@ int main(int argc, char **argv)
|
||||
destroyWLContextStruct(pWlCtxSt);
|
||||
}
|
||||
|
||||
free(wlCtx_BackGround);
|
||||
free(wlCtx_Panel);
|
||||
|
||||
destroyWLContextCommon(&wlCtxCommon);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user