forked from enlightenment/enlightenment
e - fix compositor fade out ghosting
due to enabling manual rendering (and als animator frametiem to 10 secons) in e_comp_canvas.c when screensaver is active (blanking is finished totallly - eg the fade to black) evas weill nto render the last frame of the animation - skipping it and not rendering another update until screensaver is disabled. this leaves a subtle ghost of pixel data which is 1 step before black on the screen (until dpms turns the monitor off). this fixes that. this delays enabling manual render for 1 more second after we have been told the screensaver is active. this is plenty of time to update all the way to black. @fix
This commit is contained in:
parent
a3266d5d89
commit
251daa7515
|
@ -2,12 +2,14 @@
|
||||||
|
|
||||||
static Eina_List *handlers;
|
static Eina_List *handlers;
|
||||||
static Ecore_Timer *timer_post_screensaver_lock = NULL;
|
static Ecore_Timer *timer_post_screensaver_lock = NULL;
|
||||||
|
static Ecore_Timer *timer_post_screensaver_on = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_canvas_cb_del()
|
_e_comp_canvas_cb_del()
|
||||||
{
|
{
|
||||||
E_FREE_LIST(handlers, ecore_event_handler_del);
|
E_FREE_LIST(handlers, ecore_event_handler_del);
|
||||||
E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
|
E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
|
||||||
|
E_FREE_FUNC(timer_post_screensaver_on, ecore_timer_del);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -155,13 +157,23 @@ _e_comp_cb_zone_change()
|
||||||
|
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
|
||||||
static void
|
static Eina_Bool
|
||||||
_e_comp_canvas_screensaver_active(void *d EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
_e_comp_cb_screensaver_active_delay(void *data EINA_UNUSED)
|
||||||
{
|
{
|
||||||
/* thawed in _e_comp_screensaver_off() */
|
|
||||||
ecore_animator_frametime_set(10.0);
|
ecore_animator_frametime_set(10.0);
|
||||||
if (!e_comp->nocomp)
|
if (!e_comp->nocomp)
|
||||||
ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
|
ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
|
||||||
|
timer_post_screensaver_on = NULL;
|
||||||
|
return ECORE_CALLBACK_CANCEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_comp_canvas_screensaver_active(void *d EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *src EINA_UNUSED)
|
||||||
|
{
|
||||||
|
if (timer_post_screensaver_on) return;
|
||||||
|
/* thawed in _e_comp_screensaver_off() */
|
||||||
|
timer_post_screensaver_on = ecore_timer_add
|
||||||
|
(1.0, _e_comp_cb_screensaver_active_delay, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -192,6 +204,7 @@ static Eina_Bool
|
||||||
_e_comp_cb_screensaver_off()
|
_e_comp_cb_screensaver_off()
|
||||||
{
|
{
|
||||||
E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
|
E_FREE_FUNC(timer_post_screensaver_lock, ecore_timer_del);
|
||||||
|
E_FREE_FUNC(timer_post_screensaver_on, ecore_timer_del);
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
return ECORE_CALLBACK_PASS_ON;
|
||||||
}
|
}
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue