added buffer for input events
authorhackbard <hackbard>
Tue, 25 Feb 2003 22:23:35 +0000 (22:23 +0000)
committerhackbard <hackbard>
Tue, 25 Feb 2003 22:23:35 +0000 (22:23 +0000)
dfb-photoshow.c

index 6b6c23a..0bc3ac4 100644 (file)
@@ -34,10 +34,12 @@ int screen_height = 0;
 IDirectFBInputDevice *keyboard=NULL;
 IDirectFBSurface *logo=NULL;
 IDirectFBFont *font=NULL;
+IDirectFBEventBuffer *k_buf=NULL;
+
 char *title_txt="directfb photoshow";
-char *author_txt="hackbard@hackdaworld.dyndns.org";
+char *exp_txt="an image presenter ...";
 char *hp_txt="http://hackdaworld.dyndns.org";
-char *msg1_txt="(press return to continue ...)";
+char *msg1_txt="(press key to continue ...)";
 
 void clear_primary(void) {
  DFBCHECK(primary->SetColor(primary,0x00,0x00,0x00,0x00));
@@ -46,8 +48,7 @@ void clear_primary(void) {
 
 int main(int argc,char **argv) {
  int i,str_width;
- DFBInputDeviceKeyState state_enter=DIKS_UP;
- DFBInputDeviceKeyState state_escape=DIKS_UP;
+ DFBInputEvent k_event;
  DFBSurfaceDescription dsc;
  DFBFontDescription font_dsc;
  IDirectFBImageProvider *img_prov;
@@ -65,6 +66,7 @@ int main(int argc,char **argv) {
  fprintf(stdout,"dimensions: %dx%d\n",screen_width,screen_height);
 
  DFBCHECK(dfb->GetInputDevice(dfb,DIDID_KEYBOARD,&keyboard));
+ DFBCHECK(keyboard->CreateEventBuffer(keyboard,&k_buf));
 
  /* title */
  font_dsc.flags=DFDESC_HEIGHT;
@@ -75,50 +77,53 @@ int main(int argc,char **argv) {
  clear_primary();
  DFBCHECK(primary->SetColor(primary,0x80,0x80,0xff,0xff));
  DFBCHECK(primary->DrawString(primary,title_txt,-1,(screen_width-str_width)/2,screen_height/4,DSTF_LEFT));
- /* author,homepage,msg */
+ /* explanation,homepage,msg */
  font_dsc.height=screen_height/40;
  DFBCHECK(dfb->CreateFont(dfb,"/usr/share/DFBSee/decker.ttf",&font_dsc,&font));
  DFBCHECK(primary->SetFont(primary,font));
- DFBCHECK(font->GetStringWidth(font,author_txt,-1,&str_width));
- DFBCHECK(primary->DrawString(primary,author_txt,-1,(screen_width-str_width)/2,screen_height/2,DSTF_LEFT));
+ DFBCHECK(font->GetStringWidth(font,exp_txt,-1,&str_width));
+ DFBCHECK(primary->DrawString(primary,exp_txt,-1,(screen_width-str_width)/2,screen_height/2,DSTF_LEFT));
  DFBCHECK(font->GetStringWidth(font,hp_txt,-1,&str_width));
  DFBCHECK(primary->DrawString(primary,hp_txt,-1,(screen_width-str_width)/2,(screen_height/2)+font_dsc.height,DSTF_LEFT));
  DFBCHECK(font->GetStringWidth(font,msg1_txt,-1,&str_width));
  DFBCHECK(primary->DrawString(primary,msg1_txt,-1,(screen_width-str_width)/2,(screen_height/2)+3*font_dsc.height,DSTF_LEFT));
  DFBCHECK(primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC));
- DFBCHECK(keyboard->GetKeyState(keyboard,DIKI_ESCAPE,&state_enter));
- while(state_enter==DIKS_UP) {
-  DFBCHECK(keyboard->GetKeyState(keyboard,DIKI_ENTER,&state_enter));
- }
+ DFBCHECK(k_buf->WaitForEvent(k_buf));
  font->Release(font);
 
  /* display pictures */
  i=2;
- while(state_escape==DIKS_UP) { 
-  DFBCHECK(dfb->CreateImageProvider(dfb,argv[i],&img_prov));
-  DFBCHECK(img_prov->GetSurfaceDescription(img_prov,&dsc));
-  DFBCHECK(dfb->CreateSurface(dfb,&dsc,&logo ));
-  DFBCHECK(img_prov->RenderTo(img_prov,logo,NULL));
-  img_prov->Release(img_prov);
-  DFBCHECK (primary->SetColor(primary,0x00,0x00,0x00,0x00));
-  DFBCHECK(primary->FillRectangle(primary,0,0,screen_width,screen_height));
-  DFBCHECK(primary->SetColor(primary,0x80,0x80,0xff,0xff));
-  DFBCHECK(primary->DrawLine(primary,0,0,screen_width-1,screen_height-1));
-  if((screen_width>=dsc.width)&&(screen_height>=dsc.height)) {
-   DFBCHECK(primary->Blit(primary,logo,NULL,(screen_width-dsc.width)/2,(screen_height-dsc.height)/2));
+ while(i<argc) {
+  while(k_buf->GetEvent(k_buf,DFB_EVENT(&k_event))==DFB_OK) {
+   if(k_event.type==DIET_KEYPRESS) {
+    if(k_event.key_id==DIKI_ESCAPE) i=argc;
+    if(k_event.key_id==DIKI_SPACE) DFBCHECK(k_buf->WaitForEvent(k_buf));
+   }
+   else {
+    DFBCHECK(dfb->CreateImageProvider(dfb,argv[i],&img_prov));
+    DFBCHECK(img_prov->GetSurfaceDescription(img_prov,&dsc));
+    DFBCHECK(dfb->CreateSurface(dfb,&dsc,&logo ));
+    DFBCHECK(img_prov->RenderTo(img_prov,logo,NULL));
+    img_prov->Release(img_prov);
+    DFBCHECK (primary->SetColor(primary,0x00,0x00,0x00,0x00));
+    DFBCHECK(primary->FillRectangle(primary,0,0,screen_width,screen_height));
+    DFBCHECK(primary->SetColor(primary,0x80,0x80,0xff,0xff));
+    DFBCHECK(primary->DrawLine(primary,0,0,screen_width-1,screen_height-1));
+    if((screen_width>=dsc.width)&&(screen_height>=dsc.height)) {
+     DFBCHECK(primary->Blit(primary,logo,NULL,(screen_width-dsc.width)/2,(screen_height-dsc.height)/2));
+    }
+    else {
+     DFBCHECK(primary->StretchBlit(primary,logo,NULL,NULL));
+    }
+    DFBCHECK(primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC));
+    DFBCHECK(k_buf->WaitForEventWithTimeout(k_buf,atoi(argv[1]),0));
+    logo->Release(logo);
+    ++i;
+   }
   }
-  else {
-   DFBCHECK(primary->StretchBlit(primary,logo,NULL,NULL));
-  }
-  DFBCHECK(primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC));
-  sleep(atoi(argv[1]));
-  logo->Release(logo);
-  DFBCHECK(keyboard->GetKeyState(keyboard,DIKI_ESCAPE,&state_escape));
-  i++;
-  if(i==argc) state_escape=DIKS_DOWN;
  }
 
-
+ k_buf->Release(k_buf);
  keyboard->Release(keyboard);
  logo->Release(logo);
  primary->Release(primary);