Path: utzoo!attcan!uunet!clyde.concordia.ca!news-server.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!zaphod.mps.ohio-state.edu!mips!apple!sun-barr!newstop!sun!naughton@sun.com From: naughton@wind.eng.sun.com (Patrick Naughton) Newsgroups: comp.windows.news Subject: Re: setlinewidth and overlay canvases Message-ID: <132981@sun.Eng.Sun.COM> Date: 15 Mar 90 19:44:34 GMT References: <9003151602.AA06773.rxb@plutonium.ASC.SLB.COM> Sender: news@sun.Eng.Sun.COM Reply-To: naughton@sun.com Organization: OpenWindows Lines: 126 In article <9003151602.AA06773.rxb@plutonium.ASC.SLB.COM>, rxb@ASC.SLB.COM (Rafael Bracho) writes: > >Does anyone know whether it is a feature or a bug that setting > >the line width seems to have no effect when drawing on an overlay > >canvas? That is, the thickness of any line does not change when > >stroked, regardless of what value has been given to 'setlinewidth'. > > It is a feature. Overlay canvases are ambiguously defined on purpose, > to allow for efficient (perhaps hardware-dependent) implementations. > It was rumoured that some of their restrictions may be lifted in the > future (e.g., ability to set the color, perhaps line width, etc.). > > -Rafael The overlay code does indeed ignore the linewidth, dash pattern, color, etc., on paths... Here's how overlays work: An overlay canvas maintains a list of paths and strings to display. The only way to add a string to this list is with the 'show' operator, and the only way to add a path is with the 'stroke' operator. A notable exception is that paths cannot be 'fill'ed. This was done for the same reason that wide lines were left out. Overlays are implemented by simply rendering the display list using the XOR rasterop mode each time the canvas which has the overlay is written to. If large filled areas were allowed, rather than the current one pixel wide lines, there would be excessive screen flashing. On future graphics hardware which has one or more hardware overlay planes, this restriction can be removed. This is why the definition of what happens in the overlay canvases has been left ambiguous. ______________________________________________________________________ Patrick J. Naughton ARPA: naughton@sun.com Window Systems Group UUCP: ...!sun!naughton Sun Microsystems, Inc. AT&T: (415) 336 - 1080 ps. while we're talking about overlays... here's a little hack which shows off rotated OpenFonts in the overlay plane... Click the middle button to change the string, and give it a few spins to let the font cache fill up with the glyphs. %!PS-NeWS2.0 %%Title: OpenFonts rotated text demo %%Creator: Patrick Naughton %%CreationDate: Thu Mar 15 11:40:15 PST 1990 %%EndComments /fontfamily /Palatino-Roman def /fontsize 64 def /angle 60 def /strings [ (Open) (Fonts) (are) (very) (cool) (!!!!) ] def %%EndProlog fboverlay setcanvas fontfamily findfont fontsize scalefont setfont /drag createevent dup begin /Name /MouseDragged def /Canvas fboverlay def /Exclusivity true def end def /click createevent dup begin /Name /LeftMouseButton def /Action null def /Exclusivity true def /Canvas null def end def /flip createevent dup begin /Name /MiddleMouseButton def /Action [ /UpTransition /DownTransition ] def /Exclusivity true def /Canvas null def end def /update { erasepage x y translate angle rotate 0 0 moveto strings idx get false { false charpath strokepath stroke } { cshow } ifelse } def currentcursorlocation /y exch def /x exch def /idx 0 def update drag expressinterest click expressinterest flip expressinterest { awaitevent dup begin Name { /MiddleMouseButton { /Action get /DownTransition eq { /idx idx 1 add strings length mod store update } if } /MouseDragged { pop /x XLocation store /y YLocation store update } /LeftMouseButton { pop exit } } case end } loop erasepage drag revokeinterest click revokeinterest flip revokeinterest