Unicode not supported?!?

BlitzMax Forums/BlitzMax Beginners Area/Unicode not supported?!?

Grisu(Posted 2006) [#1]
Hello,

what am I doing wrong here?

Graphics 800,600,0

SetColor 255,255,255
DrawText "Björn",20,20
Flip 

WaitKey 


I HATE asking such simple stuff that should work out of the box. :/

Grisu


assari(Posted 2006) [#2]
The default font probably does not have the non standard characters. Arial.ttf works
Graphics 800,600,0
Local font:TImageFont=LoadImageFont("C:\WINDOWS\Fonts\arial.ttf",12)
SetImageFont(font)
SetColor 255,255,255
DrawText "Björn",20,20
Flip 

WaitKey 



Yan(Posted 2006) [#3]
I guess you have to load a unicode font first?...
Graphics 800,600,0

SetImageFont(LoadImageFont(getenv_("windir") + "\fonts\arial.ttf", 24, SMOOTHFONT)) 

SetBlend ALPHABLEND
SetColor 255,255,255
DrawText "Björn",20,20
Flip 

WaitKey


[edit]
Lummy...
[/edit]


Grisu(Posted 2006) [#4]
Thanks for hint.
But this isn't working under maxgui and using a canvas as it seems.

Also I need this to be cross-platform.
And I doubt mac users will have arial.ttf on their system. :/


Dreamora(Posted 2006) [#5]
Then you will have to add your own font to your app.
The default font only features english characters ... we found that out a few months ago when we tried to solve a similar issue with drawing german characters.

PS: This has nothing to do with unicode. Unicode is needed for asian characters, not for european. Our characters all fit within the ascii.


Grisu(Posted 2006) [#6]
Thanks for the informations.


assari(Posted 2006) [#7]
Grisu, the following code works for me:-
SuperStrict

Local MyWindow:TGadget=CreateWindow("Canvas Example", 200,200,320,240)
Local MyCanvas:TGadget=CreateCanvas(10,10,290,140,MyWindow)
SetGraphics CanvasGraphics (MyCanvas)
Local font:TImageFont=LoadImageFont("C:\WINDOWS\Fonts\arial.ttf",12)
SetImageFont(font) 
SetColor 255,255,255


Repeat
  WaitEvent()
  Select EventID()
  Case EVENT_WINDOWCLOSE
     End
  Case EVENT_GADGETPAINT
    SetGraphics CanvasGraphics (MyCanvas)
    DrawText "Björn",20,20
    Flip
   End Select
Forever
make sure you set the font after the setgraphics command


WendellM(Posted 2006) [#8]
Also I need this to be cross-platform.
And I doubt mac users will have arial.ttf on their system. :/

As for imagefonts, you can load a .ttf from anywhere, not just the windows fonts folder, so you can include the .ttf file with your distribution. By using the same .ttf file on Mac and PC, the output should look the same.

If you want to legally distribute fonts with your app/game, you'll need to make sure that's permitted (I wouldn't suggest trying it with Microsoft's Arial for example <g>). One set of fonts that's allowed to be redistributed (as long as you don't try to sell just the fonts alone) is Arkpandora ( http://www.users.bigpond.net.au/gavindi ). This set has replacements for Arial, Monospace, Times, and Verdana. If you don't feel like messing with the .tgz there, I've mirrored the fonts as a zip at http://astronavis.com/arkpandora204.zip .

These aren't unicode fonts, though they support the umlauted and other accented European characters. For unicode TTFs, one free (GNU GPL) source is http://savannah.nongnu.org/projects/freefont (though the fonts there only support a subset of characters at present).


(tu) ENAY(Posted 2006) [#9]
I sure hope Unicode fonts are supported in Blitzmax one day.
I could really do with being able to use them.


Dreamora(Posted 2006) [#10]
Unicode is already supported ... (came in with 1.16 or 1.18)

You just need an unicode font, blitz own font is english characters only. (for external usage there is toWString / $w)


WendellM(Posted 2006) [#11]
Unicode is already supported ... (came in with 1.16 or 1.18)
You just need an unicode font

Yep. Here's an example:
' adapted from neilo's Arabic version

Strict
Graphics 640,480

' Local font:TImageFont = LoadImageFont("c:\windows\fonts\cour.ttf",24)
Local font:TImageFont = LoadImageFont("c:\windows\fonts\msgothic.ttf",24)
SetImageFont font

Local text$ = ""
Local unicode:Short[8]
Local nextChar:Short

For Local i = 0 To 2 ' 6 To 0 Step -1
	ReadData nextChar
	unicode[i]=nextChar
Next

text$=string.FromShorts(unicode,7)

While Not KeyHit(KEY_ESCAPE)
	Cls
	DrawText text$,10,10
	Flip
Wend

' "Yamato" in katakana
DefData $30e4, $30de, $30c8

' A line of Arabic text
' DefData $0625,$0646,$0643,$0644,$064a,$0632,$064a
Which produces:




Hosh(Posted 2006) [#12]
On my computer the above code doesn't work without a minor change.

Local font:TImageFont = LoadImageFont("c:\windows\fonts\msgothic.ttf",24)

Must instead be:
Local font:TImageFont = LoadImageFont("c:\windows\fonts\msgothic.ttc",24)

To clarify:
msgothic.ttf is instead->msgothic.ttc

So if you had problems with this code in the past, this should help you. You can also try out batang.ttc.

Hope this helps.


Tom Darby(Posted 2006) [#13]
FYI--OS X ships with Arial.ttf.