Module noddybox.bitmapfont ModuleInfo "Framework: Simple Bitmap Font Routines" ModuleInfo "Copyright: Public Domain" ModuleInfo "Author: Ian Cowburn" ModuleInfo "Version: $Revision$" ' $Id$ Import brl.Max2D Import brl.Basic Strict Type BitmapFont Const NOCHR=95 Field img:TImage[NOCHR] Field height:Int[NOCHR] Field width:Int[NOCHR] Field is_fixed:Int Function Load:BitmapFont(path:String) Local fnt:BitmapFont Local str:TStream Local magic:String Local f,x,y str=ReadStream(path) If (Not str) Then Return Null fnt=New BitmapFont magic=ReadString(str,4) If (magic<>"BMF1") CloseStream(str) Return Null EndIf fnt.is_fixed=Readint(str) For f=0 Until NOCHR fnt.width[f]=Readint(str) fnt.height[f]=Readint(str) fnt.img[f]=CreateImage(fnt.width[f],fnt.height[f],1,0)'MASKEDIMAGE)'FILTEREDIMAGE|MASKEDIMAGE) Local pm:TPixmap=LockImage(fnt.img[f]) For x=0 Until fnt.width[f] For y=0 Until fnt.height[f] WritePixel(pm,x,y,Readint(str)) Next Next UnlockImage(fnt.img[f]) Next CloseStream(str) Return fnt End Function Method DrawColoured(txt:String, x:Int, y:Int, red:Int, green:Int, blue:Int) Local f,r,g,b,c Local xs#,ys# GetScale(xs,ys) GetColor(r,g,b) SetColor(red,green,blue) For f=0 Until Len(txt) c=txt[f]-32 DrawImage(img[c],x,y) x:+width[c]*xs Next SetColor(r,g,b) End Method Method Draw(txt:String, x:Int, y:Int) DrawColoured(txt,x,y,255,255,255) End Method Method CentreColoured(txt:String, y:Int, red:Int, green:Int, blue:Int) If is_fixed DrawColoured(txt,GraphicsWidth()/2-Len(txt)*width[0]/2,y,red,green,blue) Else DrawColoured(txt,GraphicsWidth()/2-TextWidth(txt)/2,y,red,green,blue) EndIf End Method Method Centre(txt:String, y:Int) If is_fixed DrawColoured(txt,GraphicsWidth()/2-Len(txt)*width[0]/2,y,255,255,255) Else DrawColoured(txt,GraphicsWidth()/2-TextWidth(txt)/2,y,255,255,255) EndIf End Method Method TextWidth:Int(txt:String) Local w Local xs#,ys# GetScale(xs,ys) For Local f=0 Until Len(txt) w:+width[txt[f]-32]*xs Next Return w End Method End Type