TWEFONT

フォント定義や描画

namespace TWEFONT には、フォントの定義やフォント描画のための手続きをまとめています。

このフォントライブラリは M5Stack 標準のライブラリのフォントには準じていないため M5Stackでのフォント描画APIなどで使用することが出来ません。

フォントの生成

フォントはFontDefクラスにより管理されます。フォントごとに用意されるFontDefクラスオブジェクトのジェネレータ関数により生成され、ライブラリ内部で生成時に指定したフォントIDと紐づけて管理されます。フォントは最大7つまで定義できます。フォント作成時に字間・行間・倍角を指定することができます。同じフォントに対して複数のフォントIDの登録が可能です。

下記の例では、フォントID 10 に16ドットの東雲フォント(縦倍角・横倍角指定)を、フォントIDを11に同じフォントですが倍角指定なし、行間を1ピクセルとしたフォント定義を行います。

TWEFONT::createFontShinonome16(10, 0, 0,
        TWEFONT::U32_OPT_FONT_TATEBAI | TWEFONT::U32_OPT_FONT_YOKOBAI);
TWEFONT::createFontShinonome16(11, 1, 0);

コンパイル時に、ジェネレータ関数createFont???()を呼び出されたフォントのデータがリンクされます。

フォントの登録した種類だけROM容量が必要になります。最小限のフォントを選択するようにしてください。

フォントデータについて

本ライブラリには、作者が事実上パブリックドメイン(著作権等取扱はソースヘッダに含まれるクレジットを参照ください)を宣言しているフォントをいくつか含めています。

本ライブラリに含めるにあたって、以下の調整を行っています。

  • 大本がBDF形式を変換し、描画ルーチンに適したデータ構造とした

  • これらフォントをUnicodeとして取り扱うための参照テーブルを用意した

  • latin1補助文字 U+00A0~u+00FFについて、フォント定義があるものについては収録した

  • JIS X201 半角カナ U+FF61~U+FF9F について、フォント定義があるものについては収録した

  • 常用漢字(2645 文字)のフォントデータと、全収録(東雲フォントのみ、一部未収録字形があります)を用意した

日本語フォントのジェネレータ

ジェネレータ関数createFont???()には収録文字数に応じて3種類のジェネレータを用意しています。文字セットの生成は{MWM5ライブラリ}/fontsフォルダにあるスクリプトによって行います。

ジェネレータ

ワイド幅 文字数

収録

createFont???_mini()

576

ASCII, latin1拡張, JIS-X201(半角カナ:0xA1-DF), かな,カナ,記号(選別), 漢字(選別:MWM5ソース中に出現する文字をスクリプトにより抽出・追加), スクリプト指定文字

createFont???_std()

createFont???()

2645

ASCII, latin1拡張, JIS-X201(半角カナ:0xA1-DF), かな,カナ,記号,常用漢字,スクリプト指定文字

createFont???_full()

6867

ASCII, latin1拡張, JIS-X201(半角カナ:0xA1-DF), かな,カナ,記号,漢字,スクリプト指定文字

全収録版(_full)は字形データが多いためより多くのROM容量が必要です。同じフォントサイズのデータで常用版と全収録版の両方を登録する意味はありません。常用漢字版の字形データは全収録版に包含されるためです。

東雲フォント (12,14,16ドット)

●東雲フォントライセンス
																	2001
									 The Electronic Font Open Laboratory
										http://openlab.ring.gr.jp/efont/

このアーカイブに含まれるすべてのフォントデータ、ドキュメント、スクリプ
ト類はすべて Public Domain で提供されています 。

但し、日本に於いては現時点で著作権を放棄することは法律上不可能であり、
AUTHORS に列挙されている作者がその権利を行使しないと宣言することで実質
的な Public Domain であるとします。

自由な改造、他フォーマットへの変換、組込み、再配布を行うことができます。
同時に、これらはすべて完全に無保証です。

12,14,16ドット版をライブラリに含めています。

常用漢字のみのジェネレータ (createFontShinonome12???(), createFontShinonome14???() , createFontShinonome16???())を呼び出します。

MP+フォント (10ドット, 12ドット)

 M+ BITMAP FONTS            Copyright 2002-2005  COZ <coz@users.sourceforge.jp>
 -

 LICENSE




 These fonts are free softwares.
 Unlimited permission is granted to use, copy, and distribute it, with
 or without modification, either commercially and noncommercially.
 THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.

ジェネレータ createFontMP10???()または createFontMP12???() を呼び出します。

8x6 LCD フォント

ジェネレータ createFontLcd8x6() を呼び出します。

latin拡張文字や日本語フォントは含まれません。

このフォントはいずれかのジェネレータ関数createFont???()が呼び出されたときに、デフォルトとしてフォントID=0に登録されます。

フォントIDについて

フォントIDは作成したフォントごとに割り当てられます。

IDは 0..32 の値を指定可能ですが、ユーザが登録できるのは 1..32 で最大7フォント登録できます。

ID=0 のフォントは 8x6 LCD フォントに割り当てられます。

フォント情報の取得

フォント情報にアクセスするためには、queryFont()によりFontDefオブジェクトを取得し、諸情報を得ます。

auto&& font = queryFont(10); // ID10のFontDefオブジェクトを参照
TWE::fPrintf(the_screen, "\nFont: %s\n      ID=%d H:%d W:%d W_CHRs:%d",
			font.font_name, // フォント名
			font.get_font_code(), // フォントID (=10)
			font.height, // フォントデータの高さ(行間は含まれない)
			font.width, // フォントデータの幅(シングル幅、文字間スペースは含まれない)
			font.font_wide_count // ダブル幅の登録文字数
			);

ターミナルでの使用

ターミナルにフォントを指定するには、フォントの生成を行い、フォントIDをターミナルオブジェクトに指定します。フォント指定後はforce_refresh()メソッドによる再描画を行います。

// ターミナル the_screen の宣言
TWETerm_M5_Console the_screen(64, 20, { 0, 16, 320, 192 }, M5);

void setup() {
    // ... M5の初期化など
    M5.begin(true, false, true, false);
    
    // フォントの生成と登録
    createFontMP12(13, 0, 0);
    the_screen.set_font(13); // フォントIDの指定
    the_screen.force_refresh(); // 再描画
}

ターミナルのフォント変更は、set_font()によりフォントを指定し、その後、clear_screen()force_refresh()を呼び出します。

the_screen.set_font(11);    // フォントの指定
the_screen.clear_screen();  // ターミナルを文字バッファをクリアする
the_screen.force_refresh(); // 完全再描画を行う

フォントの描画について

drawChar()関数を用いて描画することができます。

最終更新