MODE 22
ON ERROR: OSCLI "REFRESH ON":END
an%=0
c%=1
a$="WOW! Rotating text :-)"
*REFRESH OFF
REPEAT
an%+=1: IF an%>=360 THEN
an%=an%-360
c%+=1: IF c%=16 THEN c%=1
ENDIF
CLG
a%=FNangled("Arial",40,2,a$,an%,512,384,c%)
*REFRESH
WAIT 1
UNTIL FALSE
END
REM Draws text at the specified angle and colour
DEFFNangled(font$,height%,weight%,text$,angle,X%,Y%,col%)
LOCALfont%,oldfont%,L%
DIMU%LOCAL1024:U%=(U%+1)AND-2
SYS"CreateFont",height%,0,angle*10,angle*10,weight%,0,0,0,0,0,0,0,0,font$TOfont%
SYS"SelectObject",@memhdc%,font%TOoldfont%
SYS"SetTextColor",@memhdc%,&1000000+col%
SYS"SetBkColor",@memhdc%,&1000000+@vdu%?71
SYS"SetBkMode",@memhdc%,1
SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,0,0TOL%
SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,U%,L%
SYS"TextOutW",@memhdc%,X%,Y%,U%,L%
SYS"SetBkMode",@memhdc%,2
SYS"InvalidateRect",@hwnd%,0,0
SYS"SelectObject",@memhdc%,oldfont%
SYS"DeleteObject",font%
=0
MODE 22
ON ERROR: OSCLI "REFRESH ON":END
an%=0
c%=1
a$="WOW! Rotating text :-)"
w%=FNstringwidth(a$)
*REFRESH OFF
REPEAT
an%+=1: IF an%>=360 THEN
an%=an%-360
c%+=1: IF c%=16 THEN c%=1
ENDIF
CLG
dx%=w%*COSRAD(an%)+@vdu%!220*COSRAD(an%-90)
dy%=w%*SINRAD(an%)+@vdu%!220*SINRAD(an%-90)
a%=FNangled("Arial",40,2,a$,an%,512-dx%,384+dy%,c%)
PLOT 69,1024,768 :REM Centre of rotation, in BB4W graphics units
*REFRESH
WAIT 1
UNTIL FALSE
END
REM Draws text at the specified angle and colour
DEFFNangled(font$,height%,weight%,text$,angle,X%,Y%,col%)
LOCALfont%,oldfont%,L%
DIMU%LOCAL1024:U%=(U%+1)AND-2
SYS"CreateFont",height%,0,angle*10,angle*10,weight%,0,0,0,0,0,0,0,0,font$TOfont%
SYS"SelectObject",@memhdc%,font%TOoldfont%
SYS"SetTextColor",@memhdc%,&1000000+col%
SYS"SetBkColor",@memhdc%,&1000000+@vdu%?71
SYS"SetBkMode",@memhdc%,1
SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,0,0TOL%
SYS"MultiByteToWideChar",&FDE9,0,text$,LENtext$,U%,L%
SYS"TextOutW",@memhdc%,X%,Y%,U%,L%
SYS"SetBkMode",@memhdc%,2
SYS"InvalidateRect",@hwnd%,0,0
SYS"SelectObject",@memhdc%,oldfont%
SYS"DeleteObject",font%
=0
:
DEF FNstringwidth(a$)
LOCAL @vdu.m.c&, @vdu.l.x%, @vdu.l.y%, ?444
VDU 5,23,16,0|30,11,23,16,64|10,10
PRINT a$;
@vdu.l.y% = GET(0,0) : REM SDL thread sync.
= @vdu.l.x%