Move Dispmanx layers when using host-run

- When launching something with host-run, move the Amiga display Dispmanx layer to background
- When the focus is regained, bring the Amiga display layer back to the foreground
This commit is contained in:
Dimitris Panokostas 2020-07-07 16:28:34 +02:00
parent 1b15a672d3
commit 9497f826da
3 changed files with 18 additions and 1 deletions

View file

@ -1454,6 +1454,12 @@ void toggle_mousegrab()
void set_mouse_grab(const bool grab)
{
#ifdef USE_DISPMANX
if (grab)
change_layer_number(0);
else
change_layer_number(-128);
#endif
if (grab && mouse_grabbed || !grab && !mouse_grabbed)
return;
if (!grab && mouse_grabbed || grab && !mouse_grabbed)
@ -1597,10 +1603,12 @@ void process_event(SDL_Event event)
unsetminimized();
break;
case SDL_WINDOWEVENT_ENTER:
case SDL_WINDOWEVENT_FOCUS_GAINED:
mouseinside = true;
set_mouse_grab(true);
break;
case SDL_WINDOWEVENT_LEAVE:
case SDL_WINDOWEVENT_FOCUS_LOST:
mouseinside = false;
set_mouse_grab(false);
break;

View file

@ -251,7 +251,7 @@ static int display_thread(void *unused)
&black_rect, blackfb_resource, &src_rect, DISPMANX_PROTECTION_NONE, &alpha,
nullptr, DISPMANX_NO_ROTATE);
if (!elementHandle)
elementHandle = vc_dispmanx_element_add(updateHandle, displayHandle, 2,
elementHandle = vc_dispmanx_element_add(updateHandle, displayHandle, 0,
&dst_rect, amigafb_resource_1, &src_rect, DISPMANX_PROTECTION_NONE, &alpha,
nullptr, DISPMANX_NO_ROTATE);
@ -303,6 +303,14 @@ static int display_thread(void *unused)
}
return 0;
}
void change_layer_number(int layer)
{
updateHandle = vc_dispmanx_update_start(0);
vc_dispmanx_element_change_layer(updateHandle, blackscreen_element, layer);
vc_dispmanx_element_change_layer(updateHandle, elementHandle, layer);
vc_dispmanx_update_submit_sync(updateHandle);
}
#endif
int graphics_setup(void)

View file

@ -20,6 +20,7 @@ extern VC_RECT_T dst_rect;
extern VC_RECT_T blit_rect;
extern VC_RECT_T black_rect;
extern VC_IMAGE_TYPE_T rgb_mode;
extern void change_layer_number(int layer);
#else
extern SDL_Texture* texture;
extern SDL_Cursor* cursor;