lee@sq.sq.com (Liam R. E. Quin) (12/06/90)
(this is for openwindows 2.0, hence the cross-post).
Some PostScript to play with! How can you wait?!?
I defined my own PaintRoot procedure in NeWS/paintroot.ps, which generates
random squiggly coloured shapes on the root window, which look interesting.
Two notes:
1) you get less work done because people come and say `wow' and ask you to
generate more of them and whether you can print them, and...
2) after a (fairly long) while it stops working and you get dictfull messages.
Doing psh < paintroot.ps makes it work again though. It's pretty enough
that I don't mind!
3) on a sun 4/110 it can take a second or two to repaint the screen, but on
a sparcstation2 it would probably finish before it had started...
Using Liam's Root Window Thingy:
The following entry in .openwin-menu just under "Properties..." will add a
button to make a new random root window on the Workspace menu:
"root..." POSTSCRIPT LiamDict begin LiamNewRoot end
Or you can experiment by saying
echo LiamDict begin LiamNewRoot end | psh
which will draw a pattern for you.
Here are the changes:
If you don't already have a $HOME/NeWS directory, make one and copy
/usr/openwin/etc/NeWS/init.ps into it. Change the line that says
UserProfile /UsePaintRoot? false ?get setpaintroot
to
true setpaintroot % call LiamPaintroot to repaint the root window
Copy /usr/openwin/etc/NeWS/paintroot.ps to your NeWS directory, and apply
the following patch.
Then run "openwin", have lunch while it starts up :-(, and come back and
enjoy the pretty pictures when you click on "root..."!
Lee
*** Original/paintroot.ps Wed Jun 27 15:17:47 1990
--- paintroot.ps Wed Dec 5 17:14:53 1990
***************
*** 11,16 ****
--- 11,125 ----
systemdict
begin
+ % define random root stuff...
+ /LiamDict 40 dict def
+ LiamDict begin
+
+ % the numbers are to help me keep track of the dictionary size.
+
+ %1
+ /LiamSeed rand def
+
+ %2
+ /coloralloc { % color => -
+ dup currentcanvas /Colormap get % color color cmap
+ exch createcolorsegment % color cmapentry
+ def
+ } def
+
+ %3
+ /Setcolor {
+ dup coloralloc setcolor
+ } def
+
+
+ %4
+ /mAx 0 def
+ %5
+ /mIn 0 def
+
+ %6
+ /rAndom { % min max random
+ /mAx exch 1 add def
+ /mIn exch def
+ random mAx mIn sub mul mIn add cvi
+ } def
+
+ %7
+ % exp min max expRandom non-linear random number
+ % the larger exp is, the closer to min the returned number. Min and Max
+ % ought to be +ve, I think.
+ /exprAndom {
+ /mAx exch 1 add def
+ /mIn exch def
+ /E 1 def
+ { /E E random mul def } repeat E mAx mIn sub mul mIn add cvi
+ } def
+
+ % Magic numbers are miny maxy (and minx, maxx, of course)
+ /nexty { 0 12 72 mul rAndom} def %8 %% Assumes 12x16 inch display, approx
+ /nextx { 0 16 72 mul rAndom} def %9
+
+ /LiamRandCurve { %10
+ newpath
+ nextx nexty moveto
+
+ 3 2 200 exprAndom { % from 2 to 200, most likely lower...
+ nextx nexty
+ nextx nexty
+ nextx nexty
+ curveto
+ } repeat
+
+ closepath
+
+ gsave
+ random random random rgbcolor Setcolor
+ eofill
+ grestore
+
+ random 0.5 gt {
+ % random colour for the stroke
+ random random random rgbcolor Setcolor
+ % very occasionally, use a much thicker line...
+ gsave
+ random 5 { random mul } repeat
+ 300 mul dup /LiamBorder exch def setlinewidth % 11
+ stroke
+ grestore
+ gsave
+ /LiamBorder2 random random mul random mul random mul 100 mul def % 12
+ LiamBorder 1 sub LiamBorder2 gt LiamBorder2 0.001 gt and {
+ LiamBorder2 setlinewidth
+ random random random hsbcolor Setcolor
+ stroke
+ } if
+ grestore
+ } if
+ } def
+
+ /LiamNewRoot { % 11
+ random pop % miss one...
+ /LiamRandSeed rand def
+ random random random rgbcolor dup Setcolor
+ systemdict begin
+ /RootColor exch def
+ end
+ LiamPaintRoot
+ } def
+
+ /LiamPaintRoot { % 12
+ LiamRandSeed srand
+ framebuffer setcanvas
+ RootColor setcolor
+ clippath fill
+ 12 1 5 exprAndom { % almost certainly only once
+ LiamRandCurve
+ } repeat
+ } def
+
+ end % end of Liam's dictionary setup
+
%
% Need to make this a procedure for multi-screen to work.
%
***************
*** 27,34 ****
/PaintRoot {
gsave
framebuffer setcanvas
! RootColor setcolor
! clippath fill
grestore
} def
--- 136,146 ----
/PaintRoot {
gsave
framebuffer setcanvas
! % RootColor setcolor
! % clippath fill
! LiamDict begin
! LiamPaintRoot
! end
grestore
} def
End of patch.
Lee
--
Liam R. E. Quin, lee@sq.com, SoftQuad Inc., Toronto, +1 (416) 963-8337