3-1.文字のレンダリング


 [前のページ]   [目次に戻る]   [次のページ] 

文字のレンダリング(描画)について

はじめに

Famous Writerには、メッセージレイヤー(*MesHead,*MesBody)はもちろん、レイヤー(&Layer)、選択ボタン(&B)など、個別の部品に対し、テキストを描く機能があります。

メッセージレイヤーに対してはインライン行を使い、他の部品には&Layer.Text等の命令を使います。
ともに、文字サイズや色の変更、ルビなどのインライン命令が使えます。

全角変換について

半角文字は全角文字に変換して表示されます。
OSやフォントの違いで、一行当たりの文字数が狂うのを避けるため、このような仕様になっていることを頭に入れておいてください。
逆に申しますと、別のOSで実行する時でも、文字数が変わることはありません。

これにより、インライン命令で変数表示をする時など、全角にする手順はございません。直感的に埋め込んでいくことができます。
なお、表示のためだけに変換いたしますので、内部では半角のまま保持しております。

禁則処理

Famous Writerの文字描画処理部は、以下の文字が行末になるよう、簡単なぶら下げ禁則で表示します。

)〕]}〉》」』、。,.ー〜−=…‥・?!
ぁぃぅぇぉっゃゅょゎァィゥェォッャュョヮ゛゜ヽヾゝゞ々

なお、スタイルシート風命令(後述)のLine-Breakを使うと、禁則処理のON/OFFができます。これは個別の部品ごとに設定できます。

インライン行のセリフ表示

【】内はHead、それ以外はBodyといいます。
*Mes.AutoNameMode 命令を使用すると、Bodyの2行目以降が自動的にインデントされます。
平文(【】を使わない行)は、インデントされません。
この機能を使うと、セリフ表示が簡単にできます。

*Mes.AutoNameMode = 0;
【紀貫之】「やまと歌は、人の心を種として、/よろづの言の葉とぞなれりける」

*Mes.AutoNameMode = 1;
【紀貫之】「やまと歌は、人の心を種として、/よろづの言の葉とぞなれりける」

# 平文
やまと歌は、人の心を種として、/よろづの言の葉とぞなれりける。

# 以上、出典:古今和歌集・仮名序

上記のテキストは、以下のようにインデントしてレンダリングされます。

3-1-3

自動インデント機能を使わない場合は、【】を使わずに全て平文として記述いたします。
もしくは、*Mes.AutoIndent 命令でON/OFFができます。

スタイルシート風命令について

はじめに

色・大きさ・位置などを指定するには、普通はインライン命令を使いますが、部品ごとのデフォルトの設定もすることができます。
他にも、インライン命令ではできない字間・行間・位置揃え・縦書きなども、部品ごとに設定することができます。

その表記は、Webでおなじみのスタイルシート(CSS)を参考にし、ある程度統一されてるんで、このページではそれについてご説明申し上げます。
どんな意味なのかわからない場合は、スタイルシートの解説本や解説サイトさんが参考になるでしょう。
ホームページやブログなどで、すでにスタイルシートをお使いの方は、直感的にお使いいただけるかと思います。

サポートしてるもの

以下のものに対応しております。
例えばレイヤーに設定する場合は、&Layer.Font-Size = 18; と書きます。
これらは命令マニュアルにも説明があります。

Font-Size
Letter-Spacing
Line-Height
Font-Style
Color
Shadow
Direction
Text-Align
Vertical-Align
Line-Break
Padding
Padding-Left
Padding-Top
Padding-Right
Padding-Bottom

スタイルシートとの相違点

数値は全てpxでの指定になります。pt,em,%などは使えません。
なお、「px」という文字は書かず、数値だけを書いて下さい。
それから、Font-StyleやDirectionなど、独自の値を指定するものもあるんで、命令マニュアルの当該箇所をご参照下さい。
また、数式も使えます。&Layer.Padding = %hoge +8 , %hoge +4; みたいな書き方が出来ます。

他にも違う点があるかと思いますが、作者はあまり明るくないんで、何か間違ってたらご指摘いただけると助かります。
一応、スタイルシートを目指してはいますけどね。そういうわけで、呼び方にも「風」がついてます。パクリでもありますしね(笑)。

初期値

全てのスタイルシート風命令を取る部品は、Famous Writerの起動直後は以下の値で初期化されてます。

Font-Size      = 24
Letter-Spacing = 0
Line-Height    = 36
  
Font-Style     = Shadow
Color          = #FFFFFF
Shadow         = #000000
  
Direction      = 0
Text-Align     = left
Vertical-Align = bottom
Line-Break     = Normal
  
Padding-Left   = 0
Padding-Top    = 0
Padding-Right  = 0
Padding-Bottom = 0

行のレンダリング

行揃え

Text-Align と Vertical-Align は、それぞれテキストの進行方向進行方向に対して垂直方向になることに注意してください。
横書き(Direction = 0)の時は、画面に向かって横方向が Text-Align、縦方向が Vertical-Align になりますが、縦書き(Direction = 1)の時は、画面に向かって縦方向が Text-Align、横方向が Vertical-Align になります。

また、Vertical-Align は、Line=Heightをベースラインとして計算いたします。
厳密に申しますと、フォントによって揃えるのに必要な情報がまちまちなため、数ピクセルのずれが生じることがございますが、おおむね以下の図のようにレンダリングされます。

3-1-2

実装方法について

setting.txt

setting.txtでは、メッセージ関係(*MesBody.〜、*MesRect.〜)と、基本プロパティ(*Text.〜)を設定します。
基本プロパティは、本編で使う&B.〜などの命令の元になる値です。
例えば、*Text.Letter-Spacing = 5; としておくと、本編中でも自動的に&B.Letter-Spacing = 5;になってます。
そこから変更したい場合は、改めて&B.Letter-Spacing命令で、別の値を指定してください。

基本プロパティの継承

基本プロパティは、要するに、スタイルシートで言うところの「継承」的な動作になります。
相関関係をまとめると、下の図のようになります。

3-1-1

Famous Writerの動作仕様は、まず、setting.txtの解釈終了時に、全てのレイヤーに対して、その時の基本プロパティで初期化します。
つまり、*StartScenarioで書いたファイルに飛ぶ直前に、setting.txtで書いた*Text.〜のプロパティが、全てのレイヤーに設定されてます。

レイヤーに関しては、&Layer.Clear命令(またはそれに相当する命令)で、その時点での基本プロパティの値に初期化されます。
選択ボタンは、&SelectButton.Set(またはそれに相当する命令)で、その時点での基本プロパティの値に初期化されます。
プログラム的に申しますと、選択ボタンはこの命令の時に1個ずつインスタンス化するんで、その時に基本プロパティの値をコピーしてきます。
&SelectButton.Draw命令でユーザーの操作が終わると、ボタンは破棄されるんで、常に&SelectButton.Setでは基本プロパティが使われることになります。

いずれにしろ、「その時点」なので、本編中で*Text.〜の値を変更した場合は、当然その時の値になります。
が、本編中で使う場合は、セーブファイルとの絡みがあり、使い方によってはロードの時に正しく復帰しない可能性がありますので、十分に仕様を理解した上で動作チェックしてください。

継承の実際のところ

作者としては、ボタンの生成時に、いちいちスタイルシート風命令を書かなくても済むようにという意図で、継承の機能をつけました。
上にある「初期値」ではない設定にするためには、ボタンごとにスタイルシート風命令を書くことになり、さすがにそれは面倒くさかろうと思いましたので。
また、個人的に、ボタンなどはある程度見た目が統一されていたほうが、ユーザビリティとしては宜しいかと思いますので、*Text.〜で一括して設定して欲しいという意図もあります(もちろんこれは作者Ming.個人の考えで、強制するものではありません)。
いずれにしろ、慣れて使いこなしていただければ幸いです。


 [前のページ]   [目次に戻る]   [次のページ]