sjs@jcricket.ctt.bellcore.com (Stan Switzer) (10/21/88)
The following patches can be placed in your user.ps to fix a few problems in LiteWindow. This is pretty much a must if you want to take full advantage of "setcolor" posted previously. Problems addressed: 1) Handles ClientFillColor properly 2) Clips painting of frame fill so that it doesn't flash the client canvas first 3) Cures anemia of the focus bar, giving several options. The default is a bar rather than a line. On monochroms displays this has the advantage of allowing frame and focus colors in other than just black and white. 4) On monochrome systems, makes sure there is white under frame label. 5) For good measure, I've thrown in my caps-lock disable feature since I surely can't be the only one with a clumsy left hand. 6) And to make this all work for you, I've provided an "aesthetics" sub-menu that you can hook in to your rootmenu if you wish. Again, as always, enjoy! Stan Switzer sjs@ctt.bellcore.com P.S.: Ignore article's reply address as my poster mungs it; use signature address instead. ------------------------------------------------------------- % % modify LiteWindow % LiteWindow begin % so that repaint does not flash client canvas: /PaintFrameBorder { % - => - (Paint frame border areas) ClientCanvas dup null eq { pop } { gsave setcanvas ClientFillColor fillcanvas grestore } ifelse clippath pathbbox rectpath BorderLeft .5 sub BorderBottom .5 sub FrameWidth BorderLeft BorderRight add sub 1 add FrameHeight BorderBottom BorderTop add sub 1 add FramePath gsave FrameFillColor setshade eofill grestore FrameBorderColor setshade stroke FrameBorderColor strokecanvas } def % to cure anemia of the focus bar: /PaintFocus { gsave FrameCanvas setcanvas KeyFocus? {KeyFocusColor} {FrameFillColor} ifelse setcolor FocusStyle { /Lines { FocusLines aload pop { BorderTop FocusLines aload pop exch pop add div mul FrameHeight exch sub ControlSize exch moveto FrameFont setfont FrameLabel stringwidth pop ( ) stringwidth pop add dup FrameWidth exch sub 2 div ControlSize sub dup 0 rlineto exch 0 rmoveto 0 rlineto stroke } for } /Bar { BorderTop FocusWidth mul dup BorderTop exch sub 2 div FrameHeight exch sub ControlSize exch moveto FrameFont setfont FrameLabel stringwidth pop ( ) stringwidth pop add FrameWidth exch sub 2 div ControlSize sub % Focus-width x-size dup 0 rlineto exch dup neg 0 exch rlineto exch dup neg 0 rlineto currentpoint closepath moveto 0 2 index rmoveto dup FrameWidth BorderRight sub ControlSize sub exch sub 0 rmoveto dup 0 rlineto exch dup neg 0 exch rlineto exch dup neg 0 rlineto closepath fill } } case grestore } def % so you can read the frame label: /PaintFrameLabel { % - => - (Paint frame text label) FrameWidth 2 div FrameHeight BorderTop sub BorderTop currentfont fontascent sub 2 div currentfont fontdescent max 1 add add moveto FrameLabel ( ) append ( ) exch append dup stringwidth exch 2 div neg exch rmoveto ColorDisplay? not { dup gsave false charpath LabelFillColor setcolor fill grestore } if show } def % focus style control variables /FocusStyle /Bar def /FocusWidth .4 def /FocusLines [ 3 1 5 ] def % 3 lines % set style for a window (send to LiteWindow to change for all!) /setfocusstyle { /FocusStyle exch def } def /setfocuslines { /FocusLines exch def } def /setfocuswidth { /FocusWidth exch def } def /FrameFillColor 1 1 1 rgbcolor store /KeyFocusColor .25 .25 .25 rgbcolor store /LabelFillColor ClientFillColor def end % % Disable Caps-Lock Key % /CapsEnable { UI_private begin /compute_shift_states exch { { % enabled version (original) /letter_shift_state control_keys_down 0 gt 0 { caps_keys_down 0 gt shift_keys_down 0 gt or 1 2 ifelse } ifelse store /other_shift_state control_keys_down 0 gt 0 { shift_keys_down 0 gt 1 2 ifelse } ifelse store } } { { % disabled version /other_shift_state control_keys_down 0 gt 0 { shift_keys_down 0 gt 1 2 ifelse } ifelse store /letter_shift_state other_shift_state store } } ifelse store reset_shift_state end } def false CapsEnable % change "false" to "true" to enable by default % controls above customizations, include in your root menu if you wish /AestheticsMenu [ (Focus Style =>) [ (Bar Focus) {/Bar /setfocusstyle LiteWindow send } (Light Line Focus) { {[ 1 1 1 ]setfocuslines /Lines setfocusstyle} LiteWindow send } (Bold Line Focus) { {[ 3 1 5 ]setfocuslines /Lines setfocusstyle} LiteWindow send } (Bolder Line Focus) { {[ 2 1 6 ]setfocuslines /Lines setfocusstyle} LiteWindow send } ] /new DefaultMenu send (Shift Keys =>) [ (Caps Lock Enable) { true CapsEnable } (Caps Lock Disable) { false CapsEnable } ] /new DefaultMenu send ] /new DefaultMenu send def % see if user has saved favorite color scheme ColorDisplay? (color.ps) (mono.ps) ifelse LoadFile pop PaintRoot % ---------- end ----------