X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fmorpheus.git;a=blobdiff_plain;f=display.c;fp=display.c;h=809b556fe65a760f4204d35c0354682214a34748;hp=7619be205da6b3dce05dbe7dbbc20f74067c9414;hb=dcc213e7fef0a79e92d8548bd9a37461e91c9a5c;hpb=eecd9c34f43a4ee119595dd00261d1bff2fdf859 diff --git a/display.c b/display.c index 7619be2..809b556 100644 --- a/display.c +++ b/display.c @@ -38,6 +38,7 @@ int display_init(int x,int y,int z,display *display,void *cell,int *argc,char ** int display_release(display *display) { #ifdef USE_DFB_API + display->font->Release(display->font); display->primary_surface->Release(display->primary_surface); display->dfb->Release(display->dfb); #endif @@ -63,11 +64,13 @@ int dfb_choose_color(u32 *cell_p,unsigned char *r,unsigned char *g,unsigned char } #endif -int display_draw(display *display,int x,int y,int z) +int display_draw(display *display,u32 x,u32 y,u32 z) { #ifdef USE_DFB_API int menu_x,menu_y,menu_w,menu_h; /* for the yellow box */ - int x_c,y_c,z_c; + DFBFontDescription font_dsc; + char text[MAX_TXT]; + u32 x_c,y_c,z_c; unsigned char r,g,b,a; int display_faktor_x,display_faktor_y; a=0xff; /* no alpha blending */ @@ -137,8 +140,49 @@ int display_draw(display *display,int x,int y,int z) display->primary_surface->FillRectangle(display->primary_surface,menu_x,menu_y,menu_w,menu_h); display->primary_surface->SetColor(display->primary_surface,r,g,b,a); display->primary_surface->DrawRectangle(display->primary_surface,menu_x,menu_y,menu_w,menu_h); + font_dsc.flags=DFDESC_HEIGHT; + font_dsc.height=menu_h/10; + display->dfb->CreateFont(display->dfb,DISPLAY_FONT,&font_dsc,&(display->font)); + display->primary_surface->SetFont(display->primary_surface,display->font); + display->primary_surface->SetColor(display->primary_surface,0x80,0x80,0xff,0xff); + sprintf(text,"x: %u",x); + display->primary_surface->DrawString(display->primary_surface,text,-1,menu_x+display_faktor_x,menu_y+display_faktor_y+menu_h/10,DSTF_LEFT); + sprintf(text,"y: %u",y); + display->primary_surface->DrawString(display->primary_surface,text,-1,menu_x+display_faktor_x,menu_y+display_faktor_y*2+menu_h/10*2,DSTF_LEFT); + sprintf(text,"z: %u",z); + display->primary_surface->DrawString(display->primary_surface,text,-1,menu_x+display_faktor_x,menu_y+display_faktor_y*3+menu_h/10*3,DSTF_LEFT); + sprintf(text,"status: %c",*(u32 *)(display->cell_p+x+y*(display->max_x-1)+z*(display->max_x-1)*(display->max_y-1))&AMORPH?'a':'c'); + display->primary_surface->DrawString(display->primary_surface,text,-1,menu_x+display_faktor_x,menu_y+display_faktor_y*5+menu_h/10*5,DSTF_LEFT); + sprintf(text,"C conc.: %u",(*(u32 *)(display->cell_p+x+y*(display->max_x-1)+z*(display->max_x-1)*(display->max_y-1))&C_CONC_MASK)>>1); + display->primary_surface->DrawString(display->primary_surface,text,-1,menu_x+display_faktor_x,menu_y+display_faktor_y*6+menu_h/10*6,DSTF_LEFT); /* flip all to surface */ display->primary_surface->Flip(display->primary_surface,NULL,0); #endif return 23; } + +int display_event_init(display *display) +{ +#ifdef USE_DFB_API + display->dfb->GetInputDevice(display->dfb,DIDID_KEYBOARD,&(display->keyboard)); + display->keyboard->CreateEventBuffer(display->keyboard,&(display->keyboard_buffer)); +#endif + return 23; +} + +int display_scan_event(display *display,u32 *x,u32 *y,u32 *z,int *quit) +{ + DFBInputEvent keyboard_event; + display->keyboard_buffer->GetEvent(display->keyboard_buffer,DFB_EVENT(&keyboard_event)); + if(keyboard_event.type==DIET_KEYPRESS) + { + if(keyboard_event.key_id==DIKI_LEFT && *x!=0) *x-=1; + if(keyboard_event.key_id==DIKI_RIGHT && *x!=(display->max_x)-1) *x+=1; + if(keyboard_event.key_id==DIKI_DOWN && *y!=0) *y-=1; + if(keyboard_event.key_id==DIKI_UP && *y!=(display->max_y)-1) *y+=1; + if(keyboard_event.key_id==DIKI_PAGE_UP && *z!=0) *z-=1; + if(keyboard_event.key_id==DIKI_PAGE_DOWN && *z!=(display->max_z)-1) *z+=1; + if(keyboard_event.key_id==DIKI_Q) *quit=1; + } + return 23; +}