img.c (1150B)
1 #include <u.h> 2 #include <libc.h> 3 #include <draw.h> 4 #include <event.h> 5 6 void 7 usage(void) 8 { 9 fprint(2, "usage: img [-W winsize] [file]\n"); 10 exits("usage"); 11 } 12 13 Image *image; 14 15 void 16 eresized(int new) 17 { 18 if(new && getwindow(display, Refnone) < 0) 19 sysfatal("can't reattach to window: %r"); 20 21 draw(screen, screen->r, display->white, nil, ZP); 22 drawop(screen, screen->r, image, nil, image->r.min, S); 23 flushimage(display, 1); 24 } 25 26 void 27 main(int argc, char **argv) 28 { 29 int fd; 30 char *label; 31 Event e; 32 33 ARGBEGIN{ 34 case 'W': 35 winsize = EARGF(usage()); 36 break; 37 default: 38 usage(); 39 }ARGEND 40 41 if(argc > 1) 42 usage(); 43 44 if(argc == 1){ 45 if((fd = open(argv[0], OREAD)) < 0) 46 sysfatal("open %s: %r"); 47 label = argv[0]; 48 }else{ 49 fd = 0; 50 label = nil; 51 } 52 53 if(initdraw(0, nil, label) < 0) 54 sysfatal("initdraw: %r"); 55 56 if((image=readimage(display, fd, 0)) == nil) 57 sysfatal("readimage: %r"); 58 59 if(winsize == nil) 60 drawresizewindow(Rect(0,0,Dx(image->r),Dy(image->r))); 61 62 einit(Emouse|Ekeyboard); 63 eresized(0); 64 for(;;){ 65 switch(event(&e)){ 66 case Ekeyboard: 67 if(e.kbdc == 'q' || e.kbdc == 0x7F) 68 exits(nil); 69 break; 70 case Emouse: 71 break; 72 } 73 } 74 }