add paint(1)
This commit is contained in:
parent
17e170a42d
commit
13bbe20922
1 changed files with 83 additions and 0 deletions
83
sys/src/cmd/paint.c
Normal file
83
sys/src/cmd/paint.c
Normal file
|
@ -0,0 +1,83 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <draw.h>
|
||||
#include <event.h>
|
||||
|
||||
void
|
||||
eresized(int)
|
||||
{
|
||||
if(getwindow(display, Refnone) < 0)
|
||||
sysfatal("resize failed");
|
||||
}
|
||||
|
||||
/* stolen from mothra */
|
||||
void
|
||||
screendump(char *name, int full)
|
||||
{
|
||||
Image *b;
|
||||
int fd;
|
||||
|
||||
fd=create(name, OWRITE|OTRUNC, 0666);
|
||||
if(fd==-1)
|
||||
sysfatal("can't create file");
|
||||
if(full){
|
||||
writeimage(fd, screen, 0);
|
||||
} else {
|
||||
if((b=allocimage(display, screen->r, screen->chan, 0, DNofill)) == nil){
|
||||
close(fd);
|
||||
sysfatal("can't allocate image");
|
||||
}
|
||||
draw(b, b->r, screen, 0, b->r.min);
|
||||
writeimage(fd, b, 0);
|
||||
freeimage(b);
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
|
||||
void
|
||||
main()
|
||||
{
|
||||
Event e;
|
||||
Point last;
|
||||
int haslast;
|
||||
char file[128];
|
||||
|
||||
haslast = 0;
|
||||
initdraw(0, 0, 0);
|
||||
einit(Emouse | Ekeyboard);
|
||||
draw(screen, screen->r, display->white, 0, ZP);
|
||||
flushimage(display, 1);
|
||||
while(1){
|
||||
switch(event(&e)){
|
||||
case Emouse:
|
||||
if(e.mouse.buttons & 1){
|
||||
if(haslast)
|
||||
line(screen, last, e.mouse.xy, Enddisc, Enddisc, 5, display->black, ZP);
|
||||
else
|
||||
fillellipse(screen, e.mouse.xy, 5, 5, display->black, ZP);
|
||||
|
||||
last = e.mouse.xy;
|
||||
haslast = 1;
|
||||
flushimage(display, 1);
|
||||
} else
|
||||
haslast = 0;
|
||||
if(e.mouse.buttons & 4){
|
||||
fillellipse(screen, e.mouse.xy, 5, 5, display->white, ZP);
|
||||
flushimage(display, 1);
|
||||
}
|
||||
break;
|
||||
case Ekeyboard:
|
||||
if(e.kbdc == 'q')
|
||||
exits(nil);
|
||||
if(e.kbdc == 'c')
|
||||
draw(screen, screen->r, display->white, 0, ZP);
|
||||
if(e.kbdc == 's'){
|
||||
snprint(file, sizeof(file), "out.bit");
|
||||
if(eenter("Save to", file, sizeof(file), &e.mouse) <= 0)
|
||||
break;
|
||||
screendump(file, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue