%! %%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 12 FMDOCUMENT 0 0 /Helvetica FMFONTDEFINE 1 0 /Times-Italic FMFONTDEFINE 2 0 /Times-Roman FMFONTDEFINE 3 0 /Courier FMFONTDEFINE 4 0 /Helvetica-Bold FMFONTDEFINE 5 0 /Courier-Bold 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: "24" 14 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (24) 531.11 37.99 T 1 10 Q (Figure 25: The map event callback for the custom display list operation) 162.34 435.62 T 2 F (Figure 25 shows the map event function,) 72 413.62 T 1 F (CustomStringMapEvent\050\051) 237.45 413.62 T 2 F (, used by our example custom display list) 340.16 413.62 T (operation. This function converts the virtual coordinates to X coordinates, and uses the XV) 72 400.62 T (iew macro) 435.31 400.62 T 1 F (r) 72 387.62 T (ect_includesr) 75.52 387.62 T (ect\050\051) 129 387.62 T 2 F ( to see if the event occured on the text. The return value indicates if the event was on the image) 147.31 387.62 T (that was rendered, in this case, on the text.) 72 374.62 T (Finally) 72 356.62 T (, the attribute) 99.68 356.62 T 3 F (DRAWAREA_MAP_EVENTS) 155.19 356.62 T 2 F ( controls one other aspect of the event mapping process for a) 269.13 356.62 T (drawarea. When set to the default value,) 72 343.62 T 3 F (DRAWAREA_MAP_ANY) 235.47 343.62 T 2 F (, all events falling in the rectangular region of a) 330.13 343.62 T 0.04 (drawarea are considered to map to the drawarea, and the display list event mapping callbacks are not invoked. When) 72 330.62 P 0.09 (set to) 72 317.62 P 3 F -0.22 (DRAWAREA_MAP_FIRST) 95.69 317.62 P 2 F 0.09 (, the display list is traversed until one of the map functions returns) 202.89 317.62 P 3 F -0.22 (TRUE) 468.73 317.62 P 2 F 0.09 (, indicating) 492.71 317.62 P (that the event mapped to the drawarea. When set to) 72 304.62 T 3 F (DRAWAREA_MAP_LAST) 279.34 304.62 T 2 F (, all the map functions are called) 380.54 304.62 T (regardless of multiple true return values. By combining) 72 291.62 T 3 F (DRAWAREA_MAP_LAST) 296.02 291.62 T 2 F ( and) 397.96 291.62 T 1 F (VSetMarkKey\050\051) 417.39 291.62 T 2 F (, you can \336nd) 479.56 291.62 T (out what portion of a display list mapped to an event, even with overlapping rendering.) 72 278.62 T 72 72 540 720 C 78.57 447.29 533.43 710 C 81.36 450.79 530.64 706.5 R 0.5 H 2 Z 0 X 0 K N 83.86 451.86 528.14 702.57 R 7 X V 3 9 Q 0 X (int CustomStringMapEvent\050dl_arg, ptr, event\051) 119.86 685.57 T (Display_list_arg) 155.86 674.57 T (*dl_arg;) 263.86 674.57 T (CustomString) 155.86 663.57 T (*ptr;) 263.86 663.57 T (Event) 155.86 652.57 T (*event;) 263.86 652.57 T ({) 119.86 641.57 T (Rect) 155.86 630.57 T (rect;) 191.86 630.57 T (rect.r_width = XTextWidth\050dl_arg->font_info,) 155.86 608.57 T (ptr->string, ptr->string_length\051;) 227.86 597.57 T (rect.r_height = dl_arg->font_info->ascent +) 155.86 586.57 T (dl_arg->font_info->descent;) 227.86 575.57 T (rect.r_left = dl_convert_rx\050dl_arg, ptr->virtual_x\051 - rect.r_width/2;) 155.86 553.57 T (rect.r_top = dl_convert_ry\050dl_arg, ptr->virtual_y\051 -) 155.86 542.57 T (\050dl_arg->font_info->ascent + dl_arg->font_info->descent\051 / 2;) 191.86 531.57 T (if\050rect_includespoint\050&rect, event_x\050event\051, event_y\050event\051\051\051) 155.86 509.57 T (return TRUE;) 191.86 498.57 T -0.26 (/* The user clicked on this text. */) 335.86 498.57 P (else) 155.86 487.57 T (return FALSE;) 191.86 476.57 T (/* Did not click on this text. */) 335.86 476.57 T (}) 119.86 465.57 T 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "24" 13 %%Page: "23" 13 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (23) 531.11 37.99 T 1 10 Q (Figure 24: The rendering callback for the custom display list operation) 163.03 434.19 T 2 F (Notice that no clipping is done in this rendering function. The) 72 412.19 T 1 F (gc) 321.84 412.19 T 2 F ( in the Display_list_ar) 331.28 412.19 T (g is guaranteed to have the) 419.66 412.19 T (proper clip rectangle so that the X server will not paint outside the bounds of the drawarea. In some situations, this) 72 399.19 T (clipping may be inadequate because of limitations in the X coordinate space or because a lar) 72 386.19 T (ge number of server) 441.26 386.19 T (clipped entries in a display list. Y) 72 373.19 T (ou may decide to add clipping to a custom rendering function, trading of) 205.09 373.19 T (f) 494.99 373.19 T (implementation ef) 72 360.19 T (fort for the feature.) 144.83 360.19 T -0.21 (The \336nal callback for a custom display list operation detects if events map to the rendered parts of a drawarea. This is) 72 342.19 P (not to be confused with the) 72 329.19 T 3 F (RECTOBJ_MAP_EVENT_PROC) 183.04 329.19 T 2 F ( callback, which maps events to objects. This callback) 314.97 329.19 T (checks to see if the things painted by the display list map to an event. Like the rendering function, the event map) 72 316.19 T (callback is associated with the drawing operation when) 72 303.19 T 1 F (display_list_append\050\051) 295.17 303.19 T 2 F ( installs the operation into the display) 382.34 303.19 T (list. Also like the rendering function, the display list is traversed from the beginning to the end to detect if an event) 72 290.19 T (maps to the drawarea.) 72 277.19 T 72 72 540 720 C 93.93 445.86 518.07 710 C 94.93 458.29 523.5 702.21 R 7 X 0 K V 3 9 Q 0 X (void CustomStringRender\050dl_arg, ptr\051) 130.93 685.21 T (Display_list_arg) 166.93 674.21 T (*dl_arg;) 274.93 674.21 T (CustomString) 166.93 663.21 T (*ptr;) 274.93 663.21 T ({) 130.93 652.21 T (int) 166.93 641.21 T (x, y;) 202.93 641.21 T (int) 166.93 630.21 T (center_x, center_y;) 202.93 630.21 T (x = dl_convert_rx\050dl_arg, ptr->virtual_x\051;) 166.93 608.21 T (y = dl_convert_ry\050dl_arg, ptr->virtual_y\051;) 166.93 597.21 T (center_x = x - XTextWidth\050dl_arg->font_info,) 166.93 575.21 T (ptr->string, ptr->string_length\051/2;) 238.93 564.21 T (center_y = y + dl_arg->font_info->ascent -) 166.93 553.21 T (\050dl_arg->font_info->ascent + dl_arg->font_info->descent\051/2;) 202.93 542.21 T (XDrawString\050dl_arg->dpy, dl_arg->win_xid, dl_arg->gc,) 166.93 520.21 T (center_x, center_y,) 202.93 509.21 T (ptr->string,) 202.93 498.21 T (ptr->string_length\051;) 202.93 487.21 T (}) 130.93 476.21 T 95.29 452.14 516.71 706.14 R 0.5 H 2 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "23" 12 %%Page: "22" 12 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (22) 531.11 37.99 T 2 10 Q 0.06 (familiar with. In particular) 72 713.33 P 0.06 (, rendering functions need the) 177.46 713.33 P 1 F 0.06 (dpy) 298.75 713.33 P 2 F 0.06 (,) 312.53 713.33 P 1 F 0.06 (win_xid) 317.47 713.33 P 2 F 0.06 (, and) 349.12 713.33 P 1 F 0.06 (gc) 370.93 713.33 P 2 F 0.06 ( \336elds to call Xlib. As the display list is) 380.37 713.33 P (traversed during a repaint, the) 72 700.33 T 1 F (gc) 194.12 700.33 T 2 F (,) 203.56 700.33 T 1 F (font) 208.55 700.33 T 2 F ( and) 224.11 700.33 T 1 F (font_info) 243.54 700.33 T 2 F ( \336elds are automatically updated. Rendering with the) 279.64 700.33 T 1 F (gc) 493.66 700.33 T 2 F ( will use) 503.09 700.33 T (the correct color) 72 687.33 T (, font, line style, etc.) 137.09 687.33 T 1 F (Figure 23: The Display_list_arg data structure) 211.47 407.33 T 2 F (Figure 24 shows the rendering callback function for the custom display list operation. This function is called to) 72 385.33 T 0.07 (repaint the drawarea as the display list is traversed. The ar) 72 372.33 P 0.07 (guments are a pointer to the) 303.4 372.33 P 1 F 0.07 (Display_list_ar) 416.78 372.33 P 0.07 (g) 478.6 372.33 P 2 F 0.07 (, as described) 483.6 372.33 P (above, and a pointer to the structure that was allocated in) 72 359.33 T 1 F (DrawCustomString\050\051) 302.38 359.33 T 2 F (. The function converts the virtual) 386.79 359.33 T (coordinates to X coordinates by using the macros) 72 346.33 T 1 F (dl_convert_rx) 271.86 346.33 T 2 F ( and) 327.93 346.33 T 1 F (dl_convert_ry) 347.36 346.33 T 2 F (. These macros take into account) 402.78 346.33 T (the transform speci\336ed by the programmable coordinate system. T) 72 333.33 T (o get the string all we need to do is call) 336.94 333.33 T (XDrawString\050\051 with the proper coordinates. The dimensions of the font, such as ascent and descent, are added after) 72 320.33 T (the conversion from the virtual coordinates because it is measured in X W) 72 307.33 T (indow coordinate dimensions.) 368.05 307.33 T 72 72 540 720 C 96.43 419 515.57 666 C 102.79 423.67 509.21 661.07 R 7 X 0 K V 3 9 Q 0 X (typedef struct {) 138.79 644.07 T (Drawarea) 174.79 633.07 T (drawarea;) 246.79 633.07 T (Canvas_shell) 174.79 622.07 T (canvas_shell;) 246.79 622.07 T (Rect) 174.79 611.07 T (rect;) 246.79 611.07 T (/* rect of drawarea */) 354.79 611.07 T (double) 174.79 600.07 T (x_m, x_b, y_m, y_b;) 246.79 600.07 T (/* interpolation */) 354.79 600.07 T (Xv_Font) 174.79 589.07 T (font;) 246.79 589.07 T (XFontStruct) 174.79 578.07 T (*font_info;) 246.79 578.07 T (void) 174.79 567.07 T (*assoc;) 246.79 567.07 T (/* client handle */) 354.79 567.07 T (Xv_opaque) 174.79 556.07 T (current_mark_key;) 246.79 556.07 T (/* following only set during rendering */) 174.79 534.07 T (Display) 174.79 523.07 T (*dpy;) 246.79 523.07 T (XID) 174.79 512.07 T (win_xid;) 246.79 512.07 T (GC) 174.79 501.07 T (gc;) 246.79 501.07 T (Cms) 174.79 490.07 T (cms;) 246.79 490.07 T (/* private f) 174.79 468.07 T (ields */) 239.49 468.07 T (int) 174.79 457.07 T (index;) 246.79 457.07 T (void) 174.79 446.07 T (*ext;) 246.79 446.07 T (} Display_list_arg;) 102.79 435.07 T 99.93 423 512.07 661.79 R 0.5 H 2 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "22" 11 %%Page: "21" 11 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (21) 531.11 37.99 T 2 10 Q (The \336rst step in creating a new drawing routine is to de\336ne a data structure for the information used to render and) 72 713.33 T (detect events. Figure 21 shows this data structure, note that the \336rst \336eld,) 72 700.33 T 1 F (cmd) 366.26 700.33 T 2 F (, is necessary and is used to link the) 382.91 700.33 T -0.27 (structure into the display list. The remaining \336elds in the structure are for use by our custom display list functions and) 72 687.33 P (describe the virtual coordinates and string.) 72 674.33 T 1 F (Figure 21: The data structure for a custom display list operation) 176.35 545.76 T 2 F -0.2 (The second step is to create a drawing command function that the application will use. Figure 22 shows this function,) 72 523.76 P (which allocates space in the display list by calling the display list function) 72 510.76 T 1 F (display_list_append\050\051) 370.99 510.76 T 2 F (. The \336rst ar) 458.16 510.76 T (gument) 506.83 510.76 T (to) 72 497.76 T 1 F (display_list_append\050\051) 82.27 497.76 T 2 F ( is the drawarea to draw into. The second ar) 169.45 497.76 T (gument,) 344.12 497.76 T 1 F (vector) 379.1 497.76 T (,) 402.97 497.76 T 2 F ( de\336nes the callback functions) 405.47 497.76 T (used to render and map events on the drawarea.) 72 484.76 T ( The last ar) 264.61 484.76 T (gument speci\336es the size needed to \336t the structure into) 309.12 484.76 T -0.32 (the display list. \050Y) 72 471.76 P -0.32 (ou may wish to check for) 143.88 471.76 P 3 F -0.78 (NULL) 245.75 471.76 P 2 F -0.32 ( return value here - which indicates that it was unable to allocate the) 269.74 471.76 P (needed memory) 72 458.76 T (.\051) 135.46 458.76 T 1 F (display_list_append\050\051) 143.79 458.76 T 2 F ( is like) 230.96 458.76 T 1 F (malloc\050\051) 260.12 458.76 T 2 F ( because it returns a memory address and should be) 293.98 458.76 T -0.23 (appropriately casted and initialized. In this example, we do not copy the string data into the display list so that we can) 72 445.76 P (optimize for constant strings. If the strings were not constant, this could be done simply by allocating the right) 72 432.76 T (amount of space \050basically by adding in) 72 419.76 T 1 F (strlen\050\051) 233.83 419.76 T 2 F ( to the third ar) 263.26 419.76 T (gument to) 319.7 419.76 T 1 F (display_list_append\050\051) 362.46 419.76 T 2 F (\051 and copying it.) 449.63 419.76 T 1 F (Figure 22: The drawing command for the custom display list operation) 163.58 123.33 T (CustomStringRender\050\051) 72 101.33 T 2 F ( is the callback that renders the custom display list operation. This function is called with) 162.5 101.33 T 0.04 (rendering context and scaling factors set up in the \336rst ar) 72 88.33 P 0.04 (gument. The structure of this ar) 298.5 88.33 P 0.04 (gument,) 424.15 88.33 P 1 F 0.04 (Display_list_ar) 459.09 88.33 P 0.04 (g) 520.92 88.33 P 2 F 0.04 (, is) 525.91 88.33 P 0.01 (shown in Figure 23. Of all the display list structures introduced so far) 72 75.33 P 0.01 (, this is the only one that you should need to be) 349.38 75.33 P 72 72 540 720 C 95.36 557.43 516.64 653 C 103.86 570.93 508.14 639.5 R 7 X 0 K V 3 9 Q 0 X (typedef struct {) 139.86 633.5 T (Display_list_cmd) 175.86 622.5 T (cmd;) 283.86 622.5 T (double) 175.86 611.5 T (virtual_x, virtual_y;) 283.86 611.5 T (int) 175.86 600.5 T (string_length;) 283.86 600.5 T (char) 175.86 589.5 T (*string;) 283.86 589.5 T (} CustomString;) 139.86 578.5 T 97.79 561.64 514.21 648.79 R 0.5 H 2 Z N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 86.07 135 525.93 398.43 C 93.14 140.28 518.86 388.86 R 7 X 0 K V 3 9 Q 0 X (void) 129.14 382.86 T (DrawCustomString\050drawarea, x, y, str\051) 165.14 382.86 T (Drawarea) 201.14 371.86 T (drawarea;) 273.14 371.86 T (double) 201.14 360.86 T (x, y;) 273.14 360.86 T (char) 201.14 349.86 T (*str;) 273.14 349.86 T ({) 129.14 338.86 T (CustomString) 165.14 327.86 T (*ptr;) 237.14 327.86 T (static Display_list_vec) 165.14 316.86 T (vector = {) 289.17 316.86 T (CustomStringRender,) 201.14 305.86 T (CustomStringMapEvent,) 201.14 294.86 T (NULL,) 201.14 283.86 T (};) 165.14 272.86 T (if\050!str\051) 165.14 250.86 T (return;) 201.14 239.86 T (ptr = \050CustomString*\051 display_list_append\050drawarea,) 165.14 228.86 T (&vector, sizeof\050CustomString\051\051;) 237.14 217.86 T (ptr->virtual_x = x;) 165.14 195.86 T (ptr->virtual_y = y;) 165.14 184.86 T (ptr->string_length = strlen\050str\051;) 165.14 173.86 T (ptr->string = str;) 165.14 162.86 T (}) 129.14 151.86 T 88.14 137.43 523.86 395.29 R 0.5 H 2 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "21" 10 %%Page: "20" 10 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (20) 531.11 37.99 T 1 10 Q (Figure 20: Setting the drawarea coordinate dimensions and drawing an circle) 149.15 539.9 T 2 F (When the drawing command function calls are made, the Xlib calls are not immediately made. Drawing commands) 72 517.9 T 0.05 (functions actually store the commands and their ar) 72 504.9 P 0.05 (guments away in a display list that can be replayed when a refresh) 273.3 504.9 P -0.21 (is needed. In some cases, the application may need to explicitly make the changes appear on the screen. The reason is) 72 491.9 P -0.13 (that the drawing commands do not go through xv_set, which knows how to repaint updated objects. T) 72 478.9 P -0.13 (o get the object) 476.69 478.9 P (to repaint completely) 72 465.9 T (, call) 156.29 465.9 T 1 F (r) 178.22 465.9 T (ectobj_r) 181.74 465.9 T (epaint_r) 214.68 465.9 T (ect\050\051) 248.18 465.9 T 2 F ( followed by) 266.49 465.9 T 1 F (r) 319.51 465.9 T (ectobj_\337ush_r) 323.03 465.9 T (epaint\050\051) 379.85 465.9 T 2 8 Q (2) 411.49 469.9 T 2 10 Q (. This strategy repaints the) 415.49 465.9 T (entire display list and handles any objects that may overlap the drawarea. This can be suboptimal if you just issued) 72 452.9 T 0.07 (only a few drawing commands and don\325) 72 439.9 P 0.07 (t have overlapping objects, so the drawarea provides a function,) 232.41 439.9 P 1 F 0.07 (VFlush\050\051) 489.33 439.9 P 2 F 0.07 (, to) 524.86 439.9 P (optimize this situation.) 72 426.9 T 1 F (VFlush\050\051) 165.85 426.9 T 2 F ( paints all drawing commands since the last repaint or the last) 201.38 426.9 T 1 F (VFlush\050\051) 450.1 426.9 T 2 F ( operation.) 485.63 426.9 T (The display list has a simple structure and use: it is not editable, all changes to it are appended to the end of the list,) 72 408.9 T (and it is always traversed \050when repainting and detecting events\051 in one direction. If changes need to be made) 72 395.9 T (somewhere in the middle of the display list, it should be cleared with) 72 382.9 T 1 F (VClear\050\051) 350.16 382.9 T 2 F ( and then rebuilt:) 385.69 382.9 T 3 9 Q (VClear\050 drawarea \051) 108 370.57 T 2 10 Q (This function deletes all drawing commands in the drawarea. After calling this, the application should restore the) 72 353.9 T (display list if any state is to remain after clearing.) 72 340.9 T (Drawarea objects are not opaque, so interesting interfaces can be created by overlapping several drawareas. For) 72 322.9 T -0.22 (example, imagine you decided to annotate a drawarea with textual labels, but you needed the ability to hide the labels) 72 309.9 P (on command. One approach would be to create two drawareas at the same position, dimensions, and coordinate) 72 296.9 T -0.13 (system. The \336rst drawarea could contain the drawing and the second could contain the labels. Simply by toggling the) 72 283.9 P 3 F (XV_SHOW) 72 270.91 T 2 F ( attribute on the drawarea, you could alternately hide and show the labels.) 113.98 270.91 T -0.12 (The drawarea can have event callbacks, such as double click procs. If the attribute) 72 252.91 P 3 F -0.29 (DRAWAREA_MAP_EVENTS) 401.15 252.91 P 2 F -0.12 ( is set) 515.09 252.91 P (to) 72 239.91 T 3 F (TRUE) 82.27 239.91 T 2 F (, an event will be checked against the entries in the display list to see if the drawarea is not opaque at that) 106.26 239.91 T (location) 72 226.91 T 2 8 Q (3) 104.2 230.91 T 2 10 Q (. If) 108.2 226.91 T 3 F (FALSE) 122.35 226.91 T 2 F (, all events that fall on the drawarea are assumed to be mapped to the drawarea.) 152.34 226.91 T 0 12 Q (Drawarea and the Display List) 72 197.57 T 2 10 Q (The functions supported by the drawarea are actually operations on a display list. This list is hidden from the) 72 176.91 T (programmer via the drawing commands but can be accessed directly) 72 163.91 T (. This feature is useful if you need to extend the) 345.3 163.91 T -0.2 (rendering capabilities of the drawarea, such as adding a spline for example. T) 72 150.91 P -0.2 (o understand the display list, let\325) 378.7 150.91 P -0.2 (s create) 507.65 150.91 P (a new display list function that draws text positioned by the string\325) 72 137.91 T (s center rather than the baseline of the font \050as is) 338.23 137.91 T (the case with VDrawString and DDrawString\051.) 72 124.91 T 72 102 540 117 C 81 115 225 115 2 L 0.5 H 2 Z 0 X 0 K N 0 0 612 792 C 2 8 Q 0 X 0 K 0.18 (2. These two function calls are actually made by the SlingShot packages when you do xv_set, so calling them in the application is un-) 90 96.67 P (necessary if you set an attribute that causes the drawarea to be repainted. The appendix has more detail on these two function calls.) 90 86.67 T (3. Currently only DDrawString, DDrawImage, DFillRectangle, and DFillPoly support event detection.) 90 76.67 T 72 72 540 720 C 73.93 551.57 538.07 710 C 75 547 535 708.43 R 7 X 0 K V 3 9 Q 0 X (double left = 0.0;) 111 691.43 T (double right = 1.0;) 111 680.43 T (double top = 0.0;) 111 669.43 T (double bottom = 1.0;) 111 658.43 T (drawarea1 = \050Drawarea\051 xv_create\050 owner, DRAWAREA,) 111 636.43 T (DRAWAREA_LEFT_X, &left,) 183 625.43 T (DRAWAREA_RIGHT_X, &right,) 183 614.43 T (DRAWAREA_UPPER_Y, &top,) 183 603.43 T (DRAWAREA_LOWER_Y, &bottom,) 183 592.43 T (NULL \051;) 183 581.43 T (DDrawArc\050 drawarea1, 0.0, 0.0, .25, .25, 0, 360*64 \051;) 111 570.43 T 78.5 558.64 533.5 705.79 R 0.5 H 0 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "20" 9 %%Page: "19" 9 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (19) 531.11 37.99 T 4 12 Q (Drawarea) 72 712 T 2 10 Q (The Drawarea 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 1 F (Figure 18: Drawarea class hierarchy) 230.77 604.33 T 2 F -0.35 (The Drawarea package provides an abstraction for rendering by using drawing commands, such as \322draw a rectangle\323) 72 582.33 P (and \322draw a \336lled arc\323. These are similar to Xlib routines, but have some advantages: rendering is done on a virtual) 72 569.33 T -0.27 (coordinate system, refresh events are handled automatically) 72 556.33 P -0.27 (, and the API is simpler because there are fewer \322context\323) 308.72 556.33 P (ar) 72 543.33 T (guments \050GC, W) 79.59 543.33 T (indow) 147.2 543.33 T (, Display\051. These features can greatly simplify applications when rendering operations are) 171.54 543.33 T (required.) 72 530.33 T (There are two simultaneous virtual \050cartesian\051 coordinate systems that can be used by the programmer) 72 512.33 T (. The \322V\323 \050for) 480.03 512.33 T -0.25 (virtual\051 coordinate system runs from 0 to 10000 with the origin at the upper left. Rendering commands, in the form of) 72 499.33 P (function calls, output graphics scaled to these dimensions. For example, the following code in Figure 19 draws a) 72 486.33 T (circle in the upper left quadrant of a drawarea.) 72 473.33 T 1 F (Figure 19: Drawarea code to display a circle) 214.81 390.48 T 2 F (Except for the position and dimension ar) 72 368.48 T (guments, the semantics of this call are the same as the Xlib call XDrawArc.) 234.49 368.48 T -0.33 (T) 72 355.48 P -0.33 (ypically) 77.41 355.48 P -0.33 (, the functions that render into this coordinate system take the name of the corresponding Xlib function, with) 108.96 355.48 P (\322V\323 \050or \322D\323\051 in place of \322X.\323 The drawarea also has functions for setting \336ll styles, line widths, colors, etc. The) 72 342.48 T (complete list of functions is in the appendix.) 72 329.48 T -0.14 (The \322D\323 \050for double\051 coordinate system uses programmable dimensions and has a separate set of rendering functions) 72 311.48 P (that use doubles for ar) 72 298.48 T (guments. The code in Figure 20 creates the same ef) 160.64 298.48 T (fect as that in Figure 19.) 365.86 298.48 T (The dimensions of the double coordinate system can be changed at any time, which is useful if you need to pan,) 72 280.48 T 0.08 (zoom, or rescale. For example, if we wanted to zoom into the circle created in Figure 20, we could set the coordinate) 72 267.48 P (system to \0500.0, 0.0, 0.25, 0.25\051 and it would \336ll the drawarea. Any other drawing that is outside of the coordinate) 72 254.48 T (system is clipped.) 72 241.48 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 (Drawarea) 387.84 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 92.86 402.14 519.14 452 C 94.29 382.71 513.57 449.14 R 7 X 0 K V 3 9 Q 0 X (drawarea1 = \050Drawarea\051 xv_create\050 owner, DRAWAREA, NULL \051;) 130.29 432.14 T (VDrawArc\050 drawarea1, 0, 0, 2500, 2500, 0, 360*64 \051;) 130.29 421.14 T 98.86 408.5 513.14 445.64 R 0.5 H 0 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "19" 8 %%Page: "18" 8 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (18) 531.11 37.99 T 4 12 Q (Clockobj) 72 712 T 2 10 Q (The Clockobj extension is subclassed from the Drawarea 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 1 F (Figure 16: Clockobj class hierarchy) 233.27 604.33 T 2 F (A clockobj is an analog 12 hour time display with three major features \050see Figure 17\051: a hour hand, a minute hand,) 72 582.33 T -0.29 (and a clock face. T) 72 569.33 P -0.29 (ime is set with two attributes:) 146.26 569.33 P 3 F -0.69 (CLOCKOBJ_HR) 265.04 569.33 P 2 F -0.29 ( and) 331 569.33 P 3 F -0.69 (CLOCKOBJ_MIN) 349.86 569.33 P 2 F -0.29 (. If enabled, the time can also) 421.82 569.33 P (be set by the user by clicking and dragging the clock hands.) 72 556.33 T 1 F (Figure 17: A clockobj set to 5:04) 239.66 354.9 T 2 F (Additional features, such as decorations on the face, can be added to a clockobj. The clockobj is a subclass of the) 72 332.9 T (drawarea, so you can do drawarea operations on it. For example, the following code sample changes the face from) 72 319.9 T (circular to rectangular:) 72 306.9 T 3 9 Q (VClear\050my_clock\051;) 108 294.57 T (VDrawRectangle\050my_clock, 0, 0, 10000, 10000\051;) 108 283.57 T 2 10 Q (This feature could be used to add numbers and tics to the face, if desired.) 72 266.9 T -0.17 (The time can be directly set by the user by clicking and dragging on the hands of the clock if) 72 248.9 P 3 F -0.4 (CLOCKOBJ_MOVABLE) 441.72 248.9 P 2 F (is) 72 235.9 T 3 F (TRUE) 81.17 235.9 T 2 F (. The application is noti\336ed when the user changes the time with) 105.15 235.9 T 3 F (CLOCKOBJ_MOVE_PROC) 365.26 235.9 T 2 F (.) 473.2 235.9 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 (Drawarea) 334.4 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 (Clockobj) 434.34 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 109.64 366.57 502.36 535 C 0 X 0 K %%BeginBinary: 6224 250 270 146.43 156.74 0 232.79 372.41 /red < 06000000000000000000000000000000D41804003CECFFEF44ECFFEF66ECFFEF FFFFFFFF000000000000000000000000940505003300000000000060BA657F40 D4180400F8EBFFEFD40964EFFFFFFFFF01000000A81804000600000000000000 0000000000000000DC180400D4EBFFEFD8EBFFEF9A0505005C0B050000000000 00000000588C73EF088E73EF048E73EFFE8D73EF000000000000000000000000 30EBFFEFFFFFFF7F000000800000000090E861EFF0EAFFEF00000000FFFFFF7F E1DD63EF9CEBFFEFA005050048ECFFEF7851040040ECFFEF7851040064000000 0000000040ECFFEF0100000038ECFFEF3CECFFEF0000000000C0FF78004386A1 > store /green < 00000000D36D2843882B04000CEDFFEFA818040070EDFFEF4C0000002E353335 000000000000000000000000B07104006CEDFFEF70EDFFEF0600000000000000 030000000000000000EDFFEFA10505005C0B0500000000000000000000000000 882B04000CEDFFEF0000000000B880404C8E73EF2E000000730000002E000000 00000000000000000400000000400400FFFFFF0160ECFFEF66ECFFEFF9FFFF7F 3500000000000060F8EBFFEFF8ECFFEFE0EBFFEF3CECFFEF5CAE010048ECFFEF D4910100F0EBFFEF9B050500000000000000000000B88040D418040060ECFFEF D40964EF360000000100000036000000000000000000000000C0FF9B0056ADCF > store /blue < 0F00000019D9040002000000FFFFFFFF8C470400FFFFFFFF7CEDFFEF03000000 0000000000000000A47C010080EDFFEFE47A010080EDFFEF0A00000070000000 7000000000000000000000000100000000010000200100000C00000008000000 010000000F00000020010000282B0400D36D28430400000000000000882B0400 401C0400E04104000CEDFFEF54EDFFEF0481010010EDFFEFE9D8040002000000 FFFFFFFF8C4704000100000070EDFFEF141D040000801B43FFFFFFFF00280400 0000000000000000FFFFFF7FE1DD63EF6CEDFFEFE1DD63EF64EDFFEF01000000 88510400FCECFFEFACECFFEF00000000E48D0100B0ECFFEF34C0FF980054AACB > store BEGINBITMAPCOLORc 7t"z"t" FEFDRLFEFFFEFD BZ" RIFD:'9z9' FDFDFDFDFDFDRHFDFDFDFDFDFDFD;uYz" FER@FEFFD"y"J$H"C"?"D" FFFEFDO9FCFCFCFCFCFCFCJ# P)FEFEJ" Q(FEHrJ$@$;$<"9$;#9%A$:$9%:$ FDO9FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFCFCFCFC7$E'J%?&9%;#8&9%8$A%9&9%8&J$ FDFDFDFBFBFBFBFBFFO8FCFEFEFEFCFEFEFEFCFCFEFEFEFCFEFCFEFEFEFCFCFEFEFCFEFEFEFCFEFEFEFCFEFEFEFCFEFCFEFCFCFEFEFEFCO1FDFDFD7%C#9#J#I#=#A"J% FEFEFEFEFEFDFFFEO7FCFEFCFEFCFEFEP/FEFEFEFEJ"J$ P?FCIFCFCFCI&J$J% FEFDFBFFFEP'FEFEFCGFEFEFEFEJ#I#>#J"=" P"FEFCFEFCFEFCAFCFCJ$J%?&9%<)9%F%9&?& 4FEFFFEO:FEFCFCFCFEFCFCFCFEFEFCFCFCFEFCFEFEFCFCFCFEFCFCFCFEFEFCFCFEFEFCFCFCFEFEFCFCFCFEJ"J$:";$;$8":"8$9%?r8%9$9&9$ 5FEOFCFAFAOGFCFAFAFCJ$J#?$ O#J# O1FCFAOKFCF9FCFA4FAFCJ$J#J$ O/FCFCFAOKFCF9@FAFCFCJ$J#J$ O.FCFAFAOKFCF9BFAFAFCJ#J#J# O-FCFAOLFCF9EFAFCJ#J# O,FCFAPGFAFCJ#J#J# O+FCFAOMFCF9HFAFCJ#J# O*FCFAPKFAFCJ#J#J# O)FCFAP FCF9KFAFCJ#J# O(FCFAQ!FAFCJ#J# O'FCFAQ#FAFCJ#J#J# O&FCFAP"FCF9O!FAFCJ#J#J# O%FCFAP2FCFAAFAFCJ#J#J# O$FCFAP#FCF9O$FAFCJ#J#J# O#FCFAP3FCFADFAFC J#J#C#J# O"FCFAP$FCF9FCFAFFAFCJ#J# O!FCFAQ/FAFCJ#J#C#J# O FCFAP%FCF9FCFAIFAFC J#J#J# MFCFAP4FCFAKFAFCJ#J#J# LFCFAP&FCF9O-FAFCJ#J#J# KFCFAP5FCFAO FAFCJ# Q%FCF9J#J#J# JFCFAP5FCFAO"FAFCJ#J# IFCFAQ;FAFCJ#B# Q$FCF9FCFAJ#J# HFCFAQ=FAFCJ# Q1FCFAJ#J#J# GFCFAP(FCF9O5FAFCJ#J#J# FFCFAP6FCFAO)FAFCJ# Q"FCF9J#J#J# EFCFAP6FCFAO+FAFC J#J#A#J# DFCFAP)FCF9FCFAO-FAFC J#J#A#J# CFCFAP)FCF9FCFAO/FAFC J#J#J# BFCFAP6FCFAO1FAFCJ# PMFCF9J# Q+FCFAJ#J#J# AFCFAP)FCF9O@FAFCJ# Q*FCFAJ#J# @FCFAQMFAFCJ#@# PKFCF9FCFA J#J#@#J# ?FCFAP)FCF9FCFAO8FAFC J# Q'FCFAJ#J#J# >FCFAP)FCF9OFFAFCJ# Q&FCFAJ# PHFCF9J#J#J# =FCFAP4FCFAO=FAFC J#?# PGFCF9FCFA J#J#?#J# # PCFCF9FCFA J# PLFCFAJ# PBFCF9J# PKFCFAJ#J#J# :FCFAP%FCF9P$FAFCJ# PJFCFA J%<# P?FCFCF9FCFCFAJ% P=FCFCF9F9J$9#:# PF9FCJ# PFF9FCJ& P#J# =FEFCP+FAFCF9FCO# PKFAFCF9FCJ#J# >FEFCR#FCFEJ#># PLFAFCF9FC J#J#>#J# ?FEFCP,FAFCF9FCO7FCFEJ# Q*F9FCJ# Q FAFCJ#J#J# @FEFCP7F9FCO4FCFE J#J#?#J# AFEFCP,FAFCF9FCO2FCFEJ# Q-F9FCJ# Q"FAFCJ#J#J# BFEFCP8F9FCO/FCFEJ# Q#FAFCJ#J#J# CFEFCP8F9FCO-FCFEJ# Q$FAFCJ#J#J# DFEFCP8F9FCO+FCFEJ#@# Q%FAFCF9FCJ#J# EFEFCQCFCFEJ#@# Q&FAFCF9FCJ#J# FFEFCQAFCFEJ#J#@#J# GFEFCP,FAFCF9FCO%FCFE J#J#@#J# HFEFCP,FAFCF9FCO#FCFE J#J#J# IFEFCP,FAFCO-FCFEJ#J# JFEFCQ9FCFEJ#?# Q*FAFCF9FCJ#J# KFEFCQ7FCFEJ#J#J# LFEFCP+FAFCO(FCFEJ#J#J# MFEFCP+FAFCO&FCFEJ$ Q-FAFCFCJ#J$J# O FEFCP,FAFAFCO"FCFEJ#J#J# O!FEFCP-FAFCO FCFEJ#J#J# O"FEFCP-FAFCLFCFEJ#8# Q2FAFCF9FCJ#J$J# O#FEFCP.FAFCFCHFCFEJ#J$J# O$FEFCP.FAFAFCFFCFEJ#J"J# O%FEFCP/FAEFCFEJ#J"J# O&FEFCP/FACFCFEJ#J# O'FEFCQ#FCFEJ#J# O(FEFCQ!FCFEJ#J# O)FEFCPMFCFEJ#J# O*FEFCPKFCFEJ#J# O+FEFCPIFCFEJ#J# O,FEFCPGFCFEJ#J# O-FEFCPEFCFEJ$J$ O.FEFCFCPAFCFCFEJ$J$ O/FEFEFCP?FCFEFEJ#J# O1FEFCP=FCFEJ$J$ O2FEFCFCP9FCFCFEJ$J$ O3FEFEFCP7FCFEFEJ#J# O5FEFCP5FCFEJ$J$ O6FEFCFCP1FCFCFEJ$J$ O7FEFEFCP/FCFEFEJ$J$ O9FEFCFCP+FCFCFEJ%J% O:FEFEFCFCP'FCFCFEFEJ$J$ OFEFCFCP!FCFCFEJ%J% O?FEFEFCFCOKFCFCFEFEJ%J% OAFEFEFCFCOGFCFCFEFEJ%J% OCFEFEFCFCOCFCFCFEFEJ&J& OEFEFEFCFCFCO=FCFCFCFEFEJ&J& OGFEFEFEFCFCO9FCFCFEFEFEJ&J& OJFEFEFCFCFCO3FCFCFCFEFEJ'J' OLFEFEFEFCFCFCO-FCFCFCFEFEFEJ'J' P!FEFEFEFCFCFCO'FCFCFCFEFEFEJ(J( P$FEFEFEFCFCFCFCMFCFCFCFCFEFEFEJ*J* P'FEFEFEFEFCFCFCFCFCCFCFCFCFCFCFEFEFEFEJ&sIs& P+FEFEFEFEFEFCFCFEFEFEFEFEJszs P0FE3FCFEJz P83FE 7%JP FFFFFFFFS*7%J% FEFEFEFDS+FEFEFEFD store /green < 0000000000005143882B04000CEDFFEFA818040070EDFFEF4C0000002E323236 000000000000000000000000B07104006CEDFFEF70EDFFEF0600000000000000 020000000000000000EDFFEFC10005005C0B0500000000000000000000000000 882B04000CEDFFEF00000000007083404C8E73EF2E000000730000002E000000 00000000000000000400000000400400FFFFFF0160ECFFEF66ECFFEFF9FFFF7F 340000000000000000407C40F8ECFFEFE0EBFFEF3CECFFEF5CAE010048ECFFEF D4910100F0EBFFEFBB000500000000000000000000708340D418040060ECFFEF D40964EF2E000000010000002E00000000000000000000000000FF9B0056ADCF > store /blue < 02000000F1BE040000000000FFFFFFFF8C470400FFFFFFFF7CEDFFEF03000000 0000000000000000841D040074000000E47A010080EDFFEF0A00000070000000 7000000000000000000000000100000000010000200100000C00000008000000 0100000040000000480000000C000000000051430400000000000000882B0400 401C0400E04104000CEDFFEF54EDFFEF0481010010EDFFEFBDBE040000000000 FFFFFFFF8C4704000100000070EDFFEFD40964EF31000000FFFFFFFF00280400 0000000000000000FFFFFF7FE1DD63EF6CEDFFEFE1DD63EF64EDFFEF01000000 88510400FCECFFEFACECFFEF54EDFFEFE48D0100B0ECFFEF34BDFF980054AACB > store BEGINBITMAPCOLORc 7t"z"t" FEFDQ>FEFFFEFD :'J' FDFDFDFDFDFDQ@FDFDFDFDFDFD;':YJ( FEFEFEFEFEFEQ,FEFEFEFEFEFEFFD"y"J$ FFFEFDMFCFCFCJ#J" O=FEFEBFC HrJ$9"9"9$9"9"8&@%9$9"9" FDO,FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFCFCFCFCFCFCFC7$E'J&?&?&A$8&:"J$ FDFDFDFBFBFBFBFBFFO+FCFEFEFEFCFCFEFEFEFCFEFCFEFEFEFCFEFEFCFEFEFEFCFCMFDFDFD7%C#9#J"J"J% FEFEFEFEFEFDFFFEO+FEKFEO,FEFEFEFEJ$9& OEFCFCFCFEFCFEFCFEI&J%J& FEFDFBFFFEO,FCFEFEFEO&FEFCFEFCFEJ$C" OLFEFCFEFCJ$J'>&8%:%F& 4FEFFFEO-FEFCFCFCFEFCFEFCFCFCFEFEFCFCFEFEFCFCFCFEFCFCFCFEJ"J";&8#;$:%:%r8"<$:$ 5FEO)FEFEFEFEFEFEFCFEFEFEFEFEFEFEFEFEFEFEFEFCFEFEFEFEFEFEFEJ"Jr OKFC:FEJ# OKFEFED"y" FEFDFEEy FE ;z QJFCFC7FC>FC7FCJ#9#C#9#J#:"C#9#J#8%B#9# #9#J#:"9#>#9#J#s#>#9# "D"J">"D"J">"D" =FAFAFA>FAFAFA>FAFAFA J"J"J"J"J"J" =FC7FC>FC7FC>FC7FCJ#9#D"9#J#:"D"9#J#8%C"9# "D"J">"D"J">"D" =FAFAFA>FAFAFA>FAFAFA J"J"J"J" =FC7FC>FC7FCJ#9#B%8#J#:"B%8# "D"J">"D" =FAFAFA>FAFAFA 7%JP FFFFFFFFQJ7%J% FEFEFEFDQKFEFEFEFD FE:(J' FEFEFEFEFEFEFDQ?FEFEFEFEFEFE 7z"t QHFDFFFD ENDBITMAP %%EndBinary 317.4 443.52 314.1 431.98 310.79 443.52 314.1 442.32 4 Y V 314.1 486.65 314.1 442.32 2 L 0.5 H 2 Z N 3 9 Q (New rows) 332.1 456.52 T (New children) 236.76 456.52 T 181 417.14 431 617.86 R 0 Z N 72 72 540 720 C 0 0 612 792 C FMENDPAGE %%EndPage: "13" 2 %%Page: "12" 2 612 792 0 FMBEGINPAGE 0 8 Q 0 X 0 K (SlingShot 2.0 Programmer\325s Handbook) 72 37.99 T (12) 531.11 37.99 T 4 12 Q (Array_tile) 72 712 T 2 10 Q (The Array_tile 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 1 F (Figure 7: Array_tile class hierarchy) 233.27 604.33 T 2 F (An array_tile is a geometry manager and positions its children in a two dimensional array) 72 582.33 T (. The number of columns) 429.43 582.33 T -0.19 (and the number of rows is programmable. The width and the height of an array_tile are divided up into gaps and cells) 72 569.33 P (and each child is positioned inside a cell.) 72 556.33 T (Cell size is de\336ned by two attributes:) 72 538.33 T 3 F (ARRAY_TILE_COLUMN_WIDTH) 222.75 538.33 T 2 F ( and) 360.67 538.33 T 3 F (ARRAY_TILE_ROW_HEIGHT) 380.1 538.33 T 2 F (. If a) 505.29 538.33 T (child is added that is bigger than the size of the cell, all cells in the array_tile get lar) 72 525.33 T (ger) 406.31 525.33 T (.) 418.52 525.33 T (Children are positioned within the cell according to the) 72 507.33 T 3 F (ARRAY_TILE_ALIGN) 294.91 507.33 T 2 F ( attribute. Cell dimensions and) 390.86 507.33 T (attributes for child positioning within one cell are shown in Figure 8. All children are positioned using the same) 72 494.33 T (alignment.) 72 481.33 T 1 F (Figure 8: Dimensions of one cell and attributes names for positions of children within a cell) 121.52 359.17 T 2 F (The cells of the array_tile can be or) 72 337.17 T (ganized by row major and column major order) 213.64 337.17 T (. The) 399.34 337.17 T 3 F (ARRAY_TILE_LAYOUT) 422.38 337.17 T 2 F (attribute controls this. If it is set to) 72 324.17 T 3 F (ARRAY_TILE_LAYOUT_ROW) 212.2 324.17 T 2 F (, the major axis is a rows \050horizontal\051. An) 337.21 324.17 T (array_tile with row major order and three rows is shown in Figure 9. If this attribute is set to) 72 311.17 T 3 F -0.31 (ARRAY_TILE_LAYOUT_COLUMN) 72 298.17 P 2 F -0.13 (, the major axis is columns \050vertical\051. An array_tile with column major order and) 215.92 298.17 P (three columns is shown in Figure 10. In these \336gures, the \336rst number in the parenthesis is the major index, the) 72 285.17 T (second number is the minor index. Row and column positions start at zero, with \0500, 0\051 at the upper left.) 72 272.17 T 1 F (Figure 9: The layout of children when) 96.7 136.17 T 3 F (ARRAY_TILE_LAYOUT) 251.88 136.17 T 1 F ( is set to) 353.83 136.17 T 3 F (ARRAY_TILE_LAYOUT_ROW) 389.37 136.17 T 2 F (There are several attributes used to control automatic positioning of children. Automatic positioning is enabled by) 72 114.17 T (default, but can be disabled by setting) 72 101.17 T 3 F (ARRAY_TILE_AUTO_POSITION) 225.79 101.17 T 2 F ( to) 369.71 101.17 T 3 F (FALSE) 382.48 101.17 T 2 F (. If disabled, the application is) 412.46 101.17 T (responsible for setting the row and column position of newly added children via) 72 88.17 T 3 F (ARRAY_TILE_ROW) 394.28 88.17 T 2 F ( and) 478.24 88.17 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 (Array_tile) 388.4 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.54 370.83 539.46 460 C 79.82 401 192.57 414.97 R 6 X 0 K V 0.5 H 2 Z N 79.82 417.6 192.57 431.57 R V N 79.82 434.2 192.57 448.17 R V N 199.11 434.2 311.86 448.17 R V N 199.11 401 311.86 414.97 R V N 318.4 401 431.15 414.97 R V N 318.4 417.6 431.15 431.57 R V N 199.11 417.6 311.86 431.57 R V N 318.4 434.2 431.15 448.17 R V N 5 7 Q 0 X (ARRAY_TILE_ALIGN_EAST) 341.27 423.13 T (ARRAY_TILE_ALIGN_WEST) 81.64 423.13 T (ARRAY_TILE_ALIGN_NORTH) 207.74 442.54 T (ARRAY_TILE_ALIGN_SOUTH) 207.74 403.71 T (ARRAY_TILE_ALIGN_NORTHEAST) 320.31 442.54 T (ARRAY_TILE_ALIGN_SOUTHEAST) 320.31 403.71 T (ARRAY_TILE_ALIGN_NORTHWEST) 81.64 442.54 T (ARRAY_TILE_ALIGN_SOUTHWEST) 81.64 403.71 T (ARRAY_TILE_ALIGN_CENTER) 205.64 423.13 T 79.82 385.17 79.82 397.67 2 L 7 X V 0 X N 431.15 385.17 431.15 397.67 2 L 7 X V 0 X N 89.18 388.96 81.49 391.17 89.18 393.37 88.37 391.16 4 Y V 422.76 393.21 430.45 391 422.75 388.8 423.56 391 4 Y V 88.37 391.16 423.56 391 2 L 7 X V 0 Z 0 X N 3 F (ARRAY_TILE_COLUMN_WIDTH) 207.52 384.11 T (ARRAY_TILE_ROW_HEIGHT) 444.12 422.24 T 433.49 448.17 443.65 448.17 2 L 2 Z N 433.49 401 443.65 401 2 L N 436.36 440.48 438.57 448.17 440.77 440.48 438.57 441.28 4 Y V 440.77 408.89 438.57 401.2 436.36 408.89 438.57 408.09 4 Y V 438.57 441.28 438.57 408.09 2 L 0 Z N 74.25 372.75 537.75 457.58 R N 79.82 401 431.15 448.17 R 0.1 H 2 Z 2 X N 72 72 540 720 C 0 0 612 792 C 72 72 540 720 C 125.1 147.83 486.9 250.83 C 0 X 0 K %%BeginBinary: 4077 245 150 123.67 79.33 0 181.42 159.67 /red < DC1804003CECFFEF40ECFFEF6FFF04005C0B0500000000000000000000000000 FFFFFFFF00000000000000000000000063FF040031000000000000E07A6E7E40 D4180400F8EBFFEFD40964EFFFFFFFFF01000000A81804000500000000000000 0000000000000000DC180400D4EBFFEFD8EBFFEF68FF04005C0B050000000000 00000000588C73EF088E73EF048E73EFFE8D73EF000000000000000000000000 30000000FFFFFF7F00000080B0710400000000000000000030000000FFFFFF7F DCFE04009CEBFFEF71FF040048ECFFEF7851040040ECFFEF7851040064000000 088E73EF40ECFFEF0100000038ECFFEF3CECFFEF60ECFFEF0000FF78004386A1 > store /green < 000000000000CE42882B04000CEDFFEFA818040070EDFFEF4C0033382E303532 000000000000000000000000B07104006CEDFFEF70EDFFEF0600000000000000 020000000000000000EDFFEF72FF04005C0B0500000000000000000000000000 882B04000CEDFFEF00000000B05A6F404C8E73EF2E000000730000002E000000 00000000000000000400000000400400FFFFFF0160ECFFEF66ECFFEFF9FFFF7F 885104003CECFFEFF8EBFFEFF8ECFFEFE0EBFFEF3CECFFEF5CAE010048ECFFEF D4910100F0EBFFEF69FF04000000000000000000B05A6F40D418040060ECFFEF D40964EF39000000010000003900000006000000000000000000FF9B0056ADCF > store /blue < 0000000033BC040002000000FFFFFFFF8C470400FFFFFFFF7CEDFFEF00000000 F81C040080EDFFEFA47C010080EDFFEFE47A010080EDFFEF0A00000070000000 7000000000000000000000000100000040010000680100000C0000000A000000 010000000200000068010000282B04000000CE420400000000000000882B0400 401C0400E04104000CEDFFEF020000000481010010EDFFEFE6BB040002000000 FFFFFFFF8C4704000100000070EDFFEF141D04004A5CAF43FFFFFFFF00280400 0000000000000000FFFFFF7FE1DD63EF6CEDFFEFE1DD63EF64EDFFEF01000000 88510400FCECFFEFACECFFEF28FF0400E48D0100B0ECFFEF34BDFF980054AACB > store BEGINBITMAPCOLORc 7t"Jt" FEFDRHFEFDAz RGFE :'J' FDFDFDFDFDFDRIFDFDFDFDFDFD;':YJ( FEFEFEFEFEFER5FEFEFEFEFEFEFFD"y"J$J$ FFFEFDO0FCFCFCO.FCFCFCJ#J"J# P FEFEBFC:FEFE HrJ$9"9"9$9"9"8&A$9$@"9"8%9% FDO=FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFCFCFEFCFC7$E'J&?&?&@%8&G%9%J$ FDFDFDFBFBFBFBFBFFO&8%:%@%8&?% 4FEFFFEO>FEFCFCFCFEFCFEFCFCFCFEFEFCFCFEFEFCFCFCFEFCFCFCFEFCFCFCFEFEFCFCFEJ"J";&8#;$:%:%r9$9$;";%8&8"9" 5FEO:FEFEFEFEFEFEFCFEFEFEFEFEFEFEFEFEFEFEFEFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEJ"Jr P.FC:FEJ# P.FEFED"y" FEFDFEEy FE ;z S%FCFC7FC>FC7FCJ#9#C#9#J#9#D"9#J#9#B%8# #9#J#9#9#?"9#J#9#9#"D"J">"D"J">"D" =FAFAFA>FAFAFA>FAFAFA J"J"J"J"J"J" =FC7FC>FC7FC>FC7FCJ#:"C#9#J#:"D"9#J#:"B%8# #9#J#:"9#?"9#J#:"9#"D"J">"D"J">"D" =FAFAFA>FAFAFA>FAFAFA J"J"J"J" =FC7FC>FC7FCJ#8%B#9#J#8%C"9# #9#J#s#?"9# "D"J">"D" =FAFAFA>FAFAFA 8$JP FFFFFFS%7%J% FEFEFEFDS&FEFEFEFD