X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=dfbapi.c;h=7de46c3440128d85509ecc071bcb5b73f162a037;hp=45960bedf9b21a6850c59719a4b8443e768dd16c;hb=38a94016ecd0208d5475d31a7df3b684b1891ba1;hpb=9150a149d453da8cffd8bc362d829cebb06ae3df diff --git a/dfbapi.c b/dfbapi.c index 45960be..7de46c3 100644 --- a/dfbapi.c +++ b/dfbapi.c @@ -8,29 +8,48 @@ #include #include "ivac.h" +// do +// int flip_blit_callback() +// int dfb_play_video() +// int dfb_stop_video() + int dfb_init(int arg_c,char **arg_v,struct ivac *ivac) { - DFBSurfaceDescription surface_dsc; - DFBFontDescription font_dsc; - + DFBSurfaceDescription sdsc; + // DFBFontDescription fdsc; + DFBWindowDescription wdsc; + + /* init */ DirectFBInit(&arg_c,&arg_v); DirectFBCreate(&(ivac->dfb_stuff.dfb)); - ivac->dfb_stuff.dfb->SetCooperativeLevel(ivac->dfb_stuff.dfb,DFSCL_FULLSCREEN); - surface_dsc.flags=DSDESC_CAPS; - surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING; - ivac->dfb_stuff.dfb->CreateSurface(ivac->dfb_stuff.dfb,&surface_dsc,&(ivac->dfb_stuff.p_surface)); - ivac->dfb_stuff.p_surface->GetSize(ivac->dfb_stuff.p_surface,&(ivac->dfb_stuff.s_width),&(ivac->dfb_stuff.s_height)); + /* input devices and event stuff */ + ivac->dfb_stuff.dfb->GetInputDevice(ivac->dfb_stuff.dfb,DIDID_MOUSE,&(ivac->dfb_stuff.mouse)); + ivac->dfb_stuff.dfb->GetInputDevice(ivac->dfb_stuff.dfb,DIDID_KEYBOARD,&(ivac->dfb_stuff.keyboard)); + ivac->dfb_stuff.mouse->CreateEventBuffer(ivac->dfb_stuff.mouse,&(ivac->dfb_stuff.buffer)); - font_dsc.flags=DFDESC_HEIGHT; - font_dsc.height=ivac->dfb_stuff.s_height/20; + /* first window -- video window */ + ivac->dfb_stuff.dfb->GetDisplayLayer(ivac->dfb_stuff.dfb,DLID_PRIMARY,&(ivac->dfb_stuff.layer)); ivac->dfb_stuff.dfb->CreateVideoProvider(ivac->dfb_stuff.dfb,ivac->video_dev,&(ivac->dfb_stuff.v_provider)); + ivac->dfb_stuff.v_provider->GetSurfaceDescription(ivac->dfb_stuff.v_provider,&sdsc); + + wdsc.flags=DWDESC_POSX|DWDESC_POSY|DWDESC_WIDTH|DWDESC_HEIGHT; + wdsc.posx=0; + wdsc.posy=0; + wdsc.width=sdsc.width; + wdsc.height=sdsc.height; + + ivac->dfb_stuff.layer->CreateWindow(ivac->dfb_stuff.layer,&wdsc,&(ivac->dfb_stuff.v_window)); + ivac->dfb_stuff.v_window->GetSurface(ivac->dfb_stuff.v_window,&(ivac->dfb_stuff.v_surface)); + ivac->dfb_stuff.v_window->SetOpacity(ivac->dfb_stuff.v_window,0xff); + ivac->dfb_stuff.v_provider->PlayTo(ivac->dfb_stuff.v_provider,ivac->dfb_stuff.v_surface,NULL,NULL,NULL); return 1; } int dfb_tini(struct ivac *ivac) { ivac->dfb_stuff.v_provider->Release(ivac->dfb_stuff.v_provider); - ivac->dfb_stuff.p_surface->Release(ivac->dfb_stuff.p_surface); + ivac->dfb_stuff.v_window->Release(ivac->dfb_stuff.v_window); + ivac->dfb_stuff.layer->Release(ivac->dfb_stuff.layer); ivac->dfb_stuff.dfb->Release(ivac->dfb_stuff.dfb); return 1;