SVG出力の Mac Safari 対応について、一旦終了し、また、iPad版の開発を再開。
今日はフォント処理を作成。
文字フォントは、ほんとに難しい。9VAeきゅうべえの場合、マルチOS対応で作っており、別のOSで作ったアニメの中の文字が、同じように再現させたいのだが、達成できていない。
OSや環境によって搭載されているフォントが違う
という根本的な問題があるのだが、似たフォントで、なるべく同じようなレイアウトになるようにしたいところだ。9VAeの仕様は
- 文字の外接長方形を保存、その中に文字を収めて描画すればよい
としている。ということで文字の修正は、なるべく同じOSで行ってください。フォントを再現させたい場合は
inkscapeなどを使って文字をアウトライン化
つまり図形にして入れる方法があります。
フォントリストの作成
familyNamesメソッドを使うと取得できるようだ。イタリックとか太字の設定もできるみたい。以下を参照。これでフォントリストを作成し、文字の属性パレットに入れる方向で進める。
とりあえず、文字フォントの変更ができたところ
フォントをリストに入れることができた。ファミリー名は以下のコードで取得できた。
- (void) setFontList{
for (NSString *family in [UIFont familyNames]){
[qvae setIoText:qVAcFOSinp text1:family text2:@""];
}
}
[qvae setIoText:qVAcFOSinp...]は、フォント名を設定するために作った 9VAeの内部関数。
太字、イタリックも簡単であった。以下のようにfontを変更すると太字やイタリックになった。
CTFontRef font0,font=NULL; CTFontSymbolicTraits bit=0;
CFStringRef str = "フォントの名前"; int fh =フォントサイズ;
font0 = CTFontCreateWithName(str, fh, NULL);
if(太字) bit |= kCTFontBoldTrait; //太字
if(イタリック) bit |= kCTFontItalicTrait; //イタリック
if(bit){
font = CTFontCreateCopyWithSymbolicTraits(font0, 0.0, NULL, bit, bit);
}
if(!font) font=font0;
フォントによっては、太字やイタリックがないものがあり、fontが取得できない場合があるので、その場合は、font0を使う。
文字フォントの中に日本語がない場合、ちゃんと別のフォントを使ってくれるみたいだ。文字化けしないのはえらい。
これを、Mac版の9VAeきゅうべえで読み込むと・・・
ああ、やっぱり文字化けしてる。Macには同じフォントがあるが、文字コードによってフォントを切り替える仕組みが入っていないようだ。もともとフォントの互換性がないので諦める? iPadでフォント指定して入力した日本語が全部文字化けするかも。