git: 9front

Download patch

ref: df359b99d1313b0f8ccc93583e4ad70ff0d83ec0
parent: d0e7264790211a8372e30b9512a66f82ce7fae39
author: stanley lieber <stanley.lieber@gmail.com>
date: Fri Dec 9 16:18:20 EST 2011

paint: add selectable brush sizes

--- a/sys/man/1/paint
+++ b/sys/man/1/paint
@@ -11,15 +11,24 @@
 .PP
 A number of keyboard commands are recognized:
 .TP
+.B b
+Set the brush size to an ellipse of
+.I n
+x
+.I n
+pixels. Type a number,
+.I n,
+in the pop-up box and hit enter.
+.TP
 .B c
 Clear the screen. Any unsaved work will be lost.
 .TP
 .B s
-Save the current screen as a bitmap image. A pop-up window appears
+Save the current screen as a bitmap image. A pop-up box appears
 suggesting a default filename of
 .I out.bit.
 Hit enter to accept the default, or backspace over the suggested name and
-enter an alternative path and filename. If the path is omitted, the file will be
+type an alternative path and filename. If the path is omitted, a file will be
 created in the current directory.
 .TP
 .B q
@@ -31,6 +40,6 @@
 .IR image (6)
 .SH BUGS
 .I Paint
-offers the bare minimum of drawing functionality.
-.B Undo
-has not been implemented.
+offers a bare minimum of drawing functionality. Popular features such as
+.B undo
+have not yet been implemented.
--- a/sys/src/cmd/paint.c
+++ b/sys/src/cmd/paint.c
@@ -40,6 +40,8 @@
 	Event e;
 	Point last;
 	int haslast;
+	int brushsize = 1;
+	char brush[128];
 	char file[128];
 	
 	haslast = 0;
@@ -47,7 +49,6 @@
 		fprint(2, "paint: initdraw failed: %r\n");
 		exits("initdraw");
 	}
-		
 	einit(Emouse | Ekeyboard);
 	draw(screen, screen->r, display->white, 0, ZP);
 	flushimage(display, 1);
@@ -56,9 +57,9 @@
 		case Emouse:
 			if(e.mouse.buttons & 1){
 				if(haslast)
-					line(screen, last, e.mouse.xy, Enddisc, Enddisc, 5, display->black, ZP);
+					line(screen, last, e.mouse.xy, Enddisc, Enddisc, brushsize, display->black, ZP);
 				else
-					fillellipse(screen, e.mouse.xy, 5, 5, display->black, ZP);
+					fillellipse(screen, e.mouse.xy, brushsize, brushsize, display->black, ZP);
 				
 				last = e.mouse.xy;
 				haslast = 1;
@@ -66,15 +67,20 @@
 			} else
 				haslast = 0;
 			if(e.mouse.buttons & 4){
-				fillellipse(screen, e.mouse.xy, 5, 5, display->white, ZP);
+				fillellipse(screen, e.mouse.xy, brushsize, brushsize, display->white, ZP);
 				flushimage(display, 1);
 			}
 			break;
 		case Ekeyboard:
-			if(e.kbdc == 'q')
-				exits(nil);
+			if(e.kbdc == 'b'){
+				if(eenter("Brush", brush, sizeof(brush), &e.mouse) <= 0)
+					break;
+				brushsize = atoi(brush);
+			}
 			if(e.kbdc == 'c')
 				draw(screen, screen->r, display->white, 0, ZP);
+			if(e.kbdc == 'q')
+				exits(nil);
 			if(e.kbdc == 's'){
 				snprint(file, sizeof(file), "out.bit");
 				if(eenter("Save to", file, sizeof(file), &e.mouse) <= 0)
--