%! %%BoundingBox: (atend) %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments %%BeginProlog % % FrameMaker postscript_prolog 3.0, for use with FrameMaker 3.0 % This postscript_prolog file is Copyright (c) 1986-1991 Frame Technology % Corporation. All rights reserved. This postscript_prolog file may be % freely copied and distributed in conjunction with documents created using % FrameMaker. % NOTE % This file fixes the problem with NeWS printers dithering color output. % Any questions should be sent to mickey@magickingdom.eng.sun.com % % Known Problems: % Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 /FMversion (3.0) def % Set up Color vs. Black-and-White /FMPrintInColor { % once-thru loop gimmick % See if we're a NeWSprint printer /currentcanvas where { pop systemdict /separationdict known exit } if % originally had the following, which should always be false: % /currentcanvas where { % pop currentcanvas /Color known { % currentcanvas /Color get % exit % } if % } if systemdict /colorimage known systemdict /currentcolortransfer known and exit } loop def % Uncomment the following line to force b&w on color printer % /FMPrintInColor false def /FrameDict 195 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } def } if /FMVERSION { FMversion ne { /Times-Roman findfont 18 scalefont setfont 100 100 moveto (FrameMaker version does not match postscript_prolog!) dup = show showpage } if } def /FMLOCAL { FrameDict begin 0 def end } def /gstring FMLOCAL /gfile FMLOCAL /gindex FMLOCAL /orgxfer FMLOCAL /orgproc FMLOCAL /organgle FMLOCAL /orgfreq FMLOCAL /yscale FMLOCAL /xscale FMLOCAL /manualfeed FMLOCAL /paperheight FMLOCAL /paperwidth FMLOCAL /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne dup {setmanualfeed} if /manualfeed exch def /paperheight exch def /paperwidth exch def /yscale exch def /xscale exch def currenttransfer cvlit /orgxfer exch def currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} if end } def /pagesave FMLOCAL /orgmatrix FMLOCAL /landscape FMLOCAL /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch neg translate pop } {pop pop} ifelse xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin array /fillvals exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 0.0 0.0 moveto 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /fx FMLOCAL /fy FMLOCAL /fh FMLOCAL /fw FMLOCAL /llx FMLOCAL /lly FMLOCAL /urx FMLOCAL /ury FMLOCAL /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fy translate rotate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate } bind def /FMENDEPSF { FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } def /papersizedict FMLOCAL /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end /FMdicttop countdictstack 1 add def statusdict begin stopped end countdictstack -1 FMdicttop {pop end} for } def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped pop end } if } def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def /sangle 1 0 dmatrix defaultmatrix dtransform exch atan def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def /graymode true def /bwidth FMLOCAL /bpside FMLOCAL /bstring FMLOCAL /onbits FMLOCAL /offbits FMLOCAL /xindex FMLOCAL /yindex FMLOCAL /x FMLOCAL /y FMLOCAL /setpattern { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/y exch def /x exch def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer offbits offbits onbits add div FMsetgray /graymode false def } bind def /grayness { FMsetgray graymode not { /graymode true def orgxfer cvx settransfer orgfreq organgle orgproc cvx setscreen } if } bind def /HUE FMLOCAL /SAT FMLOCAL /BRIGHT FMLOCAL /Colors FMLOCAL FMPrintInColor { /HUE 0 def /SAT 0 def /BRIGHT 0 def % array of arrays Hue and Sat values for the separations [HUE BRIGHT] /Colors [[0 0 ] % black [0 0 ] % white [0.00 1.0] % red [0.37 1.0] % green [0.60 1.0] % blue [0.50 1.0] % cyan [0.83 1.0] % magenta [0.16 1.0] % comment / yellow ] def /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /K { Colors exch get dup 0 get /HUE exch store 1 get /BRIGHT exch store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } def /FMsetgray { /SAT exch 1.0 exch sub store HUE 0 eq BRIGHT 0 eq and {1.0 SAT sub setgray} {HUE SAT BRIGHT sethsbcolor} ifelse } bind def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /FMsetgray {setgray} bind def /K { pop } def } ifelse /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /fillvals FMLOCAL /X { fillvals exch get dup type /stringtype eq {8 1 setpattern} {grayness} ifelse } bind def /V { gsave eofill grestore } bind def /N { stroke } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /n FMLOCAL /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /x1 FMLOCAL /x2 FMLOCAL /y1 FMLOCAL /y2 FMLOCAL /rad FMLOCAL /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath x1 y1 rad add moveto x1 y2 x2 y2 rad arcto x2 y2 x2 y1 rad arcto x2 y1 x1 y1 rad arcto x1 y1 x1 y2 rad arcto closepath 16 {pop} repeat } bind def /C { grestore gsave R clip } bind def /FMpointsize FMLOCAL /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath fill grestore } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix stroke grestore } bind def /x FMLOCAL /y FMLOCAL /w FMLOCAL /h FMLOCAL /xx FMLOCAL /yy FMLOCAL /ww FMLOCAL /hh FMLOCAL /FMsaveobject FMLOCAL /FMoptop FMLOCAL /FMdicttop FMLOCAL /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 4 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /str FMLOCAL /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /sl FMLOCAL /val FMLOCAL /ws FMLOCAL /im FMLOCAL /bs FMLOCAL /cs FMLOCAL /len FMLOCAL /pos FMLOCAL /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /h FMLOCAL /w FMLOCAL /d FMLOCAL /lb FMLOCAL /bitmapsave FMLOCAL /is FMLOCAL /cf FMLOCAL /wbytes { dup 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def r /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /r exch def /d exch def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def r /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /proc1 FMLOCAL /proc2 FMLOCAL /newproc FMLOCAL /Fmcc { /proc2 exch cvlit def /proc1 exch cvlit def /newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def /gryt FMLOCAL /blut FMLOCAL /grnt FMLOCAL /redt FMLOCAL /indx FMLOCAL /cynu FMLOCAL /magu FMLOCAL /yelu FMLOCAL /k FMLOCAL /u FMLOCAL /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /k cynu magu min yelu min def /u k currentundercolorremoval exec def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 k currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def /tran FMLOCAL /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch Fmcc settransfer } bind def /BITMAPCOLOR { /d 8 def gsave translate rotate scale /h exch def /w exch def /bitmapsave save def colorsetup /is w d wbytes string def /cf currentfile def w h d [w 0 0 h neg 0 h] {cf is readhexstring pop} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCOLORc { /d 8 def gsave translate rotate scale /h exch def /w exch def /lb w d wbytes def sl lb lt {lb ms} if /bitmapsave save def colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def w h d [w 0 0 h neg 0 h] {ip} {is} {is} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip} {gip} {bip} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def ws 0 w getinterval is copy pop /cf currentfile def w h 8 [w 0 0 h neg 0 h] {ip gip bip w gray} image bitmapsave restore grestore } bind def /ww FMLOCAL /r FMLOCAL /g FMLOCAL /b FMLOCAL /i FMLOCAL /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave translate rotate scale /h exch def /w exch def /bitmapsave save def /is w string def /gis w string def /bis w string def /cf currentfile def w h 8 [w 0 0 h neg 0 h] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop w gray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDsave FMLOCAL /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def %%EndProlog %%BeginSetup (3.0) FMVERSION 1 1 612 792 0 1 11 FMDOCUMENT 0 0 /Helvetica FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Courier FMFONTDEFINE 3 0 /Helvetica-Bold FMFONTDEFINE 4 0 /Times-Italic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "37" 13 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (37) 531.11 37.99 T 1 10 Q (somewhere else in the hierarchy) 72 713.33 T (.) 200.13 713.33 T (The layout hierarchy can be examined with two attributes:) 72 695.33 T 2 9 Q (xv_get\050 tree1, TREE_LINK_TO_LIST, node1 \051;) 108 683 T 1 10 Q -0.12 (returns a generic list containing the rectobjs that are leaves of node1. This only returns the direct links, and should be) 72 666.33 P (applied recursively if an entire subtree is to be examined.) 72 653.33 T 2 9 Q (xv_get\050 tree1, TREE_LINK_FROM, node2 \051;) 108 641 T 1 10 Q (returns the opposite of) 72 624.33 T 2 F (TREE_LINK_TO_LIST) 164.16 624.33 T 1 F (, which is the node that points to a node2.) 265.36 624.33 T (The tree itself acts as the root of all the nodes in the tree. It is probably easiest to think of the tree as maintaining an) 72 606.33 T (invisible root node. This root node can be referred to using the tree\325) 72 593.33 T (s handle. For example, when adding a the \336rst) 342.08 593.33 T (node to a tree, the function call is:) 72 580.33 T 2 9 Q (xv_set\050 tree1, TREE_ADD_LINK, tree1, f) 108 568 T (irst_node, NULL \051;) 312.91 568 T 1 10 Q -0.18 (Notice that the third ar) 72 551.33 P -0.18 (gument is the tree itself. In fact, the interface to the tree is symmetric to the interface for all the) 161.6 551.33 P (nodes in the tree.) 72 538.33 T 0.05 (The links between the trees are drawline objects. The application can get a handle on the drawline pointing to a node) 72 520.33 P (by:) 72 507.33 T 2 9 Q (\050Drawline\051 xv_get\050 tree1, TREE_DRAWLINE, node2 \051;) 108 495 T 1 10 Q (This is only useful if you wish to alter the drawline in some way) 72 478.33 T (, such as changing the its color) 328.69 478.33 T (, or putting an) 451.26 478.33 T (arrowhead on one end. The tree automatically creates and destroys these drawlines when children are added or) 72 465.33 T (deleted.) 72 452.33 T (When an object in the tree hierarchy is destroyed, the entire sub hierarchy is destroyed also. When an object in the) 72 434.33 T -0.31 (tree hierarchy is moved to another parent, via) 72 421.33 P 2 F -0.75 (XV_OWNER) 253.5 421.33 P 1 F -0.31 (, the application must take care so that the objects in the sub) 301.48 421.33 P (hierarchy are not orphaned.) 72 408.33 T FMENDPAGE %%EndPage: "37" 12 %%Page: "36" 12 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (36) 531.11 37.99 T 3 12 Q (T) 72 712 T (ree) 78.67 712 T 1 10 Q (The T) 72 691.33 T (ree extension is subclassed from the Rectobj extension and inherits its attributes and features. The following) 95.8 691.33 T (\336gure shows this hierarchy) 72 678.33 T (.) 179.33 678.33 T 4 F (Figure 40: Tree class hierarchy) 242.15 604.33 T 1 F -0.1 (A tree object positions its children in a hierarchy) 72 582.33 P -0.1 (, connecting them with drawline objects. When changes occur in the) 265.44 582.33 P (tree hierarchy or in the state \050e.g. sizes\051 of its children, the tree may change the position of its children for optimal) 72 569.33 T (layout.) 72 556.33 T 1 8 Q (2) 99.49 560.33 T 1 10 Q ( The children can be a member of any subclass of Rectobj.) 103.48 556.33 T 4 F (Figure 41: An example tree with drawicon nodes) 207.87 294.33 T 1 F (Children are added to the tree in a two step process. First, the tree must be set as the parent of the child \050during) 72 272.33 T 4 F -0.29 (xv_cr) 72 259.33 P -0.29 (eate\050\051) 93.83 259.33 P 1 F -0.29 ( or by explicit set of) 117.14 259.33 P 2 F -0.69 (XV_OWNER) 198.14 259.33 P 1 F -0.29 (\051. Second, the position within the layout hierarchy must be speci\336ed. This) 246.12 259.33 P (second step is done by setting the) 72 246.33 T 2 F (TREE_ADD_LINK) 208.3 246.33 T 1 F ( attribute. For example:) 286.26 246.33 T 2 9 Q (xv_set\050tree1, TREE_ADD_LINK, node1, node2, NULL\051;) 108 234 T 1 10 Q (this function calls for) 72 217.33 T (ges a link from node1 to node2, where node2 becomes a leaf of node1, and both node1 and) 157.04 217.33 T (node2 are children of tree1.) 72 204.33 T 2 F (TREE_ADD_LINK) 72 186.33 T 1 F ( can be used to build hierarchies from the bottom up. This might the case when an application) 149.96 186.33 T (constructs a tree during a depth \336rst traversals of its data structures. In these circumstances, the hierarchy under) 72 173.33 T (construction will not be visible until it is linked to the root node of the tree.) 72 160.33 T (The links between nodes are broken by the attribute) 72 142.33 T 2 F (TREE_UNLINK) 281.57 142.33 T 1 F (. For example, assuming that node2 is linked to) 347.53 142.33 T (node1:) 72 129.33 T 2 9 Q (xv_set\050tree1, TREE_UNLINK, node2, NULL\051;) 108 117 T 1 10 Q (unlinks node2 from node1. If tree sur) 72 100.33 T (gery is to preformed, nodes should always be unlinked before relinking them) 220.88 100.33 T 72 82 540 97 C 81 95 225 95 2 L 0.5 H 2 Z 0 X 0 K N 0 0 612 792 C 1 8 Q 0 X 0 K (2. Drawing Dynamic Trees, Moan, Sven, IEEE Software, July 1990.) 90 76.67 T 72 72 540 720 C 103.5 616 508.5 657 C 269.99 625.33 344.42 645.62 R 0 X 0 K V 0.5 H 2 Z N 267.58 627.71 342 648 R 7 X V 0 X N 0 10 Q (Rectobj) 289.06 633.02 T 166.49 625.33 240.92 645.62 R V N 164.08 627.71 238.5 648 R 7 X V 0 X N 373.49 625.33 447.92 645.62 R V N 371.08 627.71 445.5 648 R 7 X V 0 X N (XV) 169.54 633.02 T (iew Generic) 182.7 633.02 T (T) 399.41 633.02 T (ree) 405.15 633.02 T 106 618.17 506 654.83 R N 359.13 639.97 370.67 636.67 359.13 633.36 360.33 636.67 4 Y V 344.67 636.67 360.33 636.67 2 L N 255.63 639.97 267.17 636.67 255.63 633.36 256.83 636.67 4 Y V 241.17 636.67 256.83 636.67 2 L N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 72.84 306 539.16 535 C 0 X 0 K %%BeginBinary: 16247 460 431 220.8 206.88 0 195.6 317.06 /red < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000043868600FF > store /green < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000056B2AD00FF > store /blue < 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000054BDAA00FF > store BEGINBITMAPCOLORc z X FE7t"z"t" FDFBW8FDFEFDFB :'J' FBFBFBFBFBFBW:FBFBFBFBFBFB;':yJ( FDFDFDFDFDFDFEW&FDFDFDFDFDFDFED"y" FEFDFB J"C" S2FEFEHrJ%J" FEQ>FEFEFEFEOIFE7$E&J$J$ FBFBFBFCFCFCFCFCQ@FDFDFDS=FBFBFB7%C#9#J%9$9&9$9"9"9$:%<"A#:$:%8&9%J% FDFDFDFDFDFEFEFDQEFEFDFEFEFEFEFEFEFDFEFDFEFEFEFEFEFEFEFEFEFEFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEQ6FDFDFDFDJ$8&9$9&:":&:$;#@%8&8&8&8& R1FEFDFDFEFDFDFDFEFEFEFEFEFDFDFDFEFEFEFDFDFDFEFEFDFDFEFDFEFDFDFEFEFDFDFDFEFEFDFDFDFDFDFEFDFDFDFEFDFDFDFDI&J$:":"=$J"<#A" FDFEFCFEFDQ@FEFEFEFDFDFDFEFD:FDFEFDFDJ$@$A$J"J%@% R*FDFDFDFEFEFEFEFEFE9FE:FDFEFEFEFDFEFEFEJ$J%A%8&G$J%@% 4FDFEFDQMFEFDFDFDFDFDFDFDFDFEFDFEFDFDFDFE9FDFDFDFEFDFDFDFEJ"J"J# 5FDR2FE:FDFEJ'>&?&C#E&8&9%8& R6FDFEFEFEFDFEFDFEFEFEFDFDFEFEFEFDFDFEFDFEFEFEFDFEFEFEFEFDFDFEFEFEFEFEFEFEFDJ"<""9"9$9%;$8% R)FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDD"y" FDFBFDEy FD ;z#z# W1FEFFFF/FEFFFFFEJ$ W=FEFFFEJ& WFEFEFFFES@J%8#8" Q=FEFEFEFFFEFFFEJ#8#8#8" QFFFEFFFFJ"8" Q?FFFEJ"9" Q@FFFFJ$ QAFFFFFF J$9"9"9% Q:FEFEFEFEFEFEFFFEFEJ%B% Q9FEFFFFFFFEFFFFFEJ" QIFFJ$ Q9FFFEFEJ$ Q:FFFFFEJ" QCFEJ%9% Q9FEFEFEFFFFFEFEFFJ$;%9"9" Q9FFFFFFFFFFFFFFFFFF J$ QBFEFEFEJ&8% Q>FEFEFEFEFFFEFEFEFEJ%8. Q:FEFEFEFEFFFFFEFFFFFEFFFFFFFEFEFEFEJ'8#;#8) Q6FEFEFEFEFFFFFFFFFFFEFFFFFFFFFEFEFEFEJ-9#9#;) Q2FEFEFEFEFFFFFFFFFEFEFFFFFEFFFFFEFFFFFFFFFEFEFEFEJ%P&A#>) Q.FEFEFEFEFEFEFEFFFFFFFEFFFFFFFFFEFEFEFEJ(9&D#A( Q+FEFEFEFFFFFFFFFEFEFFFFFFFFFEFFFFFFFFFEFEFEJ(;%?#=#D( Q'FEFEFEFEFFFFFFFEFEFFFFFEFFFFFEFFFFFFFEFEFEFEJ)<%J$E) Q#FEFEFEFEFFFFFFFFFEFEFFFF5FFFEFEFFFFFFFFFEFEFEFEJ)=&B#@$H) PMFEFEFEFEFFFFFFFFFEFEFEFFFFFEFFFFFFFEFFFFFFFFFEFEFEFEJ)?&J#J) PIFEFEFEFEFFFFFFFFFEFEFFFFFFFEFEFEFFFFFFFFFEFEFFFFFFFFE>FFFFFFFFFEFEFEJ(F&J#H#J( P:FEFEFEFEFFFFFFFEFEFEFFFF5FEFFFFFEAFFFFFFFEFEFEFEJ)G&J#J) P6FEFEFEFEFFFFFFFFFEFEFFFFFFLFFFECFFFFFFFFFEFEFEFEJ)I%J#J) P2FEFEFEFEFFFFFFFFFEFEFFFFO"FFFEFFFFFFFFFFEFEFEFEJ)J%J#J#J) P.FEFEFEFEFFFFFFFF5FEFEFFFF;FEFF6FFFEIFFFFFFFFFEFEFEFEJ)J&J#J) P*FEFEFEFEFFFFFFFF6FEFEFEFFFFO(FFFELFFFFFFFFFEFEFEFEJ(J&J#J#J( P'FEFEFEFFFFFFFF8FEFEFFFFFF>FEFF9FFFEO!FFFFFFFFFEFEFEJ(J%J#J( P#FEFEFEFEFFFFFF:FEFEFFFFO/FFFEO$FFFFFFFEFEFEFEJ)J%J#J#J) OMFEFEFEFEFFFFFFFF;FEFEFFFFBFEFFFEFEFEFFFFO8FFFEO,FFFFFFFFFEFEFEFEJ)J&J#J$J) OAFEFEFEFEFFFFFFFF@FEFEFFFFFFGFEFF@FFFEFEO.FFFFFFFFFEFEFEFEJ)J%J$J) O=FEFEFEFEFFFFFFFFBFEFEFFFFO?FFFFFEO1FFFFFFFFFEFEFEFEJ(J%J#J#J( O:FEFEFEFFFFFFFFDFEFEFFFFKFEFFDFFFEO4FFFFFFFFFEFEFEJ(J&J#J( O6FEFEFEFEFFFFFFEFEFEFEFFFFOFFFFEO7FFFFFFFEFEFEFEJ)J&J#J) O2FEFEFEFEFFFFFFFFFFEFEFFFFFFOIFFFEO9FFFFFFFFFEFEFEFEJ)J%J#J#J) O.FEFEFEFEFFFFFFFFHFEFEFFFFO#FEFFHFFFEOFEFEFEFEFEFFFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFFFEFFFEFEFEFEFEO3FEFEFEFEFFFEFEFEFEFEFEJ#J&8&8%8%J&:%8&:%B+:%8%8*J&:%8% O*FEFFAFEFFFFFFFEFEFFFFFFFEFEFFFFFFFFFEFFFFAFEFFFFFFFEFEFFFFFEFEFFFFFFFEFEFFFFFEFEFFFFFFFFFEFFFFFFFEFEFFFFFEFFFEFFFFFEFFFFFFFEFFFFFFFEO1FEFFFFFFFEFEFFFFFEFEFFFFFFJ#J"J">";">"D#C"A"9"J" O)FEFFIFFO#FFFFFFFFFEFFFFFFFFO>FFJ"J$:$9$J$B$J$J$J$ O(FEEFEFEFEFEFEFEFFFEFEIFEFEFEFEFEFE;FEFEFE6FEFEFEO3FEFEFEJ$J%8%:$J%A%J%J%J%C" O(FFFFFECFFFFFFFFFEFFFFFFFFFFFEGFEFFFFFFFEFFFFFF;FFFFFFFF4FEFFFFFFO3FFFFFFFFFEJ">"J"J#>"J"@% O"FEFEEFEOMFFFEFEP FEFFFEFEFFJ%="J&8,9$J'9%8'I+A$<'J&A# MFFFEFEFFFFBFFFEFEFEFFFFFEFEFEFFFEFFFEFEFEFFFFFEFEAFFFEFEFEFFFEFEFEFEFFFFFEFEFEFFFEFFFEFEFEFFFFFEFEFEFFFFFEFEFFFEFEFEFFFEO0FFFEFEFEFFFFFFJ%9"9"J$:T;#JP9$:P8"9"C$8$:"9":%;P8"J$:"9" O FFFFFFFFFFFFBFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFO.FFFFFFFFFFJ$J% Q%FEFEFFQ2FEFEFEFFJ#A"J$ Q%FFFFFFQ'FFFFFFJ"J"J"J$ O$FEO%FEO+FEPJFEFEFEJ( T1FEFEFFFFFFFEFEJ%9% T/FEFEFFFFFFFFFEFEJ%=% T-FEFEFFFFFFFFFEFEJ&A& T*FEFEFEFFFFFFFFFEFEFEJ&E& T(FEFEFFFFFFFFFFFFFEFEJ%J% T&FEFEFFFF5FFFFFEFEJ&J& T#FEFEFEFFFF9FFFFFEFEFEJ&J& T!FEFEFFFFFF=FFFFFFFEFEJ%J% SMFEFEFFFFCFFFFFEFEJ%J% SKFEFEFFFFGFFFFFEFEJ&J& SHFEFEFEFFFFKFFFFFEFEFEJ&J& SFFEFEFFFFFFO!FFFFFFFEFEJ%J% SDFEFEFFFFO'FFFFFEFEJ&J& SAFEFEFEFFFFO+FFFFFEFEFEJ&J& S?FEFEFFFFFFO/FFFFFFFEFEJ%J% S=FEFEFFFFO5FFFFFEFEJ#J%J% Q5FEFFP$FEFEFFFFO9FFFFFEFEJ&J& S8FEFEFEFFFFO=FFFFFEFEFEJ&J& S6FEFEFFFFFFOAFFFFFFFEFEJ%J% S4FEFEFFFFOGFFFFFEFEJ&J& S1FEFEFEFFFFOKFFFFFEFEFEJ&J& S/FEFEFFFFFFP!FFFFFFFEFEJ%J% S-FEFEFFFFP'FFFFFEFEJ%J% S+FEFEFFFFP+FFFFFEFEJ&J& S(FEFEFEFFFFP/FFFFFEFEFEJ&J& S&FEFEFFFFFFP3FFFFFFFEFEJ%J% S$FEFEFFFFP9FFFFFEFEJ&J& S!FEFEFEFFFFP=FFFFFEFEFEJ&J& RMFEFEFFFFFFPAFFFFFFFEFEJ%J% RKFEFEFFFFPGFFFFFEFEJ%J% RIFEFEFFFFPKFFFFFEFEJ%J% RGFEFEFFFFQ!FFFFFEFEJ"J"J"J#J# O$FFO%FFO*FFO1FFFFQ%FFFF JzJzJz I0FED0FEI0FEJYJYJY JFKJwJwJwJtJt KFEHFEMFEO)FEPMFEJ'8"J'8"J'8"J$T$J$T$ LFFFEFFFFFFFFFFKFFFEFFFFFFFFFFO"FFFEFFFFFFFFFFO(FEFEFEFEFEFEPGFEFEFEFEFEFEJ"<$J"<$J"<$J&?&J&?& LFEFFFEFFJFEFFFEFFO!FEFFFEFFO%FEFEFFFFFFFFFFFFFEFEPCFEFEFFFFFFFFFFFFFEFEJ"<$J"<$J"<$J%E%J%E% LFFFEFEFEJFFFEFEFEO!FFFEFEFEO#FEFEFFFFFFFFFEFEP?FEFEFFFFFFFFFEFEJ"<$J"<$J"<$J$I$J$I$ LFEFFFFFFJFEFFFFFFO!FEFFFFFFO"FEFEFFFFFEFEP=FEFEFFFFFEFEJ"J"J"J"=&?"J"=&?" LFFO%FFO*FFO,FFFEFEFEFEFEFFP?FFFEFEFEFEFEFFJ"J"J"J#@%?#J#@%?# LFEO%FEO*FEO*FEFFFFFFFEFEFFFEP;FEFFFFFFFEFEFFFEJ'J'J'J"D$@"J"D$@" LFFFEFEFEFEFEO FFFEFEFEFEFEO%FFFEFEFEFEFEO$FEFFFEFEFEP9FEFFFEFEFEJ(J(J(J"J"J"J" LFEFFFEFFFEFFFFMFEFFFEFFFEFFFFO$FEFFFEFFFEFFFFO$FF9FFP;FF9FFJtJtJt MFEKFEO"FEJWJWJW KHMJyJyJyJ"J"J"J" JFEFFEKFEMFE9FEP;FE9FEJ%S%J%S%J%S%J"D$@"J"D$@" IFFFFFFFEFEFFFFFFDFFFFFFFEFEFFFFFFIFFFFFFFEFEFFFFFFKFFFEFEFFFFP9FFFEFEFFFFJzJzJzJ#@%?#J#@%?# I0FED0FEI0FELFFFEFEFEFEFFFEFFP;FFFEFEFEFEFFFEFFJYJYJYJ"=P?"J"=P?" JFKO!FEFEP?FEFEJzJzJzJ$I$J$I$ D;FE9;FE>;FEGFFFEFEFEFEFFP=FFFEFEFEFEFFJZJZJZJ%E%J%E% E9;9@9IFFFFFEFEFEFEFFFFP?FFFFFEFEFEFEFFFFJ#J#J#J&?&J&?& O-FEFEO$FEFEO)FEFELFFFFFEFEFEFEFEFEFFFFPCFFFFFEFEFEFEFEFEFFFFJ#J#J#J$t$J$t$ O-FFFFO$FFFFO)FFFFO FFFFFFFEFFFFFFPGFFFFFFFEFFFFFFJzJzJzJTJT E9FE;9FE@9FEO"PMJZJZJZ D;9;>; J#8"F#J#="J"9"J"J"<"J"@"J" AFEFEFEFEFE9FEFEFE6FEFE>FE;FEFE@FEFEPLFEJ$H$J$J" @FEFFFFFEFFFF8FEFFFFO'FEJ"J"J" EFFO&FFP FFJ%8"8%8$9%9#9"9"@*8"9$:%;$="9"@%8$>"9#9"9"9$>"8"J$<#J$:$9"9" ?FEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFFFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDFEFEFEFEFEPFFEFEFEFEFEFEFEFEJ%<*8%8%G%8$;&:%9%J+<#8%?&<#J&:%J%9& ?FFFEFFFFFEFFFFFFFEFFFFFFFEFFFEFFFFFEFFFFFEFFFEFFFFFEFFFFFEFFFFFFFEFEFFFFFEFEFFFFFF6FFFEFFFFFFFEFFFFFFFEFEFFFEFFFFFEFEFFFFFFFEFEFFFFEFFFFFFFEFEFFFFFEPDFEFFFFFFFEFFFFFFFEJ"E#8)F"F"J"?#8#8#>"?#J">" IFFFEFFFFFEFFFFFEFFFEFFFFFFEFFFEFFFEFFFFFEFFFEFFGFFFFJ$F$J$J&F$;"A&9$;"J$J$9& O FEFEFEFFFEFF:FEFEFE7FFFEFFFEFFFEFEFEFEFFFEFFFEFFFEFEFEFEJFEFEFEQ'FEFEFEFFFEFFFEFFJ%E$J%J%;$F%;$J%J% O FFFFFFFFFEFFFE:FFFFFFFFJFEFFFFFFFFFFFEFEFFFFFFFFFFFEGFEFFFFFFQ'FFFFFFFFJ"=#8)J"D">$J%8#8$E"J"="9$ O#FEFFFEFEFFFFFEFFFFFFFE%J&A%J+;"9%?';"J'9%J%9& MFFFEFEFEFFFFFEFEFF?FFFEFEFEFFFFFEFEFF7FFFEFEFFFFFEFEFEFFFEFFFFFEFEFFFFFEFEFEFFFEFFGFFFEFEFEFFFEFEFEFEFFPDFFFEFEFFFFFEFEFEFFJ":"8";$:";#9"9"A"9";"9$:"9":%9"9#D#8P8"9"9#:#;P8"9"8"J"9P8%J%9$;" @FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFFFFF@FFFFFFFFFFPFFFFFFFFFFFFFFFFFJ"J" P%J#@$ R=FEFEFFFFFEFFFFFFFEFEPDFEFFFFFFFEJ%:#;#:%J$C$ R;FEFEFFFFFEFFFFFEFFFFFEFEP@FEFEFFFFFEFEJ%J%J$E$ R9FEFEFFFF5FFFFFEFEP=FEFFFFFFFFFEJ$=#=#=$J$I# R8FEFFFFFEFFFFFEFFFFFEP:FEFEFFFFFEJ$>#?#>$J$J$ R6FEFEFFFEFFFFFEFFFEFEP7FEFFFF5FFFEFEJ%J%J$J$ R4FEFEFFFF?FFFFFEFEP3FEFEFF8FFFFFEJ%@#A#@%J$J$ R2FEFEFFFFFEFFFFFEFFFFFEFEP0FEFFFF;FFFEFEJ%J#A%J#J$ R0FEFEFFFF:FFFEFFFFFEFEP-FEFF>FFFFFEJ%C#J%J$J# R.FEFEFFFFFEFFFEFF?FFFE>FFFFFEFEO)FEFFFFO:FFFFFEJ%J#J%J#J$ Q@FEFEFFFFO4FFFE?FFFFFEFEO&FEFFO>FFFEFEJ%J#J%J$J$ Q>FEFEFFFFAFEFFO6FFFFFEFEO"FEFEFFO@FFFFFEJ%J#J#J%J$J# Q0FEJYJYJXJXJYJYJY Q1:;;:?@JwJwJvJvJwJwJw Q2FEFEFFFEFF>FE=FE=FEFFFEFFCFEFFFEFFDFEFFFEFFJ"<$J"<$JVJVJ"<$J"<$J"<$ Q3FFFEFEFE>FFFEFEFE>==FFFEFEFECFFFEFEFEDFFFEFEFEJ"<$J"<$JxJxJ"<$J"<$J"<$ Q3FEFFFFFF>FEFFFFFF=FE;FE=>FEDFEEFEJWJWJWJWJW Q2FFFFFFFEFEFFFFFFJzJzJvJvJzJzJz Q00FE80FE;FE=FE:0FE=0FE>0FEJYJYJVJVJYJYJY Q1:<=;?@JzCzJvJvJzHzIz Q+;FE;FE5FE=FE5;FE;FE;FEJZEZJVJVJZJZJZ Q,996=694959J#J#J#J#J# QBFEFEFFEFEP:FEFEKFEFELFEFEJ#J#HzIzJ#J#J# QBFFFFFFFFF5FE5FEGFFFFKFFFFLFFFFJzEzHZJZHzJzJz Q,9FE9FE3539FE49FE59FEJZCZJZHZIZ Q+;;P!;;; JzJz S#3FE53FEJZIZ S"55 J"J"J"9"J"J"9"J"H"J" QEFE?FE8FEFEMFE?FEFE>FEFEFFEJ" W%FEJ"J"J"J"J"J" QEFF?FF$;$8$C%8"9%9'9" Q-FEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFE6FEFEFFFEFEFEFEFEFEFE5FEFFFEFEFEFEFE6FEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFEFEFEFEFEFEFEFEFFFEFEFEFEFFFEFEFEFEFEFEFFFEFEJ%C%J)=$J)8&J$<%J%>*9%D&:%<&9+C$=%8% Q-FFFFFFFFFEFFFFFE8FEFFFFFEFEFFFFFEFEFFFF;FEFFFFFEFEFFFFFEFEFFFFFFFE5FEFFFFFEFFFFFE4FEFFFFFFFEFFFFFFFEFFFFFFFEFEFFFFFFFEFFFFFFFEFEFFFFFEFEFFFFFFFEFEFFFFFFFFFEFFFFFFFEFEFFFFFEFFFFFEFFFEFFFFJ#B"J"9"@"J"9";"J"=#8#J"9"<#G">"?"<#J"?" Q0FEFFFF;FFFFFF=FFFFFF9FFFEFFFFFE?FFFFFEFFFFFFFFFEFF6FFFFJ#J$J$J$F$@$J& Q/FEFFP%FEFEFEO:FEFEFE7FEFEFEFEFEFEFEFEFECFFFEFFFEFFJ#J%J%J%E%@% Q.FEFFP%FEFFFFFFO9FEFFFFFF6FEFFFFFFFEFFFFFFFFFFFFFFJ#?"J#8#J"I#J#>"J$ Q-FEFFFEP>FFFEFEFF6FEFFFEKFFFEFECFFFEFFJ%9%J'J%J%B'8%D'9%<'8+J$ Q.FEFEFEFEFFFEFEFFOJFFFEFEFEFFFE=FFFEFEFF4FFFEFEFFFFFEFEFEFFFEFFFEFEFEFFFEFEFEFFFEFEFEFEFFFFFEFEFEFFFEFFFEFEFEFFFFFEFEFEFF>FFFEFEJP:%9"9"9"I"9"9"9"8"J"9"9"9"9"9PI";":#J%9"8";P9$A"9P9$:"9P9$8$C";"9"9":#8# Q-FFFFFFFFFFFFFFFFFFFFFFFF5FFFFFFFFFFFFFFFFFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFJ" W)FEJ"J# UFFFO0FFFF J$ W>FFFFFF Jz W8/FEJX W9 FEUMFEH& FEFFFEFFFEH&J" FFFEFFFEFF>FFI%J">Z FFFEFFFE=FFUMJ$J" 4FFFEFF\051.) 389.88 345.33 T (No painting should be done outside the intersection of the object\325) 72 332.33 T (s rect \050i.e.) 332.95 332.33 T 2 F (XV_RECT) 374.85 332.33 T 1 F (\051 and the rectangles listed in) 416.83 332.33 T 4 F 0.06 (xr) 72 319.33 P 0.06 (ects) 79.96 319.33 P 1 F 0.06 (. The Xlib function) 95.5 319.33 P 4 F 0.06 (XSetClipRectangles\050\051) 174.37 319.33 P 1 F 0.06 ( does this exact function. The reason for this restriction is that objects) 260.42 319.33 P (may overlap. Painting regardless of the clipping rectangles will upset the visual stacking order) 72 306.33 T (.) 448.41 306.33 T -0.24 (If the object has any children, these must be painted after the object has painted itself so the children will appear to be) 72 288.33 P 0.09 (unaf) 72 275.33 P 0.09 (fected. Usually the paint callback will call) 89.58 275.33 P 4 F 0.09 (r) 259.92 275.33 P 0.09 (ectobj_paint_childr) 263.44 275.33 P 0.09 (en\050\051) 341.92 275.33 P 1 F 0.09 (, a convenience function that iterates through) 358.01 275.33 P (a rectobj\325) 72 262.33 T (s children and paints each child that clips against the) 109.47 262.33 T 4 F (xr) 322.1 262.33 T (ects) 330.06 262.33 T 1 F (.) 345.6 262.33 T 0 12 Q (The Map Event Callback) 72 233 T 1 10 Q (The events that are received by a canvas_shell need to be processed to determine which rectobj they fall on. This) 72 212.33 T (processing would be trivial if all rectobjs are rectangular) 72 199.33 T (, but some will not be. A slice of a pie chart or a line with) 297.54 199.33 T (input gravity are good examples of this. Although a rectangular bounding box could be speci\336ed, they may have) 72 186.33 T -0.31 (sensitive areas that aren\325) 72 173.33 P -0.31 (t rectangular) 169.4 173.33 P -0.31 (. T) 218.77 173.33 P -0.31 (o allow events to be sent to appropriately to all objects, a callback is needed to) 228.86 173.33 P (see if the event maps to a rectobj. This function has the following form:) 72 160.33 T 2 9 Q (Rectobj \050*rectobj_map_event_proc\051\050rectobj, event\051) 108 148 T (Rectobj) 144 137 T (rectobj;) 216 137 T (Event) 144 126 T (*event;) 216 126 T 1 10 Q (If the) 72 109.33 T 4 F (event_x\050\051) 95.87 109.33 T 1 F ( and) 133.05 109.33 T 4 F (event_y\050\051) 152.48 109.33 T 1 F ( of the event touch the) 189.65 109.33 T 4 F (r) 281.26 109.33 T (ectobj) 284.77 109.33 T 1 F (, then) 309.2 109.33 T 4 F (r) 333.91 109.33 T (ectobj) 337.42 109.33 T 1 F ( should be returned. If not,) 361.85 109.33 T 2 F (NULL) 470.66 109.33 T 1 F ( should be) 494.65 109.33 T (returned. If the object has children, these should be checked in reverse order that they were painted in. \050The last) 72 96.33 T (object painted appears on top, so it should be the \336rst that is checked.\051 For convenience, r) 72 83.33 T 4 F (ectobj_map_event_pr) 429.43 83.33 T (oc\050\051) 515.67 83.33 T 72 72 540 720 C 103.5 616 508.5 657 C 321.74 625.17 396.17 645.45 R 0 X 0 K V 0.5 H 2 Z N 319.33 627.55 393.75 647.83 R 7 X V 0 X N 0 10 Q (Rectobj) 340.81 632.86 T 218.24 625.17 292.67 645.45 R V N 215.83 627.55 290.25 647.83 R 7 X V 0 X N (XV) 221.29 632.86 T (iew Generic) 234.45 632.86 T 106 618.17 506 654.83 R N 307.38 639.81 318.92 636.5 307.38 633.19 308.58 636.5 4 Y V 292.92 636.5 308.58 636.5 2 L N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "32" 7 %%Page: "31" 7 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (31) 531.11 37.99 T 1 10 Q -0.13 (There may be other uses for this callback than noti\336cation of position changes. Y) 72 713.33 P -0.13 (ou may wish to update other objects) 394.07 713.33 P (while the user is dragging the grip around. One could even imagine starting a drag and drop operation if the user) 72 700.33 T (exceeds the bounds of the window) 72 687.33 T (.) 209.3 687.33 T (T) 72 669.33 T (o get animation while the grip is being moved, all you need to do is set the) 77.41 669.33 T 2 F (GRIP_RUBBER_STYLE) 377.78 669.33 T 1 F ( attribute. By) 479.73 669.33 T (default, there is no animation while the grip is moving, but if you set this attribute, the movement is animated with) 72 656.33 T (xor lines. The possible values are listed in the appendix. While the mouse is being moved, the position of the grip at) 72 643.33 T (the beginning of the drag can be retrieved with) 72 630.33 T 2 F (GRIP_BTN_DOWN_X) 261.58 630.33 T 1 F ( and) 351.53 630.33 T 2 F (GRIP_BTN_DOWN_Y) 370.96 630.33 T 1 F (.) 459.62 630.33 T -0.24 (A callback is invoked when the user releases the mouse button. This function is speci\336ed by the) 72 612.33 P 2 F -0.57 (GRIP_DONE_PROC) 453.79 612.33 P 1 F (attribute, and has the following form:) 72 599.33 T 2 9 Q (void grip_done_proc\050paint_window, event, canvas_shell, grip\051) 108 587 T (Xv_window) 144 576 T (paint_window;) 216 576 T (Event) 144 565 T (*event;) 216 565 T (Canvas_shell) 144 554 T (canvas_shell;) 216 554 T (Grip) 144 543 T (grip;) 216 543 T FMENDPAGE %%EndPage: "31" 6 %%Page: "30" 6 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (30) 531.11 37.99 T 3 12 Q (Grip) 72 712 T 1 10 Q (The Grip extension is subclassed from the Drawimage extension and inherits its attributes and features. The) 72 691.33 T (following \336gure shows this hierarchy) 72 678.33 T (.) 220.7 678.33 T 4 F (Figure 36: Grip class hierarchy) 241.88 604.33 T 1 F (The grip rectobj is an image that the user may drag within a canvas_shell. The movement of the grip can be) 72 582.33 T (constrained by limits and direction. While the grip is being moved it can be animated with marker lines,) 72 569.33 T (rubberbanding region, and crosshairs.) 72 556.33 T -0.19 (There are two ways to constrain the limits and direction of movement for a grip. The \336rst method is simple because it) 72 538.33 P (uses attributes.) 72 525.33 T 2 F (GRIP_SLIDE_X) 133.91 525.33 T 1 F ( and) 205.87 525.33 T 2 F (GRIP_SLIDE_Y) 225.3 525.33 T 1 F ( specify that the grip image may or may not be moved) 297.26 525.33 T -0.31 (horizontally and vertically) 72 512.33 P -0.31 (.) 176.22 512.33 P 2 F -0.73 (GRIP_MIN_X) 180.91 512.33 P 1 F -0.31 (,) 240.88 512.33 P 2 F -0.73 (GRIP_MAX_X) 245.57 512.33 P 1 F -0.31 (,) 305.54 512.33 P 2 F -0.73 (GRIP_MIN_Y) 310.23 512.33 P 1 F -0.31 (, and) 368.91 512.33 P 2 F -0.73 (GRIP_MAX_Y) 390.22 512.33 P 1 F -0.31 ( specify the limits that) 450.19 512.33 P (a grip can be moved. \050These are currently speci\336ed with the origin relative to the canvas_shell.\051 Additionally) 72 499.33 T (, grip) 507.14 499.33 T (movement can be restricted to the bounds of its owner \050by setting) 72 486.33 T 2 F (GRIP_EXCEED_PARENT_DIMS) 336.27 486.33 T 1 F ( to) 474.19 486.33 T 2 F (TRUE) 486.96 486.33 T 1 F (\051. Y) 510.95 486.33 T (ou) 525.49 486.33 T (can use all of these constraints together) 72 473.33 T (, but the most restrictive constraint is always applied.) 228.7 473.33 T (The second method of controlling the movement of a grip is a little more dif) 72 455.33 T (\336cult to use, but of) 376.62 455.33 T (fers more \337exibility) 451.68 455.33 T (.) 530.43 455.33 T (Each time the user moves the grip, a callback speci\336ed by) 72 442.33 T 2 F (GRIP_MOVE_PROC) 306.27 442.33 T 1 F ( is called. The ar) 390.23 442.33 T (guments to the) 456.38 442.33 T -0.35 (callback include the position that the object is to be moved to. The application callback may override the new position) 72 429.33 P 0.07 (of the object, relative to the position of the mouse. Figure 37 provides an example callback that makes the grip move) 72 416.33 P (in a semicircular path. When the grip is moved, the callback calculates a new position of the object and sets these) 72 403.33 T (values in the) 72 390.33 T 4 F (new_x) 125.02 390.33 T 1 F ( and) 150.56 390.33 T 4 F (new_y) 169.99 390.33 T 1 F ( ar) 195.52 390.33 T (guments. This callback should return) 205.61 390.33 T 2 F (FALSE) 356.06 390.33 T 1 F ( if the object is not to be moved in) 386.05 390.33 T (response to the mouse movement.) 72 377.33 T 4 F (Figure 37: A callback to make grip move in an arc) 204.41 91.62 T 72 72 540 720 C 103.5 616 508.5 657 C 222.61 625.17 297.03 645.45 R 0 X 0 K V 0.5 H 2 Z N 220.19 627.55 294.61 647.83 R 7 X V 0 X N 0 10 Q (Rectobj) 241.67 632.86 T 125.16 625.17 199.58 645.45 R V N 122.75 627.55 197.17 647.83 R 7 X V 0 X N 320.05 625.17 394.47 645.45 R V N 317.64 627.55 392.06 647.83 R 7 X V 0 X N (XV) 128.21 632.86 T (iew Generic) 141.36 632.86 T (Drawimage) 330.79 632.86 T 106 618.17 506 654.83 R N 417.49 625.17 491.92 645.45 R V N 415.08 627.55 489.5 647.83 R 7 X V 0 X N (Grip) 444.06 632.86 T 403.46 639.81 415 636.5 403.46 633.19 404.67 636.5 4 Y V 393.33 636.5 404.67 636.5 2 L N 305.8 639.81 317.33 636.5 305.8 633.19 307 636.5 4 Y V 295.67 636.5 307 636.5 2 L N 208.63 639.81 220.17 636.5 208.63 633.19 209.84 636.5 4 Y V 198.5 636.5 209.84 636.5 2 L N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 80.71 103.29 531.29 356 C 90.29 108.57 521.71 350.71 R 7 X 0 K V 2 9 Q 0 X (int) 126.29 333.71 T (limit_move_proc\050paint_window, event, canvas_shell, grip, new_x, new_y\051) 126.29 322.71 T (Xv_window) 162.29 311.71 T (paint_window;) 234.29 311.71 T (Event) 162.29 300.71 T (*event;) 234.29 300.71 T (Canvas_shell) 162.29 289.71 T (canvas_shell;) 234.29 289.71 T (Grip) 162.29 278.72 T (grip;) 234.29 278.72 T (short) 162.29 267.72 T (*new_x;) 234.29 267.72 T (short) 162.29 256.72 T (*new_y;) 234.29 256.72 T ({) 126.29 245.72 T (int tmp;) 162.29 234.72 T (tmp = *new_x - START_Y;) 162.29 212.72 T (tmp = MAX\0500, tmp\051;) 162.29 201.72 T (tmp = MIN\050MAX_X, tmp\051;) 162.29 190.72 T (/* *new_x is now in range of 0..100 */) 280.92 190.72 T (*new_y = \05050 * sin\050\050double\051\050tmp * M_PI\051/MAX_X\051\051 + START_Y ;) 162.29 168.72 T (*new_x = tmp + START_X;) 162.29 157.72 T (return TRUE;) 162.29 135.72 T (}) 126.29 124.72 T 83.86 103.93 528.14 355.36 R 0.5 H 2 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "30" 5 %%Page: "29" 5 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (29) 531.11 37.99 T 3 12 Q (Drawtext) 72 712 T 1 10 Q (The Drawtext extension is subclassed from the Rectobj extension and inherits its attributes and features. The) 72 691.33 T (following \336gure shows this hierarchy) 72 678.33 T (.) 220.7 678.33 T 4 F (Figure 34: Drawtext class hierarchy) 232.71 604.33 T 1 F (A drawtext object displays a string on a canvas_shell. Each drawtext can also have its own font. For example, the) 72 582.33 T (following code fragment creates a blue drawtext object saying \322Hello W) 72 569.33 T (orld\323 in) 360.97 569.33 T 4 F (my_font) 394.28 569.33 T 1 F (:) 426.48 569.33 T 2 9 Q (xv_create\050 owner, DRAWTEXT,) 108 557 T (DRAWTEXT_STRING, \322Hello World\323,) 144 546 T (DRAWTEXT_FONT, my_font,) 144 535 T (RECTOBJ_FOREGROUND_COLOR, BLUE,) 144 524 T (NULL\051;) 144 513 T 1 10 Q (The string speci\336ed by) 72 496.33 T 2 F (DRAWTEXT_STRING) 165.83 496.33 T 1 F ( is copied into allocated memory) 255.78 496.33 T (. The memory is reallocated when the) 385.88 496.33 T (string is changed, and freed when the object is destroyed. Alternately) 72 483.33 T (, you may use) 347.81 483.33 T 2 F (DRAWTEXT_STRING_PTR) 405.83 483.33 T 1 F (which speci\336es a string but does not allocate memory) 72 470.33 T (. The advantage of this attribute is that it can be more ef) 285.65 470.33 T (\336cient) 508.92 470.33 T (with strings that are statically allocated and do not change.) 72 457.33 T (The Drawtext calculates its minimum width and height from the string and the font that it uses. However you may) 72 439.33 T (override the width and height by directly setting the) 72 426.33 T 2 F (XV_WIDTH) 281.58 426.33 T 1 F ( and) 329.56 426.33 T 2 F (XV_HEIGHT) 348.99 426.33 T 1 F (. The attribute) 402.22 426.33 T 2 F -0.43 (DRAWTEXT_LENGTH) 72 413.33 P 1 F -0.18 ( also speci\336es the object width, but in numbers of characters. It is the recommended method of) 161.95 413.33 P -0.14 (specifying space, especially for editable drawtext objects. If the width that you specify is lar) 72 400.33 P -0.14 (ger than the string width,) 437.97 400.33 P (the string is justi\336ed within the space with) 72 387.33 T 2 F (DRAWTEXT_JUSTIFY) 243.58 387.33 T 1 F (. Figure 35 illustrates the ef) 338.23 387.33 T (fect of this attribute.) 447.98 387.33 T -0.19 (The boxes on the left indicate the bounds of the drawtext and the position of the text. The attribute names on the right) 72 374.33 P (indicate the value that) 72 361.33 T 2 F (DRAWTEXT_JUSTIFY) 162.49 361.33 T 1 F ( should be set to.) 258.44 361.33 T 4 F (Figure 35: Drawtext justification attributes) 219.1 177.05 T 1 F (When the font or string is changed the size of the drawtext may shrink or expand accordingly) 72 155.05 T (. If you directly set the) 444.4 155.05 T 2 F (XV_WIDTH) 72 142.05 T 1 F ( and) 119.97 142.05 T 2 F (XV_HEIGHT) 139.4 142.05 T 1 F (, the drawtext will never be smaller than the size you speci\336ed. However) 192.63 142.05 T (, the prefered) 483.12 142.05 T (way to set the size of a drawtext is with) 72 129.05 T 2 F (DRAWTEXT_LENGTH) 232.44 129.05 T 1 F (, especially if the object is to be editable.) 322.39 129.05 T (Like many other SlingShot objects, a drawtext object can be selected, can have a double click procedure, and can be) 72 111.05 T (the source and tar) 72 98.05 T (get of a drag and drop operation. The drawtext can also be made editable by setting) 142.59 98.05 T 2 F (DRAWTEXT_EDITABLE) 72 85.05 T 1 F ( to) 173.94 85.05 T 2 F (TRUE) 186.72 85.05 T 1 F (. The user can edit the value of the string by clicking, typing, and pressing return.) 210.7 85.05 T 72 72 540 720 C 103.5 616 508.5 657 C 269.99 625.33 344.42 645.62 R 0 X 0 K V 0.5 H 2 Z N 267.58 627.71 342 648 R 7 X V 0 X N 0 10 Q (Rectobj) 289.06 633.02 T 166.49 625.33 240.92 645.62 R V N 164.08 627.71 238.5 648 R 7 X V 0 X N 373.49 625.33 447.92 645.62 R V N 371.08 627.71 445.5 648 R 7 X V 0 X N (XV) 169.54 633.02 T (iew Generic) 182.7 633.02 T (Drawtext) 389.79 633.02 T 106 618.17 506 654.83 R N 359.13 639.97 370.67 636.67 359.13 633.36 360.33 636.67 4 Y V 344.67 636.67 360.33 636.67 2 L N 255.63 639.97 267.17 636.67 255.63 633.36 256.83 636.67 4 Y V 241.17 636.67 256.83 636.67 2 L N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 89.64 188.71 522.36 340 C 299.76 281.06 481.19 308.2 R 7 X 0 K V 0.5 H 2 Z 3 X N 1 16 Q 0 X (Sample) 366.49 289.17 T 299.76 203.06 481.19 230.2 R 7 X V 3 X N 0 X (Sample) 431.03 211.18 T 299.76 242.06 481.19 269.2 R 7 X V 3 X N 0 X (Sample) 299.99 250.2 T 2 9 Q (DRAWTEXT_JUSTIFY_CENTER) 139.62 291.82 T (DRAWTEXT_JUSTIFY_LEFT) 139.62 252.82 T (DRAWTEXT_JUSTIFY_RIGHT) 139.62 213.82 T 1 10 Q (Drawtext layout) 299.76 318.84 T 2 9 Q (DRAWTEXT_JUSTIFY) 139.62 318.84 T 1 10 Q (value) 231.29 318.84 T 300.43 314.93 480.44 315 R 7 X V 0 X N 139.62 314.93 264.18 315 R 7 X V 0 X N 109.57 195.07 502.43 333.64 R N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "29" 4 %%Page: "28" 4 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (28) 531.11 37.99 T 3 12 Q (Drawrect) 72 712 T 1 10 Q (The Drawrect extension is subclassed from the Rectobj extension and inherits its attributes and features. The) 72 691.33 T (following \336gure shows the class hierarchy) 72 678.33 T (.) 240.4 678.33 T 4 F (Figure 32: Drawrect class hierarchy) 232.16 604.33 T 1 F -0.1 (The Drawrect extension is useful for grouping children because it paints a border) 72 582.33 P -0.1 (. If the drawrect is in a canvas_shell) 394.49 582.33 P (with a control cms it uses 3d colors, as shown in Figure 33.) 72 569.33 T (The Drawrect extension handles its children exactly as the Bag extension does and the) 72 551.33 T 2 F (BAG_ANCHORED) 419.52 551.33 T 1 F ( and) 491.48 551.33 T 2 F (BAG_AUTO_SHRINK) 72 538.33 T 1 F ( attributes can be used on a drawrect. The drawrect uses three attributes that are to be used in) 161.95 538.33 T (place of) 72 525.33 T 2 F (RECTOBJ_BORDER) 106.41 525.33 T 1 F (.) 190.37 525.33 T 2 F (DRAWRECT_BORDER1) 195.36 525.33 T 1 F ( is the thickness of the area between the outside edges of the) 291.31 525.33 T (drawrect and beginning of the painted border) 72 512.33 T (.) 251.86 512.33 T 2 F (DRAWRECT_BORDER2) 256.86 512.33 T 1 F ( is the thickness of the painted border) 352.81 512.33 T (.) 501.87 512.33 T 2 F (DRAWRECT_BORDER3) 72 499.33 T 1 F ( is the distance between painted border and the children.) 167.95 499.33 T 2 F (RECTOBJ_BORDER) 395.27 499.33 T 1 F ( is set to the) 479.23 499.33 T (sum of these three attributes.) 72 486.33 T 4 F (Figure 33: Normal and highlighted drawrects) 213.97 294.9 T 72 72 540 720 C 103.5 616 508.5 657 C 269.99 625.33 344.42 645.62 R 0 X 0 K V 0.5 H 2 Z N 267.58 627.71 342 648 R 7 X V 0 X N 0 10 Q (Rectobj) 289.06 633.02 T 166.49 625.33 240.92 645.62 R V N 164.08 627.71 238.5 648 R 7 X V 0 X N 373.49 625.33 447.92 645.62 R V N 371.08 627.71 445.5 648 R 7 X V 0 X N (XV) 169.54 633.02 T (iew Generic) 182.7 633.02 T (Drawrect) 389.51 633.02 T 106 618.17 506 654.83 R N 359.13 639.97 370.67 636.67 359.13 633.36 360.33 636.67 4 Y V 344.67 636.67 360.33 636.67 2 L N 255.63 639.97 267.17 636.67 255.63 633.36 256.83 636.67 4 Y V 241.17 636.67 256.83 636.67 2 L N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 106.43 306.57 505.57 465 C 0 X 0 K %%BeginBinary: 2848 433 203 279.43 120.14 0 166.29 325.71 /red < 06000000000000000000000000000000D41804003CECFFEF44ECFFEF66ECFFEF FFFFFFFF0000000000000000000000005A040500330000000000000027997F40 D4180400F8EBFFEFD40964EFFFFFFFFF01000000A81804000600000000000000 0000000000000000DC180400D4EBFFEFD8EBFFEF600405005C0B050000000000 00000000588C73EF088E73EF048E73EFFE8D73EF000000000000000000000000 30EBFFEFFFFFFF7F000000800000000090E861EFF0EAFFEF00000000FFFFFF7F E1DD63EF9CEBFFEF6604050048ECFFEF7851040040ECFFEF7851040064000000 0000000040ECFFEF0100000038ECFFEF3CECFFEF0000000000000078004386A1 > store /green < 00000000D36D1E43882B04000CEDFFEFA818040070EDFFEF4C0000002E353634 000000000000000000000000B07104006CEDFFEF70EDFFEF0600000000000000 030000000000000000EDFFEF670405005C0B0500000000000000000000000000 882B04000CEDFFEF0000000000107D404C8E73EF2E000000730000002E000000 00000000000000000400000000400400FFFFFF0160ECFFEF66ECFFEFF9FFFF7F 3500000000000000F8EBFFEFF8ECFFEFE0EBFFEF3CECFFEF5CAE010048ECFFEF D4910100F0EBFFEF61040500000000000000000000107D40D418040060ECFFEF D40964EF37000000010000003700000000000000000000000000009B0056ADCF > store /blue < 0F00000088CB040002000000FFFFFFFF8C470400FFFFFFFF7CEDFFEF00000000 F81C040000000000A47C010080EDFFEFE47A010080EDFFEF0A00000070000000 7000000000000000000000000100000020010000440100000B00000009000000 010000000F000000FC000000282B0400D36D1E430400000000000000882B0400 401C0400E04104000CEDFFEF54EDFFEF0481010010EDFFEF58CB040002000000 FFFFFFFF8C4704000100000070EDFFEF141D04003F551B43FFFFFFFF00280400 0000000000000000FFFFFF7FE1DD63EF6CEDFFEFE1DD63EF64EDFFEF01000000 88510400FCECFFEFACECFFEF00000000E48D0100B0ECFFEF34BD01980054AACB > store BEGINBITMAPCOLORc 7t"Jt" FEFDVLFEFDAz VKFE :'J' FDFDFDFDFDFDVMFDFDFDFDFDFD;':YJ( FEFEFEFEFEFEV9FEFEFEFEFEFEFFD"y" FFFEFDJ$J" R3FCFCFCO!FCJ$ R4FEFEFCHrJ#9%9$9"9"9%9$;$8& FDQKFEFCFCFEFCFCFCFCFCFCFCFCFEFCFCFCFCFCFCFCFCFCFCFCFCFC7$E'J$8&:"<$8&9%8&J$ FDFDFDFBFBFBFBFBFFR#FCFEFEFCFEFEFEFCFCFCFEFEFCFEFEFEFCFCFEFEFEFEFCFEFEFEQBFDFDFD7%C#9#J":"E"A#J$ FFFEFEFEFEFDFFFER#FEFEFEFCFEQKFEFEFEJ$H$ RBFCFCFCFCFCFCI&J%9&@% FEFDFBFFFER)FCFEFEFEFEFCFEFCFEFEFEFEFEJ#J"8# R6FCFEBFCFEFCJ$J$@'E&9%9% 4FEFFFEQKFCFCFEFEFCFCFCFEFCFEFCFCFCFEFEFCFCFCFEFCFCFCJ"J$;"<&8$:"<$;$:$ 5FEQKFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE D"y" FEFDFEEy FE ;z W)FC