forked from KolibriOS/kolibrios
77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
|
#include<stdlib.h>
|
||
|
#include<stdio.h>
|
||
|
#include<jpeglib.h>
|
||
|
#include<menuet/os.h>
|
||
|
#include"libmgfx.h"
|
||
|
|
||
|
#define SPLASH_FILE "splash.jpg"
|
||
|
|
||
|
static int splash_thread_pid;
|
||
|
static char * splash_thread_stk;
|
||
|
static mgfx_image_t * splash=NULL;
|
||
|
static int xres,yres,bpp,bpscan;
|
||
|
|
||
|
void I_EndSplash(void);
|
||
|
|
||
|
static void repaint_splash_wnd(void)
|
||
|
{
|
||
|
__menuet__window_redraw(1);
|
||
|
__menuet__define_window(
|
||
|
(xres-splash->width)>>1,
|
||
|
(yres-splash->height)>>1,
|
||
|
splash->width,
|
||
|
splash->height+20,
|
||
|
0x01000000,
|
||
|
0x00000000,
|
||
|
0x00000000);
|
||
|
paint_image(0,0,splash);
|
||
|
__menuet__window_redraw(2);
|
||
|
}
|
||
|
|
||
|
static int __tmp=0;
|
||
|
|
||
|
static void splash_thread(void)
|
||
|
{
|
||
|
__menuet__dga_get_caps(&xres,&yres,&bpp,&bpscan);
|
||
|
repaint_splash_wnd();
|
||
|
for(;;)
|
||
|
{
|
||
|
__menuet__delay100(5);
|
||
|
__menuet__bar(0,splash->height+1,splash->width,20,0);
|
||
|
__menuet__bar(0,splash->height+1,__tmp,20,0x404040);
|
||
|
__tmp+=4;
|
||
|
if(__tmp>=splash->width) __tmp=0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void I_BeginSplash(void)
|
||
|
{
|
||
|
init_mgfx_library();
|
||
|
if(load_image(SPLASH_FILE,&splash)!=_PIC_OK)
|
||
|
{
|
||
|
splash=NULL;
|
||
|
__libclog_printf("Unable to open %s for splash screen !!!\n",SPLASH_FILE);
|
||
|
return;
|
||
|
}
|
||
|
splash_thread_stk=__menuet__exec_thread(splash_thread,4096,&splash_thread_pid);
|
||
|
if(splash_thread_pid<1)
|
||
|
{
|
||
|
__libclog_printf("Unable to create splash screen thread\n");
|
||
|
// I_EndSplash();
|
||
|
return;
|
||
|
}
|
||
|
__libclog_printf("Splash screen created\n");
|
||
|
}
|
||
|
|
||
|
void I_EndSplash(void)
|
||
|
{
|
||
|
int i;
|
||
|
if(!splash) return;
|
||
|
if(splash_thread_pid>1)
|
||
|
__asm__ __volatile__("int $0x40"::"a"(18),"b"(2),"c"(splash_thread_pid));
|
||
|
free_image(splash);
|
||
|
free(splash);
|
||
|
splash=NULL;
|
||
|
free(splash_thread_stk);
|
||
|
}
|