---------------------------------------------------------------------
#define SCREEN_W    432
#define SCREEN_H    432
#define LOGO_W      338
#define LOGO_H      78
#define SCALE_STEP  8
#define MOVE_STEP   15
#define ALPHA_STEP  10
volatile bool SplashUpdateFlag = false;

void SplashUpdateIntervalCallback( uintptr_t context )
{
    SplashUpdateFlag = true;
}

---------------------------------------------------------------------
    SYS_TIME_CallbackRegisterMS( SplashUpdateIntervalCallback, 0, 20, SYS_TIME_PERIODIC );

---------------------------------------------------------------------
bool ScaleUpLogo( uint32_t Init_W )
{
    uint32_t W, H;

    if( Init_W )
    {
        W = Init_W;
    }
    else
    {
        W = Screen1_ImageScaleLogo->fn->getWidth( Screen1_ImageScaleLogo );
        W = W + SCALE_STEP;
    }

    if( W >= LOGO_W )
    {
        return true;
    }

    H = W * LOGO_H/LOGO_W;
    Screen1_ImageScaleLogo->fn->setPosition( Screen1_ImageScaleLogo, (SCREEN_W-W)>>1, (SCREEN_H-H)>>1 );
    Screen1_ImageScaleLogo->fn->setSize( Screen1_ImageScaleLogo, W, H );

    RGB_LED_G_Toggle();

    return false;
}

---------------------------------------------------------------------
bool FadeOutMoveLogo( void )
{
    int32_t X, Y;
    uint32_t Alpha;

    X = Screen1_ImageScaleLogo->fn->getX( Screen1_ImageScaleLogo );
    X = X - MOVE_STEP;
    Alpha = Screen1_ImageScaleLogo->fn->getAlphaAmount( Screen1_ImageScaleLogo );
    Alpha = Alpha - ALPHA_STEP;

    if( X <= -LOGO_W )
    {
        return true;
    }

    Y = Screen1_ImageScaleLogo->fn->getY( Screen1_ImageScaleLogo );
    Screen1_ImageScaleLogo->fn->setPosition( Screen1_ImageScaleLogo, X, Y );
    Screen1_ImageScaleLogo->fn->setAlphaAmount( Screen1_ImageScaleLogo, Alpha );

    RGB_LED_G_Toggle();

    return false;
}

---------------------------------------------------------------------
void Screen1_OnShow(void)
{
    ScaleUpLogo( 8 );
    RGB_LED_G_On();
    RGB_LED_B_Off();
}

void Screen1_OnUpdate(void)
{
    if( leIsDrawing() == LE_FALSE && SplashUpdateFlag )
    {
        SplashUpdateFlag = false;

        if( ScaleUpLogo( 0 ) )
        {
            if( FadeOutMoveLogo() )
            {
                legato_showScreen( screenID_Screen0 );
            }
        }
    }
}

void Screen0_OnShow(void)
{
    RGB_LED_G_Off();
    RGB_LED_B_On();
}

---------------------------------------------------------------------
