ref: c0c0acdf17e54c13f3ea6f65485889704b26f6a4
parent: a622708b65dfa4438a8a182939302c64c6fcc571
author: stanley lieber <stanley.lieber@gmail.com>
date: Thu Mar 1 23:54:45 EST 2012
paint: add 'c' and 'f'
--- a/sys/man/1/paint
+++ b/sys/man/1/paint
@@ -23,7 +23,14 @@
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
--- 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 @@
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 @@
return -1;
writeimage(fd, screen, 0);
close(fd);
+ return 0;
}
void
@@ -47,12 +50,15 @@
{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 @@
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 @@
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')
- draw(screen, screen->r, display->white, 0, ZP);
+ 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 == 'o'){ if(eenter("Open file", file, sizeof(file), &e.mouse) <= 0)break;
--
⑨