XForms: fl_set_clipping anomaly

Jeroen Bleyenbergh (jebe@dutllu1.lr.tudelft.nl)
Thu, 4 Dec 1997 11:06:02 +0100

To subscribers of the xforms list from jebe@dutllu1.lr.tudelft.nl (Jeroen Bleyenbergh) :

----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 24

Hello dear Xformers

There seem to be an anomaly in the xforms clipping routine.
After using the command fl_set_clipping only the first
object that is drawn is clipped, other drawing commands
do not clip. For example:

static void draw_newobject(FL_OBJECT *ob) {
fl_set_clipping(ob->x,ob->y,ob->w,ob->h);
fl_drw_box(FL_RSHADOW_BOX,
ob->x+10,ob->y+ob->h/2+10,ob->w+20,ob->h/2,FL_BLUE,3);
// this box is clipped
fl_drw_box(FL_RSHADOW_BOX,
ob->x+50,ob->y+2*ob->h/3+10,ob->w+20,ob->h/2,FL_YELLOW,3);
// this box is NOT clipped
fl_unset_clipping();
fl_rect(ob->x,ob->y,ob->w,ob->h,FL_BLACK);
}

is this meant to work this way and should I give a set_clipping command
before each drawing command (than whats the use of the fl_unset_clipping)
or is this a bug

I have included a sample program and a sample image of the problem.
----------
X-Sun-Data-Type: c-file
X-Sun-Data-Description: c-file
X-Sun-Data-Name: newobject.c
X-Sun-Content-Lines: 72
X-Sun-Charset: us-ascii

#include <forms.h>

#define FL_NEWOBJECT 1006
#define FL_NORMAL_NEWOBJECT 0

// DEFINITIONS
FL_OBJECT *fl_create_newobject(int type,FL_Coord x,FL_Coord y,FL_Coord w,FL_Coord h,const char *label);

FL_OBJECT *fl_add_newobject(int type,FL_Coord x,FL_Coord y,FL_Coord w,FL_Coord h,const char *label);

static int handle_newobject(FL_OBJECT *ob,int event,
FL_Coord mx,FL_Coord my,int key,void *xev);

static void draw_newobject(FL_OBJECT *ob);

// IMPLEMENTATIONS
FL_OBJECT *fl_create_newobject(int type,
FL_Coord x,FL_Coord y,FL_Coord w,FL_Coord h,const char *label) {
FL_OBJECT *ob;
ob= fl_make_object(FL_NEWOBJECT,type,x,y,w,h,label,handle_newobject);
return ob;
}

FL_OBJECT *fl_add_newobject(int type,FL_Coord x,FL_Coord y,
FL_Coord w,FL_Coord h,const char *label) {
FL_OBJECT *ob=fl_create_newobject(type,x,y,w,h,label);
fl_add_object(fl_current_form,ob);
return ob;
}

static void draw_newobject(FL_OBJECT *ob) {
fl_set_clipping(ob->x,ob->y,ob->w,ob->h);
fl_drw_box(FL_RSHADOW_BOX,
ob->x+10,ob->y+ob->h/2+10,ob->w+20,ob->h/2,FL_BLUE,3);
// fl_unset_clipping();
// fl_set_clipping(ob->x,ob->y,ob->w,ob->h);
fl_drw_box(FL_RSHADOW_BOX,
ob->x+50,ob->y+2*ob->h/3+10,ob->w+20,ob->h/2,FL_YELLOW,3);
fl_unset_clipping();

fl_rect(ob->x,ob->y,ob->w,ob->h,FL_BLACK);
}

static int handle_newobject(FL_OBJECT *ob,int event,
FL_Coord mx,FL_Coord my,int key,void *xev) {
switch(event) {
case FL_DRAW:
draw_newobject(ob);
break;
}
return 0;
}

FL_FORM *form;

FL_OBJECT
*newobject;

int main(int argc, char *argv[]) {
fl_initialize(&argc, argv, 0, 0, 0);
// create form
FL_OBJECT *obj;
form=fl_bgn_form(FL_NO_BOX,600,500);
obj = fl_add_box(FL_UP_BOX,0,0,600,500,"");
newobject=fl_add_newobject(FL_NORMAL_NEWOBJECT,100,100,400,300,"newobject");
fl_end_form();
//
fl_show_form(form,FL_PLACE_MOUSE,FL_FULLBORDER,"NEWOBJECT form");
fl_do_forms();
return 1;
}

----------
X-Sun-Data-Type: gif-file
X-Sun-Data-Description: gif-file
X-Sun-Data-Name: newobject.gif
X-Sun-Encoding-Info: uuencode
X-Sun-Content-Lines: 128

begin 600 newobject.gif
M1TE&.#=A8@(2 N, *&AH5E96?3T]-[>WBDI*<S,S&9F9O__ +>WMP
M_Y@ "P 8@(2 @ $_G#(20>X..O-N_]@*(YD:9YH
MJJYLZ[YP+,]T;<-5/AA\WQ^WH'!(+!J/R*1RR6RJ=C[? 1KE':K8K';+[7J_
MX+!X3"Z;S^BT>LUNN]_PN'R>I5:GVJMNS^_[_X"!@H.$A8:'B(F*BXR-CH^0
MD9*3E)5^>GE4!YN<>IV?H*&BHZ2EIJ>HJ:JKK*VNK["QLK.TM;:WN+FZN[@&
M Z _FEN!=,7&Q\C)RLO,S<[/T,R:PG5?5]'8V=K;W%\8W>#AXG'3/UIV6]?C
MZ^S;WSP /1L&%U7U/AE1&OKQ\/OR[SK8Z]>NH,&#/LI9.6<-H<.'<M[1 \C/
MGT6*] AFO,CQ7L6-_ABQ>(1(LN0SA0;45=$$S)S)ES"]@20X<F8_CR-QWM2H
M<Z"6F@ #2JQWC^C.F$B3)@S6B:&5!%"AVE&IM.K+>$5#4C2*CR?-FQ]!=OVI
M,6S1HV>Q<K7*%N(O3D!72HF*CFK;NP;58@W:<RU'L?G,!A;K,TM/FUXOQL7+
M6-Q@IT^E1K';N'(WM%K]S=-ZN.SAL8;+@K;YES1ARZC=283\%%W*U+#=!<VL
MV'/BVJ.!+CZ=^^CILZ5C"V?VN-I<UY2'*S?V]:M(WZ!S0@<L&O#HPJ9K N>]
MO/N<XEA<NW[MO3R=VQD';^>GO;C.Q^ZK_U5O&[?Y^W# R_62'+]_DJO]_B<@
M8_I%,1X6_0VHX((,-OA=@.$UY."$%%9HH1@%3G;*A1QVZ&&%&7XHXH@D7AAB
MB2BFJ&)Y@UGBXHLPQBCCC#36:..-..:H8R'JM,C+CT &*>201!9IY)%()JGD
MDKKPM>*34$8IW& %5&GEE5AFJ>667';IY9=@ABGFF&26:>:9:*:IYIILMNGF
MFW#&*>><=-:)I9,\%"#EGGSV"9&>FA%4 %^%FKHH=E4B:<!@Q**Z*.01@J'
ME8LV2D F&:JZ::<=NKIIZ"&*NJHI)9JZJFHIJKJJJRVZNJKL,8JZZRTUFKK
MK;5>62D!O.+JZZ_ !BOLL,06:^RQR":K[*NZ_@;:@Z7+1BOMM-16:^VUV&:K
M[:?-IB<HKY=N*^ZXY)9K[KGHINMJMU2"J^Z[\,8K[[STUJLJNQ)!:^^^_/;K
M[[\ !XNO1_H&;/#!"">L\+X#?]OKPA!'+/'$%!?;\+/N5JSQQAQW[#&G%^>9
M\<<DEVSRR?6&S.C(*+?L\LLP1ZMRP3'7;//-.*]+J;,B/YSSST '+?3,+ MM
M]-%(DTRTSTDW[?33"2\=+M145VVUO%)?K?767&N;===@ARTVL5^/;?;9:.NL
M*,\K,YWVVW#'#?+.WF+LMMQXYSUVV7KW[;?6?/\M^.!(!T[XX8C;;'CBC#=>
M\N*.1R[YQ)!/;OGE_@%7COGFG,^K>>>@AU[NYZ*7;GJUI)^N^NK&IL[ZZ[#?
MZGKLM-?>ZNRVYZ[[J+CO[OOOF?8._/"Y"T_\\; ;C_SRIRO/_/.@.P_]])=+
M3_WUCEN/_?:':\_]]WY[#_[X<HM/_OEHFX_^^F&KS_[[@-/=[MWPUZ^W^_;G
MGS3^^O<?-/_^"^#- "C KZ,@ 9,H,D0J, &=HR!#HP@Q2 HP0HNC((6S*#!
M,*C!#O:+@QX,(;U *,(2OHN$)DRAN5"HPA9NBX4NC*&U8"C#&LI,?ODJF@UW
MN$$<$DR'/ SB!WWHL*D)\8C\HB$2EV@K)3+QB;%R(A2GR"HI4O&*I[(B_A:W
M*"HM<O&+G?(B&,>(*3&2$8QF/",7TZA&++*QC51\(QRA*,<Y,K&.=D0B'O,H
MQ#WRD8=^_*,- RE(&1*RD"X\)")5J,A%FK"1CA0A)"/IP4E24H.6O*0%,ZE)
M"7*RDP[\)"@5*,I1&K"4K'*"*E?)RE:Z\I5*J!@J5P4 4Z*LEA,DHMV,*#%<
MVK)DOI38+%45S%]ZK)@0&V:JD&G,C3%38<I$U3.;2;%I(BR:I[(F-2.FS1ZN
MK6X]XR4WMWE,6>HRG!KK)CD3IDZ 8=-4[5RGP>+IKW>6BI[R_!<^DWC.MHD3
M8OO,)[\":B][DHJ@ JT70D?83YKU,J'5-.<W_N?WSX4M%*+QNBC6&@I$BV+T
MH;F<: [IY]&/ E2B@ *G/]-ITI.&-*4496E+%:;1>!ET5#6=:;ER>D*.DI2F
M.F4G2G?U4Z$&]6 \5==-1974HV:KJ>A::JB@ZE1K476%/JTH4*L*L*N.+JLR
MY:J_O$HNJ8**K&)5%EK%9=9/K36MQWJKU\!:,;G"E5AVQ59;/977NP:KKS.D
M:T3]:B_ HDZP$S,L86^EV&GMM5.-72RM(GM#D?ZPJ BCK&1CI5EE/993G=VL
MJT*+K,]NBK2BI>50V>;0<:867JAM'6)!^EIUQ=9BLW5M;=-U6[+EUJ6[15=O
MAV5:30TWN%-=K4I;_@M<Y.Y4N3&MJW//=5R!_;:DTR57=8%5W$QM-[O&A>Y(
MM6I4\(KKN[[J+J;0:U[VRNZZ6S7OMMS;1/B65[Y/%>]ER9M9_,Y7OT4,JW^O
M1=]<V;>_ \96@6FEW@ L&+D/EE6#([Q;"L-JP@E6,(!W*> ,3\O"S#HP4CUL
MU0VC4[HDIA:(U0;3\78XQ6HU\4I1#.-HK?AV(IYGC:5UXRKF.& ]EFR0[_7C
MKN[8QC)F+G:/C*PAIPK#3$Z6DU$%Y2C'-<D=C:^5BS7E+!99GUN^\DN)RM\1
MAYG+6,:LF<\\K"Z;JLIL_FN:RZSC. O+S:6"LYU]A6=2Z7G/C)WSBP%=_JL^
M\^[+8R7TKPS=143WB]%.A32H_JSH64F:6XX>:*5Q=6E/47K3L.IT&#.]+U&W
MU-2;^C2H1RMH&J]:5JC6E*I?K=HQLS;+]Z7UJV(=/%(75M>P;O5@@;UK82>6
MV*$V-FV1G4IEZY;9M::<KQ4*[5;QNHS3IM>U$[KM65>;J<YN[K>S&>XECQN>
MY=;RN>^9[ERO&Z?M1O"[V6WKY>):WO.&=[VC.^Q\@WO?+G:UO\\:[S4/G.
MW^^@#W[:@M>9X6YU.) ACG!I6S; J=X>!..\7YK?.,6;['",_YQ!TO<R"5O
M.,<Y3/*/=SO;\]JV0%]^<99[/.4T%WG'CYUR_I +$^;RDGD^<T[FA6N<Z+=6
M\\-[;O*5G_CF)4>ZO94^<::O]^1@MGK30U[TEA\=ZXG6NM3YS7.KCSW@4'<Y
MV!^M]:W_O.9/+SO3SS[RM'_=Z3.V.\7IOO-E]YSO-I?[W]>N:;$3OM1M!WS<
M_8[SP__:\'A7LKH;'_E[&WSPE:<ZRLWN>&I#GNM)IW/5.9]YT6]^[IW7=N)3
M'_/5E][H>V=]T%T/^JF;/NNDKSW9&1]UV6>4]F_7>>!YK_;7>SWVQM<[Q!6?
M=\%37O=H=W[ODR_]XD._[M6_^_7[_FS,;W_XW7]^\+NN?(8S7_+NGO[W%Q]^
M]8\_]+!?ON]A"_R(_GD;I[#,O_[WS__^SV#^[T)0&: I"E" !GB ")B "KB
M#-B #OB $!B!$CB!%%B!%GB!&)B!&KB!'-B!%WA^EK=T!U5+'EB")GB"*)B"
M*KB"+-B"+MB!(*AYN'=0F/*"-GB#.)B#.KB#/-B#"A"#MQ=V^!< /EB$1GB$
M2)B$2HB"0!A_WE6#2QB%4CB%5%B%.=B$Q_>$5KB%7-B%7OB%#(B%Y6=R8%B&
M9GB&:+B#8IA]6IB&;OB&<!B'%KB&Q->&<GB'>)B'<$B'[1=>>OB'@!B(5LB'
MXM9P@GB(B)B(/$B(YG9:BOB(D!B))\B(DV=<DGB)F)B)$4B)Z>==FOB)_J#X
MB9R(;X88BJ9XBHDXBI?GAZC8BJZ(AZHH@JSXBK18BV88BZ,'6D1HB[S8BX,(
M@+;E5KXXC,2HA+AX>HY8C,JXC#IXC#.8C,P8C=*H@LXHA* UC=B8C3 (C+PE
MC-KXC> X@=7(=GP5CN9XC@LXCH4'6>C8CNVHCHA7CNXXC^ (CX_'CO28C]AH
MCYZ'C_KXC\O(CZHGCP!9D,,HD*U'D :YD+6(D+.GD P9D:CHD+\'D1)YD:+(
MC<+EC1C9D9I(D?1GD1XYDHH(D@'(D229DJFHD=2%DBKYDH!HDL$HDC!9DW$H
MD]U(DS:YDVB(DQNIDSP9E%_HDRT)E$)YE+](_GUU" !(V91@2)3F,DU,Z914
MN850^5Q&695:Z8-7J5TNN95@:81=.2Y2&99F>81C>5Y?>99L>8-I^5]9V99R
M.8DL&95K.9=XR81UB97^F)=^J9=*V8<.MH3^5YB&>9B(F9@:4%I 5Y%]V8,9
M<( (,)F469F6>9F8F9F:N9F<V9F>^9F@&9JB.9JD69JF>9JHF9JJ>9D L)JE
M:5P8X%MPUWQ+6807H "NF9NZN9N\V9N^^9O &9RHV9K""9H.9E>J-I6+6(#%
MV9S.^9S0&9W2.9V829S4B9ENARO)N8A,>9W>^9W@&9[B*9W6.9['^2O;V8S,
M.9[LV9[N^9[PF9GE_LF>V<E@C1F2C_F"W1F?_-F?_OF?Q3F?]$E6Z8F#^PF@
M")J@"KJ@G2F@[$F@]WF2<6F"!\J@%GJA&,J?#OJ@[S6;Z$>*ENB6N)FA)%JB
M)GJ=&SJ>!7!5!:J?(WJB,!JC,KJ;*3J> % !N:A(9B+T.B"%3JC0!JD0NJ9
M-6JC.#HK+=J"13JD3-JD,;JDX7FC]JFC,FB-/:JD3IJE6CJC4 J>-WJD412A
M,YF?*]BE6WJF: J?9NJ=7PJF(4:E04B.9)J"/YJF=GJG:@J@7RIA8IJ3<\J$
M+XJG@CJH4:JG5A*F<&ITRJFD@4JHCOJHS[FF;'JH%]:G/_FGD]BHD+JI_IS*
MFY**HI3ZIL+'?H7HB?K9J:B:JKGYJ=39IH@ZJK0IF(O*@JRJJK9ZJ[5*GJ'*
M8N27?;-:IK<:K,)*I(9:):_:J[5YJL.ZK,Q*F;D:G:Y:J8GJ=;]*C<UZK</Z
MK- 9K:**K+)J@]J*K>+:I.'JG-S*J_!'K> ZKNS:J>7:G.>*8]-J=]5*I^UZ
MKX_ZK@&ZJ_(*JQ^ZBJ;JH_@ZL(*JK\(9KSXVK[ZZK@3;L&AJL,&)L*N2I,#J
ML!:;I1 +G!)+9 J;K )[L2 [I!G[FQO[9)9:E)A*H2&[LD ZLKY9LE1VLG8Y
MH1SHLBQ[LZU:K&[:K]Y:JNO%L#@;M!AJLY[*_J\)ZZ\[BHPA^K%"V[0+2K0T
M:K03*[-\>8W*ZK18JZ<Z>ZSI2J] F[5@&Y]0JYLPZV4=^ZU7&[9JVYYCNZI2
MR[%(6Z5R:K5,N[9V6ZC_6;9O1K5>2;,;V+9W&[C$FK=O:[)GZ[.#F;:"N[C;
MNK72&K=QNHYTBZ6,6[F1ZKC=VK4+J[B6V[DOB[GH:GN*^K6>6[HT"KH\J[D>
M2[FFV[JKBKI'V[.-&+"LZ[JV.YRP.[6'.[L_R[FW^[NA";BKJ;=YQK=D>9=,
M"+S*.YK"JYK$ZV?&JY9^JX'-N[Q86[W#6;@QN[N5V+MU:[W@*Y^Y"[>RV[V)
M^[WAF[[..KZ&"[FC_NN[ZAN^V'N:SWMHW-N)YUN[\:N^\VN:]=MH]PNBM$NK
M^UO _5N:_QLJ%&NM!1R_!TR:"3QIT0N7*5N"#]S !'O!HAG!F!; .N]^HO!
MRZO!P:N]9NN^Z@J_(GR[) R:'.QI$ZPM9:G"*^RZ+?R9+SQJ'BR+ URQ-3S"
M[+N]*.RU-/S#I7O#1&K">[O#/+JT(6S$-AS$)UR^^%NOR0O%P(O$#:K$Q<O$
M2MO##(S%+"S%2SS$FXN^8GS$9-S%9KRZ!)S&MJO%G)G#<^/%S^C$;PS'K2O'
MFTG'J1;#^36]&<C'>NRN:PR]=FRE>.S#A>RYA"R?7(S(;8RV:-S(B_O(_M49
MR?8[R8AKQ9-HR6I,N,;ZN%0LP""<QZ!<N9C,FIH,P)S,N_F+RJE\R8>\R:7\
MP;',R+,LN*MLF7XL:X"L88*,@;V\RVE:S,[:R@H<S 2&O)]LS+0LRCL;NZI+
MR4\,S6&+S)/YR[V6R'-[I;J,S6JKS0C S=CFS9);BM<LSM=;RZY\RSQ\=47,
MSD%+SN8< ,FYB^M,ST)KS\HLP>@<C\,\A_R\MOX\RIDKNL?GR19<T./LSLL<
MT/=8P3#HT-D,T0#]RN:;R_9JT5E[T-.LNQJ-OZ?<T1[MM"#-M0JM?"0HRR>-
MLRE-RM6,N&"LLB_=M#&=T+LGF(MLTS==SQC=_L$C;<KJ?,4_#=-!#<,2K5"*
MV=1._=10#4M)K<-#S37D?-3]_,]"#<]:<]58#=-:K=15O35>_=4L>\\-QF-F
MS<YHS<PF4]9K#;)MO=1) ]=Q;;%S/=9=?=?0G-=<?35VS=<9'-94_==6$]B"
MC:]^/=-B@]B)W:Z+O=)HX]B//:Z1O=-C0]F5C:V7'7UGH]F;W:R=C7V?'=J-
M/-K<E]FF7<BH#7ZJO=IPW-JDVMBP'=N$7<=Z#=BUG<:R':NOO=M0W-O_2M;
MC<7"G;2'7=S!?=M_3-=( ]K*C:K'+;=0 ]W1S:G3';E/8]W7#:G9#3?<W=V.
M^MUO$][B/:CDG3;F_GW>>)K>D\W>#>S>I0W?^RO?9K/>]/VPS W,SGTT^)W?
M6VK?OPW@X"O@M$W@\KO?W9S;R8W@!:[@Y\S@5?/?#LZD!AXV%%[A0GKA8)/A
M&MZR$([/;@U, ?#A61SB:8UD)OZ['-XUM;3B+(SB(PY,,&[#5Z+2F#W@-=ZY
M;1K2Y,O8![[CCGSC,BW9[RWD0R[C_?W<2&ZY/>[C[6O8@%WB37[)6(+CGJW>
M5<[+68+EI%W>6VZW3P[E40[D]TWE80ZV8\ZG2]XT'I[F:MKE;"[A5OWF<"Z>
M%R#G<R[E'7[G-SOF".WEJ2TW%^#G%YOG6I*C= XV59(!ALZN&< E]=7F_E5S
M)5%]Z9B>Z9I> E_2H8LN-G82ZJ(^ZJ1>ZJ9^ZJB>ZD3NZ7Q^-JK^ZK >Z[(^
MZ[1>ZUN"GC.>,[:^Z[S>Z[[^Z\!.YGMNYFV7/+E>['"3XLB^?KZ][,9.Z<[.
M.,H>[1=T[-2^-]9^[>V3[=K>-=/>[=[TZ>">/=P^[E?S[>9>3^6>[E2#[NS.
M,.O^[D[C[O+.4-!>[W%#[_AN4_&^[T:C[_ZN5/T>\$ #\ 1_+@9_\%]U[PH/
MZ@/?\(KS\! ?,PD_\7/%\!:_-16?\=>R\1Q_6!C_\94N\2*_0"1?\DIS\BCO
M,?A2 <.]\F]S)3GP R\/\^EC)2AQ )8B #S?NO,^__- '_1"/_1$7_1&?_1(
MG_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_59+_/!0/.\PO5B/_9D7_9F
M?_9HG_9JO_9LW_9N7_4X__56,"AO7_=V?_=XG_=ZO_=\W_=^?_15DO/!/OB$
M7_B&?_B(G_B*OR8Y/_.2\OB0'_GGX/@I<2#D(?F8G_F18OEXD 4)HOF@'_HI
DPOF<O^FF?_JHG_JJO_HQ0/JDP/JP'_NR/_NT[]1O(0H1 [

end
_________________________________________________
To unsubscribe, send the message "unsubscribe" to
xforms-request@bob.usuf2.usuhs.mil or see
http://bob.usuf2.usuhs.mil/mailserv/xforms.html
Xforms Home Page: http://bragg.phys.uwm.edu/xforms
List Archive: http://bob.usuf2.usuhs.mil/mailserv/list-archives/