Drawing Primitives - Antialiased Lines and circles

Hi all.

I have made a library of antialiased line and circle drawing primitives for
use in raw widgets. Note that they are a lot slower than the equivalent
PgDraw functions, but they look a lot better. If you find them useful, or
for any queries/comments/suggestions, email me.

Part of the header file is displayed below for your interest.

Cheers,
Stuart Harding


/////////////////////////////////////////////////////////////////////////
// QNX Photon Antialiasing library - libantialias.so
//
// By Stuart Harding
// 21 June 2002
//
// Queries/Comments/Suggestions to:
// stupey2001@yahoo.com
//
// When using these functions remember the following:
// 1. Call PgAlphaOn() before calling them
// 2. Use set_alpha_level instead of PgSetAlphaBlend
// 3. Use set_stroke_color instead of PgSetStrokeColor
// 4. They are a lot slower than the equivalent PgDraw functions
// 5. They use a lot of floating point maths - not good if you have no maths
co-pro.
// 6. They look good - Enjoy!

/////////////////////////////////////////////////////////////////////////
// aa_iline
//
// Draws an anti-aliased linea using the current alpha level.
// If the line is horizontal, vertical or 45’, the current thickness setting
// will be used and no anti-aliasing will be performed (unnecessary).
// Otherwise, the line will be antialiased and the equivalent of one pixel
wide.
// Haven’t had the need to draw thick aa lines yet. Give me a yell if you
// really need it.
void aa_iline ( int x1 , int y1 , int x2 , int y2 );

/////////////////////////////////////////////////////////////////////////
// aa_icircle
//
// Draw an anti-aliased circle
// Uses the current stroke width setting and alpha setting to draw a
beautiful
// circle. Note that thick circles take a much longer time to draw than
// one-pixel wide circles.
// No fill is drawn, so if you want a filled circle, use PgDrawEllipse with
// Pg_DRAW_FILL first.
void aa_icircle ( int x , int y , int r );



begin 666 antialias.tar.gz
M’XL("-FD$CT``V%N=&EA;&EA<RYT87([#P/?%3%F;.[8NW:!13VOK6JN2
MVVM(0D!74B_>8+]);H""]Q9NFZ2#;MVDTUW]UG2’U$P4’E])
)X/:]R5_]>
M:>LI)ZCTRME$.4 OZM;&LA&4U6[U15*[4"ZF’&7O^V;>VYVWV< ^,7C7\_$; M9KXWW\Q\_V:^-[.9+QAH\+9&`]Y@P!LICX3(>#P5E1455U]@U2P)R>OGE%1
M-9U47#T#2I4SJJIGG[5#$"W5XP+-3F/&(EZPW8["8="T9/AG:K^_^ASIU!W MO<EDRL 6^(?0)9,)J88\=AU[7TWLI(A,)1>24F+*Z:.MAJ4)")006D_?U;%4 M#"]*WIA$)JKU9LA&H'ZDCJ75A"6L+U*3UB<F[<'WV/<5D*Z!5,G1<#ZD+T.R MJS#:SA?4\@60'#DT7P*I#%(YI"I(ET'Z*TA7<SA_6D:I!GJF/C,A’0E8;+1
MGK^$-)W[W@NY<H7JOD7(5T$Z4M<W55<>2I7OAS2Q6KYVK^>34O’6/,[6IN
M42VCPJS!K+!U@@9;:+YVD@87T?S^#,P0^S(PM1A27:S!K
(F[,"VBJ#6<%? MH\%GT1QMD,%GTWQ#!K:R\3/P.33?G($_1_.1#&RC^>IZ#2[1R<%"IN3 Y[+Q M,_2<1VTLBG,"\BE 3SDWF;"W.(#&^?#T.<"/R9N_“GD</H94Y8_A#N)OOT$
MJ(^#XI%$;+\II_#.?B70KT+)L)54QC^M?!N51V;:TB?,Z>]”]+:.C8/L=Y.
MLOHY%33!7%L]A<PO[".>/=H\FO"-N7$ %A;KR%.>.5CP5)N5GWOP[OU
M’’]]D/<!T=>J).FK#U,7@NP"NA\F:U?BW U;/8/$?X1:ROS\KS,:0'D6.3 M*'TXUS5YGPOV-)+#S_0<>G?F](<6N)G3WVM0O_JRX@P<R6E_"Z1UG'R?@3P( M]#ZDTDL\\_[FQMGU-\PEGOEU-\V97>>YZ?KK%PF+/8MGSZD3/,03: U$B:<9 M,M+H;;W=&_'X5D9]K5'2*K9XV@(K?<$(:0L%6J.>[_C"(3([V.;WUOEN]P7) MO+#WVS>TM/B:MZHCWB]GD PT.HCKA6+?-%%T7#HF[ZE@::H’UY0S#JLS’;J
M:?.%/5[LC;CP!>UXCMC<[ L3BN%IH("G.2A&
( 9)!%?E+7P!“D!KA6TT4W-
MS:0)1O#XP]]IC08]A5T4-HUJ[W=%XZR.B2U,1!N#+)BU!]H5<’(M)1TN@+
M!)LSG;>2S/<.DQ7ECU$;]+4V4:HBE%U/8R@8"O,"F$M?-(9:VKQAGX>
,:2
MQI@.A[WM)!AH:(1OJ?(JXFF(@O2)QZ=F3=ZHEW@#9&(!S[!6,N%Y=#]K4
M/ 'Y1%ALAS"'Q?LYC#1DIB#DSN*.3@D!7-P8"G,P3%M@7P2.,(G,(<%?ROF ML'AOQQP<W@[,P2GNQ!P<10_FL.#OPAP,?2_FL!;T80X.-(8Y.-E^S,$)QC&' MB:/\"KS="X2DM^&L33^J3G\HX7KJQ^)@(@W/HVC1?JP>C%$8/8@?7P[V4!@] MK!__&]Q*8?3*?EQ2!A^B,!;]Z)X&-U(8/;P?7?O@:@ICE1\_!0;;*(RKCK\6 MX5LIC*C^!0B[*(Q>VX]+V& MA;&I?QG"%13&B>Z_%6$[@&[IMYU#I8L49.B6 M-2]&YQ)RZ(*NVXG<V0^U7:XB:1,69)*.L5>=UQ#QW5M>>A%P<MI>VVA8N-&
M^CZX=$FFYHM0(W<4RV
)W(F4VYXMD=Q[.W<=O<VDG U]2L(NZ7#9’]O-'PW(
M0JE#L$(IWKFK9%U/M’C=2]$BYU[Q<L"6A5TN9?)H,9=NG”)+%J7+%56=BY MRSX8!+?F[+5U;P9W*HDIYXD[+%)'2NI0G!]U6"11@7XE80A>3Y3=5LD]) M6 M24@RN%1R)V6WXG"GI%BO<JDIUCMBL@@I24C(0M(A#$G"\?W"\8'E1R4W%N(= M1Z&\7QB*"U"(RYOF(4N_,#N%E*W[&5J>4X1 UQ8&0,V0K?M!!DQ$H*L;@(PL MY&VH/MGZ_=YWS$!!8D)9K*OHKMY$D:E7=J?D3EQ:FZ52D[R--;A [F0--N9I M( [)FUB#Z!2SW(F&D";R)M;2W)LPL]'2115K:BJ.P!)\QP3E_3^!3+-L*#P; M"L]&DF<C:80-Q2@;2>-LV)&-CM3\61T)VSUW%R%IV$5GCUD2=H*]#@CQ@8YC MS;+[6/.:EXFU67*/#+2,[%_>,]!R;+_0$V^)#RR/R<+>!4SA\?K8@'*@=^ E M>+M?V!OWQ=[N!2O,V\5Q&0RDY=@5:1C/I2P]SLD3[-BYQ];](TVB>VQ=#V8$ MVF/K[LX(M,?6M08%4HA\5.'43$&\DPF^1Q9V4JEK,E1[GX@RW,1D6+*FID25 MX8'_3J=!?JM*I1&'D))%I6RWE *:UYX3/:N7BGKS5H+S+G?:SUVKKV05F3
MLW"L^1R4D<!DM ,$) L[8$+)]K_3T[]OQA;1MM11O7;9VO"N9\3
MSOI")YLZTVH
G&G;KS<FBY_]46<B;J7L!2F&)H);[#%,Y#W.1-[DV!=!D*\B
M_R+C?RNUD:V@I%J=D?PS)X<?C+N1L/&-6\D/1])IX(SY!;H,=:^’^:1]%$Z
M/?@R>J9AYUY;=P_S4>"“G$IYJ? +3G="(&O$DLE$3V4<S? 8HL9+PUGD$
M?1GXJJ3#/<3[*G!1!T#HCOJ45)75Z4H3?U!KYJUD=
%KXJ.@QL@)5)0I_L
M/N”,V>[Y"3JL;=1A[39+XA/2(#0GV^-.“Z+N-A((E5P2_\GY+0>^:^<56NW
MK?M?–‘NMG4]G)%L’[<N=!UMTZRIW9:,)\*$BM(Y@D#L^\R9$ X"2MND 6
M^G"A=R?IV@1$TL5)$VCNJK.%KCI;\JY<+W$KU[\CK:SGTUV<U.$^SNK4EW5A
M1L1C/FK A?W='W ERVM^CU$7]=ALG:V %/Z5$]3COT\P-N7/ L?&R.T6EH
MT%X.'SF9O5A.8B/47MY”!18.]I@7N;D’Q^@D19S /%FPP;+PS:#&QP]0(
MF.M(PT)%A67K;@?)G<N!O35UY#H!&7+86I9MF>%O2[E%@;([ET+E6E0[OM
MO^4;GNQ^T<KM"R?.0/$4R^X29^S."=*^0Q,V2GNDF+3;>>+."Z7ASETCX 1=
M2Y0+:9\EU-V[5"73QFSOV>KL3\K[.C&ZF)#.=2]J3&ZF
-T ;HBNNR$;L4
M2_8(<7RQ1XBQ;"]FNX4]A-O0]K -[;4IW-#N9 +I<2E?HX/9.SMVFNZ\J’/7
M<;IQI62D?@^?!8^4$(+[;6%GK?1"[P?,HYMV2V("/\O*?BV)!V0Q(8G](‘WJ
M+P+H;$IY<+,(O2YE’;H1NW3(?2[6 [OO;^GTLI"[S%;'4YY+=Q0L5>JD M%*++8C&TL&*+)4HY:R(+<2#&*?3;NM^WZ;91.R1W7!82MJ=Z;$^]7A93=\8] M?>2AQ,K$XJX_71L]";N(YU#Q6]=\F6E[T,JZD/FMP8&EJ= &DQI2RE
MPY3$?:D!]U!>4QM:A(MZ?I^V(D-P-[ZI;<’!Q35=PW#<C6L+5=’!UJ.:LO5
ML+I<O<=&D<6X4^RW;;@//K#D^F)+?;]N9G[/E)V9Z-GD>JOIL#8G-W-S<F/!
MBU2QQ=UO=)FR6L2X[-YA8"+.!;R/-OW$KS)./‘41__%!AR&&7H]M]1AAPY
M#,FF40Q93ILAQYG0T.-#>1D:%PU]’(8,:ZC
$#K’.%T#YEKH=#+UGEI9_6/R
M5A"=Q2AX8[-;46+%788…,8^4"=3O%3
^O38,AAE*&K/E"M+S[^&G*<"0TM
M&<S+T+AHZ.,P9%A#ZQ3ZK0E^4W;’“W2=][[/N4Z%NDY%N4117:<RL#P)?3G=
M?1TV^#:#;Q’3H’42_998W;&‘V-:E)^(’;#^?"O7N$CKB>S54P6[F’7OH,
M]"V L6<)<=N&ZW!-$(OA55==15JGI76<V?UXU"K^]YR6Y$U)!0O@$\734U%
MISST!(N+&U-0\CW\B,K+SS-D%#^.,\V/PR@_I<B/4%PK]3I YSP[:=#/;6.
M\56/-NQV!D7[1ADQ[!V;D^RV813J7N)1?U:U2]V]W-ZVH:#BU;5.C7F_I%C
M[M[Q=$F"E9HK?D 432F0Q4V_R>MDG^?4]32AVS6FU$^!
:IE0TP]VY>OS1N
MJC+NFSZ.JI1W\G(U7JKZ.$P95]5Y[VB’$K 'WYW 7P;[T’EUQ#LL<D=\5D=

M1XA]Z4OB]B7T%**
:YX9MNY;80OM+C8=D]Q/+%0N2=#-M0/1M@:K83W10FV M4V9M@;Q^27@(ZL3BLA-+E/<.XH_46V"+_I!KX1)EWT&&W-$'P]]9!,//Q_%% M6#IDL;]K\05IR;UY(;-B27P]^.F$4FX’W;DFVE/UCGPQ2&Y-]!?O<M.2.)Z
MP’G I=RA=LQ:4R+70@TV;0-:0M$7NM2;F;(L+D>6!Z#+X.!Y7OAV*.T]UO MN^>*E/Y(YXV#[!1'V.E2E#N>MR?3J?I08DT3,]=:KA#DNLN1^LHD82D)3V
M" E\O4>@?X;%MAF2._8]\WIAGW+.04TK^UQ
Q4%UB4CFGB7^$V=Z]Q’M±$

MWQ::R0G6CE6JR0@Q-)_\AE-L$9+9A?RDJ%8-;QYWB.^.L1V2;F^TXVUUOB1U
M^6G’-$_Y(F^+TNTK6L=G2B4(SICT&[0T?[
;#SDL_M\70<#+^E^Q&EV-8=
MUI8P+H>U3X+DMI4OY>;Z@8X,$ ^IZA".*@>Q<%6,IH#QYGDP&&,@_ !_ 9( MT(.VI*W[Q^?H?O[I@^]XR9V0A53A9VVW[N<V#$-TPS"D'-JO;AB&!MQ*?/D! M?C.0M#WKWM<U)ZWM!Q3MIZ.X^NNA+U[H_J!IOWH"EW"*2=N&*NT$3C]%PIRC M?)CDG,!MY#2T%BM_7E>HGO#8*@G?7\X"S"PAN_MT?F0L!?WRS5'+$Y+Y)#?- M']',+#$F$X69F<705'<4SH3US;QK5<0TB@G+:3-A;+TRH(GYWF9&!=-&&/”
M@";NBN.7!)T>W>>I)VJ’3ZV4Y&E;5L+@EP@/T_O4Z='XM1.;-,. IGXG>_
M5BTK,?Z:<(R7)J;F9V)<-&&,"0.::‘Q#7DZ3KV-.S]Y)K/VPSWH^],LM.H
MA&W#E1;UA\1D5YU9?WK3SJDR\UV3.,VO@@7&UFL#2]W7^]5SJ.2H<ZBGR"A.
M’&>:$P/KW7V_RA[9Z-?ME>.ADMIQ\SXOO3X6(^.B$8.,&- (>9W-&IPRW5=J
MIT[Z16,5IQO,P5ZE)'DCS(^)EO&EO %!I:_LE_F=41/<\K!O]#1CB].=T=@
MC)%:TO@K;&\Z_BXJ<386FY$)=]_+2\GXZ428XP84<DKK^*?P"@#RP_([L0< MISMINZ?YB/ZHY">O<D<:RU_%OWC900]*\!X$=TART;G B;L8U@AZ#P+%(I5( M"XI87]*1]27RSY';RI[C/\.K47_X*:-N#Z$=\'_S4I+M]<4I]'<8*07;0.8< M;R/*GE>0Q%JU6_H7+IES&Z[MW:RMHKQ".5BBO/8*4D^Q9<1:WMNCKEYUFSS
MJB]HI3LF[0#RR
$IMN<-JTJJNPY-&$'WBUA/.O_)N=+,$CE\$9V) @;S:X: M/+$GG363R!U?!:*E5(;L$DK'\?2V970M/9ZNMDDIU%ZJJ^B[H#T+_=7;I3S0 M1P^RKE]SEO>\5BNW/#OAE0CH/WNZ%/9\E"^^#LK:TO0O(;HO99T]#)IF 'L
MNLL0O0%S7-I$ZU<>3XOOW)*18[:/VA+UWHOR% STB$/J'?AUI^W_CRB/FD3 MNY.)8J*PFFOW'O%96$Q(Z0PI+L@W0?I$4A/0WH!TNN0WH5T!))Y,B’G3B8G
M?5!+C%
>&,)[R_BS4^\YX<WFO ^]Y$Q7NK> ,5[[/B/;Y^P,<;I’B!"6^R
MXKT^O.‘J)^QN±[^Q#NW>’\5RWC/%6^ H@:0V>)\A,R?._=:^]3Y-[K+[%7E
MSAGE5?9
I]-965%5;9:]@5]WHBO[!/%TJA "514EE=4<I2=ZATIC[2W1+T-
MD$?#+/=K);\WXB?E3>VM@,+R:)B4P[#E]-8;+:T(15FA+0@%>OV.%>G]N’)Z
M:U%%;XR&PA$6$8;0I_>ED C*6^(P*O&4$L+WFLL;PU%?>Q_P$#/J_JVSJ
M&Q,Z$_7J^F6$Z=RLV@&FU1:F_U(5!^VA3+4)LVHWF-!>M$<KHA0GJWAH
M’YA
5/ALM3^4_“P.#^]'8[I&A3_'X<WC\-#N,/E5N)C#JU=I0’M&>\?$VZ-& MWR(.#^]98TIP>)I<EG%X>-\64]UT/1X^W^#P<'YARC=NDUI&&=X37LCGYN M?[=Q>+AF;,CI3\/[%H>'][OO'P-O)8>'\WDSX'T]#[\=*@^(1^,6U+"8!18. M#_O_KIKC>[SGO/JK4.B?E.G/KN8RQSL^B,??E=;J\(_))W'OCP!>31Z\'ZAX MJ/?<N D\WA2.9GS*KR/DX3QX)I*="_CXYP#M$U@LA7*2M?O).?VMGP^\<0UY M'G.?S^(&:/"IXP;HZTMSX/-SX NH1+.R/YSFW6$1P+GU.*(U8S.3Z;JW7J7? M!/QC_(N-&=A*8V9H^&; 1Q_GXF!<1S9P[;TDZ_M-(*_<\5L+H.^2#!.,OC:N M_W:2U0?V?S>'C_3@[['+.!CIBW+MM^CHM9)G"Z"GC:/G!:*/ZQ#CVJ.VWR#Z MN YO$WU<!XQKP,=U^#"G_3&BC^LPV:2OOS@'OL*DC^M0;=+'=?CK'/P;3/JX M#HM-^K@.?VO2QW7X9DY[])U\7(=[3?JX#IMS\)\PZ>,Z/&?2QW78:]+'=8B; M]'$=#IKT<1T^-.GC.OS)I(_#,-FLC^MPL5D?U\%NUM/WE1QXNEG?W[5F?5P' MEUD?U\&=T[[9K(_K$#7GQG7PN&Z8Z_&0QG#4U]I4WDA6-#96>3#40"#H:RHG M;>736?NXIL6>H0;YP&BQ],4\JP(AAJ\00_]6/)XQ94$OZD\36)+2SMI#H4;
M?9YHR
-&‘9B7;0N#-/A6!%IA&/5]W0V+%N=TVI3I%++U$Y5$E3T;.BHQIQH
M$S3R0B:&1#9H!8N$P(>0R GF,"J:A<5(B>ZQ?1(AO=@0MHP>([G"R>PMH MD3>(!1<C(S="!!=O8E2<BMR8%FH$B)R8$SD1)/B($*."9[!8'KKX%RRBA19. M(G\<$"1T5.0*?8B/,<)R?/;\/WJR,]@_;F-@_+>9,ZO'B/]6,6-F=846_VWZ MS)G3;RZLKIG\5.Q//M$J.6O:-/O–RZSN_RA:C5/ENSJT#K"GLPT!#V
MAML1!=.<=ONBJ B+G7V!-]R$"/@6GJI
^]?$5I^]JJBZBRU2]$7#O@BT^:R
MW7YDVB)QQ0I?)!H(M4;LT="UB#-Y<B0JMOG:H5EE;;O7’PKAX8#:P5
K]4N
M4C*B?E
$9V\66QM9["OQ=?2X MCA;TY% R&O@UHM,O*<OM<6 OM&;\RM
MX ./ZK,WPGNU-QS#7E5N=T.W.0N
/= :B?J\3?90LSW’?V"CZ=E&O&:U8I;
MO+%9=;E]L=7;@??8??:@_3?M7T-A$#T3/Y%<.I&VE3T8IPH*<"+52*2E0)
M<:PV&R<Q2=;!ZTT:?CUOQG:^:$&"((3D=^EFUQZ/W[SYJ’%4PVFY05’)-=37
M1B+’./(MXSM?=E -QAHZF@)XUFIG!\)6E'-"_<I*8.5?@Z-F9(>D1KT]"D M6"J\#-]+TUE8<\I&7P6C,V.F?D>'KJHO9OV\U3JJOO:[*+^1(&$DJ#?7I,() M$=)-^79PW1(3P;V:X'.IAHU5IT1!(9=VW(BV)/+]R9TJW;T#Q^.W,M+T]%SC M(U&_J.NM.3_O4#:R9DY]!T]*O[[-9IJ2#>SUV]?TBJSY!NN&N9T)K
%+QU7
M8?,SCPSR4/1XD\ZA1D2^W5H:/3S@)7OJ"CDU5:W’E1I2.4’1.W2P?7’L>(7Y
M+Q#-A]5P5OSMB,-PA1<4VPRELK&6Y2O)1)),HK*;D7SFY81X3XS5WTSE"G#!
MTZ-&7A+8?-D]R??L0!WEM%((’;*-9<[&5AJZ&2C.Z9OR+K>>L6NQ!68"!$D M,$194U6JA"&4LK:X]!'GV)6N5;YU+>[;Q"0<<)"<$*:I0G2Q9ZC$X >D6'7B MD&I^0Z6PVQDO$;D(.)5S($3EH.'W&DDYYV1>*QP<4I5M606=K+T)[4Z#4D)$ M*"-.]8<SRN5A'1\>SN.;<_HK>O"#\XXB?A#$9@67R'HOEKY6,E]N$L,I['JQ MQ#>1L0*!*!JG1\U,*/&6P=JM<8IK9E!'^("SBBE3.6_*":I9->;*JL'N-@1P MEBTA=IUM[.)^B>&MH1%K!KE/55.M8EQ614L;/F^N6@NQ=@7ZRNTED7-%\3]
MI!J-[]
=77Z^O[
;#-UKN!]/MC*&/<PE][/ ]7HJR=NSKU_QXA5+G#"
MB’AFN…9"II<<4^K#[P^J"0@2Y)6J8_6A1#;Z+YN1E
,9AS8U:C$2AAF63(
MLWJ;)MYGSS39"D>0Y4 02HL#I4
<[-H’HT)V4)9+]&I(W99A$2I&
MHVC#\IU:S(I2<<>2]G$P762WGWJ]G’:V^GY4^TK”=#8+5HBR%2KFLK"Z&# M
M;&M37#BGE^A]G*!E"0;\"F<99HG*# MK8PU[!T][W8]G;]WS;]!]NZ(E?7' M,DZ%]LB//Z=V9P3+R$]I?\KHAIY?.7;1^M?_'R0D)"0D)"0D)"0D)"0D)"0D 6)"0D)"0D)"0D)/P_^ [M8^.8’@`````
`
end_