diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-03-02 06:41:22 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-03-02 06:41:22 +0100 |
commit | d8a60343baca2cc85084e18a817dbf2f0e816dd7 (patch) | |
tree | b2b1870fa63f6a52694a94c4911db39e1a39b36b | |
parent | fa74649d188a22ef68a889cd2794697445df31fb (diff) | |
parent | f93dcaff17c5e7839a484c9034e15d5a2b423d71 (diff) | |
download | plan9front-d8a60343baca2cc85084e18a817dbf2f0e816dd7.tar.xz |
merge
-rw-r--r-- | sys/man/1/paint | 9 | ||||
-rw-r--r-- | sys/src/cmd/paint.c | 64 |
2 files changed, 50 insertions, 23 deletions
diff --git a/sys/man/1/paint b/sys/man/1/paint index 66d3c3860..e89fcf634 100644 --- a/sys/man/1/paint +++ b/sys/man/1/paint @@ -23,7 +23,14 @@ Type a number, in the pop-up box and hit enter. .TP .B c -Clear the screen. Any unsaved work will be lost. +Change the drawing color to +.I n, +where +0 = black, 1 = white, 2 = red, 3 = green, 4 = blue and 5 = yellow. +Type the corresponding number into the pop-up box and hit enter. +.TP +.B f +Fill the screen with the current color. Any unsaved work will be lost. .TP .B o Open a bitmap image file for editing. Type a path and filename into the diff --git a/sys/src/cmd/paint.c b/sys/src/cmd/paint.c index fa058d1e3..1e4d95d47 100644 --- a/sys/src/cmd/paint.c +++ b/sys/src/cmd/paint.c @@ -3,6 +3,10 @@ #include <draw.h> #include <event.h> +#define NCOLORS 6 + +Image *colors[NCOLORS]; + void eresized(int) { @@ -18,17 +22,15 @@ loadimg(char *name) if((fd = open(name, OREAD)) < 0) return -1; - else { - if((b = readimage(display, fd, 0)) == nil){ - close(fd); - return -1; - } else { - draw(screen, screen->r, b, 0, b->r.min); - flushimage(display, 1); - freeimage(b); - } + if((b = readimage(display, fd, 0)) == nil){ close(fd); + return -1; } + draw(screen, screen->r, b, 0, b->r.min); + flushimage(display, 1); + freeimage(b); + close(fd); + return 0; } int @@ -40,6 +42,7 @@ saveimg(char *name) return -1; writeimage(fd, screen, 0); close(fd); + return 0; } void @@ -47,12 +50,15 @@ main(int argc, char *argv[]) { Event e; Point last; - int haslast; - int brushsize = 1; + int b = 1; + int c = 0; + int cn, f; + int haslast = 0; char brush[128]; + char color[NCOLORS]; char file[128]; + char fill[NCOLORS]; - haslast = 0; if(initdraw(0, 0, "paint") < 0){ fprint(2, "paint: initdraw failed: %r\n"); exits("initdraw"); @@ -61,6 +67,13 @@ main(int argc, char *argv[]) draw(screen, screen->r, display->white, 0, ZP); flushimage(display, 1); + colors[0] = display->black; + colors[1] = display->white; + colors[2] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DRed); + colors[3] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DGreen); + colors[4] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DBlue); + colors[5] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DYellow); + ARGBEGIN{ default: goto Usage; @@ -84,28 +97,35 @@ main(int argc, char *argv[]) case Emouse: if(e.mouse.buttons & 1){ if(haslast) - line(screen, last, e.mouse.xy, Enddisc, Enddisc, brushsize, display->black, ZP); + line(screen, last, e.mouse.xy, Enddisc, Enddisc, b, colors[c], ZP); else - fillellipse(screen, e.mouse.xy, brushsize, brushsize, display->black, ZP); - + fillellipse(screen, e.mouse.xy, b, b, colors[c], ZP); last = e.mouse.xy; haslast = 1; flushimage(display, 1); } else haslast = 0; - if(e.mouse.buttons & 4){ - fillellipse(screen, e.mouse.xy, brushsize, brushsize, display->white, ZP); - flushimage(display, 1); - } break; case Ekeyboard: if(e.kbdc == 'b'){ if(eenter("Brush", brush, sizeof(brush), &e.mouse) <= 0) break; - brushsize = atoi(brush); + b = atoi(brush); + } + if(e.kbdc == 'c'){ + if(eenter("Color", color, sizeof(color), &e.mouse) <= 0) + break; + cn = atoi(color); + if(cn >= 0 && cn < NCOLORS) + c = cn; + } + if(e.kbdc == 'f'){ + if(eenter("Fill", fill, sizeof(fill), &e.mouse) <= 0) + break; + f = atoi(fill); + if(f >= 0 && f < NCOLORS) + draw(screen, screen->r, colors[f], 0, ZP); } - if(e.kbdc == 'c') - draw(screen, screen->r, display->white, 0, ZP); if(e.kbdc == 'o'){ if(eenter("Open file", file, sizeof(file), &e.mouse) <= 0) break; |