summaryrefslogtreecommitdiff
path: root/bitmapfont.mod/bitmapfont.bmx
diff options
context:
space:
mode:
Diffstat (limited to 'bitmapfont.mod/bitmapfont.bmx')
-rw-r--r--bitmapfont.mod/bitmapfont.bmx115
1 files changed, 115 insertions, 0 deletions
diff --git a/bitmapfont.mod/bitmapfont.bmx b/bitmapfont.mod/bitmapfont.bmx
new file mode 100644
index 0000000..86c29f8
--- /dev/null
+++ b/bitmapfont.mod/bitmapfont.bmx
@@ -0,0 +1,115 @@
+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=96
+
+ 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 f,x,y
+ Local r,g,b
+
+ str=ReadStream(path)
+
+ If (Not str) Then Return Null
+
+ fnt=New BitmapFont
+
+ fnt.is_fixed=Readint(str)
+
+ GetMaskColor(r,g,b)
+ SetMaskColor(0,0,0)
+
+ 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,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
+
+ SetMaskColor(r,g,b)
+
+ 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