このドキュメントは CoveredCalc の "カバー" を作成する方法を簡単に説明したものです。
このドキュメントと合わせて、すでに存在するカバーを参照し、 その動作を確認するのが理解への近道となるでしょう。 CoveredCalc デフォルトカバー「Adams」をご覧ください。 このドキュメント内でも「Adams」を例に挙げて説明します。 「Adams」は
にあります。
なお、CoveredCalc には Windows 版、BeOS 版、ZETA 版があります。 カバーは Windows 版、BeOS 版、ZETA 版で共通に使えます。 (※ただし、OS の機能の違いにより、カバー定義に記述してあっても特定の環境では無視されるものもあります)。
カバー定義にはバージョンがあります。 このドキュメントは基本的に最新バージョンを対象にしていますが、 特定のバージョンやそれ以降に特化したものについては「 バージョン:x.x~」のような表示を付けています。
カバーは次のものから構成されます。
カバー定義ファイルは XML 1.0 形式で書きます。 このファイルだけは CoverDef.xml というファイル名にしなければいけません。 他のファイルには好きな名前をつけて構いません。 それらのファイル名はカバー定義ファイルに記述して参照することになります。 カバー定義ファイルについての詳細は後述します。
カバー定義ファイル以外のイメージファイルは、すべて Windows の 「ビットマップ形式」で保存される必要があります。
ここでは、例として CoveredCalc デフォルトカバー「Adams」のファイル構成を紹介します。 必ずしもこのような配置、ファイル名を使う必要はありませんが、ひとつの指針にはなるでしょう。
ファイル | 説明 |
---|---|
CoverDef.xml | カバー定義ファイル |
AdamsMap.bmp | カラーマップイメージファイル |
AdamsActive.bmp | アクティブ時のデザインとなるイメージファイル |
AdamsInactive.bmp | 非アクティブ時のデザインとなるイメージファイル |
AdamsPressed.bmp | ボタン等が押されている時のデザインとなるイメージファイル |
AdamsGrayActive.bmp | アクティブ時に無効状態のボタンのデザインとなるイメージファイル |
AdamsGrayInactive.bmp | 非アクティブ時に無効状態のボタンのデザインとなるイメージファイル |
AdamsHotActive.bmp | アクティブ時、"Hot" 状態のボタンのデザインとなるイメージファイル |
AdamsHotInactive.bmp | 非アクティブ時、"Hot" 状態のボタンののデザインとなるイメージファイル |
AdamsCheckActive.bmp | アクティブ時、チェック済み状態のボタンのデザインとなるイメージファイル |
AdamsCheckInactive.bmp | 非アクティブ時、チェック済み状態のボタンのデザインとなるイメージファイル |
AdamsNumFont.bmp | 演算結果表示用のフォントイメージファイル |
AdamsActive.bmp ~ AdamsCheckInactive.bmp が外見のデザインです。 外見のデザインについては、アクティブ時のデザインが最低でも必要です。他のデザインは省略することもできます。
「Adams」では同じイメージファイルを使い回している部分があります。 「Admas」で使っている画像の他にも次のイメージファイルを用意して利用できます。
カラーマップイメージはデザイン上に存在するボタン等のパーツの位置を色分けにより指定したものです。 CoveredCalc ではパーツの位置の指定に座標の表記を使いません。 パーツの位置はカラーマップイメージ上の色によって決まります。 これは、複雑な形状のパーツにも簡単に対応できるというメリットがあります。 ただし、デメリットもあります。 CoveredCalc では複数のパーツを重ねて配置することはできません。
「Adams」のカラーマップイメージを使って具体的な例を見てみましょう。 「Adams」のカラーマップイメージファイルは AdamsMap.bmp です。 これを見ると、各ボタンの部分に色づけがされているのがわかると思います。 通常状態の画像である AdamsActive.bmp と比べながら見てください。 例えば、[1] ボタン(左端、下から 2 番目のボタン)は、カラーマップイメージでは赤色で塗られています。 CoverDef.xml を見ると、
という記述があります。 AdamsMap.bmp がカラーマップイメージファイルであることを記述し、 その中の赤色(#ff0000)に対して "Main_Button1" という名前(id)を付けています。 そして、その id を参照しているところが次の部分です。
これにより、[1] ボタン(class="1")はカラーマップイメージ中の Main_Button1 の名前(id)が付けられた部分、 つまり、#ff0000 の色を塗られた部分ということになります。
このように、パーツの位置は色で指定し、その色に id を付けて参照します。 id はファイル全体でユニークです。つまり、重複するものがあってはいけません。
カラーマップイメージを使って、カバーの透明領域を定義することができます。 透明領域はその部分のカバーの見た目が透明になるだけでなく、その部分が完全にくりぬかれます。 カバーの周囲を透明領域にすることで、カバーの形状を矩形以外の自由な形に定義できます。 ただし、BeOS 版では、OS にその機能がないため、透明領域を利用できません。
「Adams」の CoverDef.xml には、
という記述があります。この mapId で参照している Main_Transparent は次のように定義されています。
これを見てわかるように、カラーマップイメージ中の紫色(#ff00ff)で塗られた部分が透明領域です。
バージョン:1.5~外見のデザインのイメージファイルにアルファプレーンを含めておくと、 アルファプレーンが利用できる環境では一部のピクセルを半透明にすることができます。 アルファプレーンが利用できる環境は今のところ Windows 2000/XP/Vista です。 アルファプレーンの値(アルファ値)を 0 にすると、そのピクセルは透明領域と同じようにくりぬかれます。 カバーの周囲で外側から順にアルファ値を上げていくことで CoveredCalc の後ろにあるウィンドウとの境界をなめらかに見せたり、 アルファ値を使ってきれいなドロップシャドウをつけたりできます。 32 ビットまたは 16 ビットのビットマップ形式がアルファプレーンをサポートしています。
アルファプレーンと transparentRegion タグによる透明領域の定義は併用できます。 transparentRegion タグで定義された透明領域はアルファプレーンの値に関わらずくりぬかれます。 transparentRegion タグの usedAgainstAlpha 属性に "false" に設定しておくと、 アルファプレーンが利用できる環境では transparentRegion タグの定義は無効になります。 「Adams」ではこの属性を使ってアルファプレーンが利用できる環境ではアルファプレーンを、 そうでない環境では transparentRegion タグで定義された透明領域を使うようにしています。
演算結果を表示するための文字の画像がフォントイメージです。
フォントイメージは、電卓上のディスプレイに表示する文字を「0123456789ABCDEF.-」の順に、 左から右へ横 1 列に並べたものです。 フォントイメージファイル中のすべての文字は、 同じ幅・高さである必要があります。
「Adams」のフォントイメージで具体的な例を示します。 まず、CoverDef.xml を見てください。
という記述があります。AdamsNumFont.bmp がフォントイメージファイルです。 type というのはフォントイメージファイルのタイプです。現在は number しかありません。 次の width と height の指定は、フォントイメージファイルの中に入っている 1 つの文字の幅と高さを表します。この場合、幅は 13 ピクセル、高さは 21 ピクセルです。 charSpace は文字と文字の間のピクセル数を記述します。これは実際に表示されるときの間隔です。 フォントイメージファイル中の間隔ではありません。 フォントイメージファイルでは必ず間隔を空けずに文字を並べる必要があります。 最後の transparentColor はフォントイメージファイル中の透明色です。 ここで指定した色は電卓上には描画されません。
カバーを構成するファイル群はアプリケーションの実行ファイル(Windows なら CoveredCalc.exe、 BeOS/ZETA なら CoveredCalc)と同じ階層にある Covers フォルダの中に そのカバー専用のフォルダを作って格納します。このフォルダの名称は他のものと ぶつからない限り何でも構いません。 しかし、他とぶつかるかどうかは実行するユーザの環境によって異なります。それを完全に避けることはできません。 フォルダ名の一部にカバーの作者名を入れるのも 1 つのアイデアでしょう。 あるいは、他の人が思いつきもしないようなユニークで素敵な名前を思いついたなら、 それをそのまま使ってもいいでしょう。 ただし、ぶつかったときにユーザがフォルダをリネームするだけでうまくいくように、 このフォルダ名には依存しないようにするべきです。
カバー専用のフォルダの下はどんなフォルダ構成にしようが構いません。 しかし、カバー定義ファイル(CoverDef.xml)は、 カバー専用フォルダの直下に配置する必要があります。 つまり、
に配置する必要があるわけです。 CoveredCalc はこのパスに存在する CoverDef.xml だけをカバーブラウザに表示します。 (より正確には CoverDef.xml が存在しても、その中に書かれた情報が読み込めなければ、 カバーブラウザには表示されません)
カバー定義ファイル以外のファイルのファイルパスやファイル名は、 全てカバー定義ファイルに記述されます。 その記述はカバー定義ファイルのあるフォルダ(つまり、カバー専用フォルダです)からの相対パスで指定します。 このときのパス区切り文字は(Windowsであっても)"/" です。 相対パスに ".." を使えば、カバー専用フォルダから飛び出して、 別のカバーのフォルダを参照することもできるはずですが、 それは推奨されません。
バージョン:1.2~CoveredCalc 1.4.0 以降では、日本語以外の言語用にユーザーインタフェースを切り替える仕組みが用意されています。 これに伴いカバー定義でも特定の言語向けに翻訳したテキストを定義できるようになっています。
「Adams」のカバー定義で例を挙げます。例えば、Adams カバーの説明は次のように CoverDef.xml 定義されています。
このように、テキストを含むタグに id 属性で ID を付けて(この例では「Description」)、 それを language タグで囲んだ altText タグで参照します。
language タグはいくつでも定義できます。 CoveredCalc は設定で選択されている言語に対応する language タグを見つけると、 その中の altText タグの内容を優先します。上記の例では、設定で日本語が選ばれている場合、 カバーの説明として「シンプルでくせのない電卓」が定義されているものとして扱います。 逆に、設定で選択された言語に対応する language タグが存在しなかったり、 存在しても altText タグで上書きされていないテキストについては元の定義を使います。 例えば上記の例では、設定で英語など日本語以外の言語が選ばれていれば「Simple and Basic Look Cover」を使います。
特定の言語に対する翻訳が見つからなければ元の定義が利用されるという点から、 元の定義には世界の事実上の公用語である英語を用いることを推奨します。
カバー定義ファイルは CoverDef.xml という名前のファイルです。 XML 1.0 形式で記述します。 文字のエンコーディングは UTF-8 固定です。 それ以外は受け付けません。(Shift_JIS などは使えません)
XML についての説明はここでは行いませんが、 よくわからない場合はファイルの 1 行目を
のようにしておくといいでしょう。 あとは HTML を記述するような感覚で記述できると思います。 (HTML もわからない? その場合はサンプルカバーをコピーしてそれを修正すればいいでしょう)
文字エンコーディングが UTF-8 ということに注意してください。 エディタが UTF-8 に対応していないと記述できません。 (日本語版 Windows XP に付属するメモ帳は UTF-8 が扱えます)。 もし、どうしても UTF-8 を使えるエディタが見つからないなら、 コメントを含むすべての記述を半角英数字(といくつかの半角記号文字)だけで記述すれば OK かもしれません。
カバー定義のすべての内容をこのタグの内部に記述します。
version |
カバー定義のバージョンです。 古い CoveredCalc で動作させるためには、小さいバージョンを指定する必要がありますが、 最新版の CoveredCalc で利用されることを前提にするなら 最も大きいバージョンを指定しておけばいいでしょう。
|
---|
1 つのカバーに関する定義をこのタグの内部に記述します。
このタグを複数並べることで複数のカバーの定義を 1 つのファイルに記述することができます。 しかし、現在の CoveredCalc はその 1 つ目の定義しか読み込みません。
1 つのウィンドウに対するカバー定義をこのタグの内部に記述します。 現時点では、メインウィンドウ以外のカバー定義は行えません。
class |
ウィンドウの種類を記述します。現時点では、"Main" 以外は記述できません。 |
---|
このウィンドウに対するカバーの基点を設定します。 基点とはカバーを変更したときに、位置が移動しない点です。 あるカバー A から別のカバー B に変更するとき、 カバー B の基点がそれまで表示されていたカバー A の基点の位置になるようにウィンドウが移動します。
このタグは省略可能です。省略した場合、x = 0, y = 0 が設定されたとみなされます。
x |
基点の X 座標をカバーの左端からの相対座標で指定します。整数を指定します。 |
---|---|
y |
基点の Y 座標をカバーの左端からの相対座標で指定します。整数を指定します。 |
バージョン:1.4~ボタンの上にマウスが乗ったときの動作を設定します。
このタグは省略可能です。省略した場合、steps = 1 が設定されたとみなされます。
steps |
何段階の変化で "Hot" 画像になるかを設定します。 この値が 1 ならマウスが乗ったすぐに "Hot" 画像になります。 この値が 10 なら 10 段階で "Hot" 画像になります。 steps が 2 以上の場合、指定した段階数に達するまでは、 "Hot" でないときの画像と "Hot" の画像が徐々にブレンドされた状態で少しずつ変化します。 |
---|
class 属性で指定した種別のカバー画像を指定します。
class |
カバー画像の種別を指定します。
| ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
src |
画像ファイルのパス名を指定します。 カバー定義ファイルのあるフォルダからの相対パスで指定します。 |
ディスプレイ部分に使用するフォント画像を指定します。 フォント画像のタイプを type 属性に指定します。現時点では "number" のみが指定できます。
"number" タイプの場合、等幅の文字画像を一列に横に並べた画像を指定します。 その画像内には文字が "0123456789ABCDEF.-" の順で並んでいる必要があります。 その 1 文字分の幅と高さを width, height 属性でそれぞれ指定します。 また、描画時の文字と文字の間隔を charSpace 属性で指定します。 transparentColor 属性で指定された色の部分は透明色となり描画されません。
src |
フォント画像のパス名を指定します。 カバー定義ファイルのあるフォルダからの相対パスで指定します。 |
---|---|
type |
フォント画像のタイプを指定します。現時点では "number" のみが指定できます。 |
width |
フォント画像内のフォント 1 つ分の幅を整数で指定します。 |
height |
フォント画像内のフォント 1 つ分の高さを整数で指定します。 |
charSpace |
描画時の文字と文字の間隔を整数で指定します。 |
transparentColor |
透明色を指定します。#rrggbb の形式で指定します。 rr=赤の度合い、gg=緑の度合い、bb=青の度合いです。各度合いは 00 ~ ff の 16 進数で表現します。 (例)#ff9900 |
カラーマップイメージ内の色分けを定義します。定義は color 属性で指定した色に id 属性で指定した名前を付けることで行います。 この名前は button タグや display タグなどの mapId 属性で参照されます。
id |
カラーマップイメージ内のパーツの名前を指定します。 カバー定義ファイル内全体で重複した定義がない限り、任意の文字列を指定できます。 |
---|---|
color |
パーツを色分けした色を指定します。#rrggbb の形式で指定します。 rr=赤の度合い、gg=緑の度合い、bb=青の度合いです。各度合いは 00 ~ ff の 16 進数で表現します。 (例)#0000ff |
ウィンドウの透明な部分を指定します。Windows 版、ZETA 版で効果が出ます。(BeOS R5 版では無視されます。)
アルファプレーンを利用できるシステムなら、アルファプレーンで 0 を指定することでもそのピクセルを透明にできます。 アルファプレーンが利用できる場合にアルファプレーンだけを使って透明部分を定義する場合は、 このタグ定義を省略するか、usedAgainstAlpha 属性を false にしてください。
指定は mapItem タグで定義した id を使って行います。
usedAgainstAlpha |
バージョン:1.5~アルファプレーンを利用できるシステムであっても、 この透明部分定義を有効にするかどうかを指定します。 true を指定すると有効になります。false を指定すると無効になります。false を指定する場合は、 画像のアルファプレーンの値を使って透明な部分を定義することになります。この属性を省略した場合は true が指定されたものとして扱われます。 | ||||||||
---|---|---|---|---|---|---|---|---|---|
mapId |
透明領域に対応するカラーマップイメージ内のパーツの名前 | ||||||||
edgeSmoothing |
バージョン:1.5~透明領域との境界をぼかしてきれいに見えるようにするかどうかを指定します。 アルファプレーンを利用できるシステムでのみ効果が出ます。
|
電卓の結果が表示される部分(ディスプレイ)の位置を定義します。
指定は mapItem タグで定義した id を使って行いますが、ディスプレイの領域は必ず矩形領域になります。 指定された id が示す領域が矩形領域でない場合は、その領域を囲む最小の矩形が ディスプレイの領域として扱われます。
mapId |
ディスプレイの領域に対応するカラーマップイメージ内のパーツの名前 |
---|
電卓上のボタンを定義します。
領域の指定には mapItem タグで 定義した id を使います。
class |
ボタンの種類を指定します。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mapId |
ボタンの領域に対応するカラーマップイメージ内のパーツの名前。 |
ツールチップテキストを表示する領域とそのテキストを定義します。 ただし、バージョン 1.3.0 より前の CoveredCalc はツールチップの表示に対応していません (※表示に対応していないだけで、ツールチップテキストを定義してもエラーにはなりません)。 ボタン等の有無に関係なく、領域さえ定義しておけばどこにでもツールチップを表示できます。
領域の指定には mapItem タグで 定義した id を使います。
表示するテキストはこのタグの内部に記述します。 pre タグや br タグを用いて複数行に渡って記述することができます。
mapId |
このツールチップを表示する領域に対応するカラーマップイメージ内のパーツの名前。 |
---|
タグの内部にテキストを記述するところに使用できます。 通常のテキストでは、連続するスペースやタブ、改行などは 1 つのスペースと見なされます。 しかし、このタグで囲んだ文字列はすべてそのままのかたちで解釈されます。
HTML における <pre> タグとは異なり、開始タグの直後に改行を入れると、 その改行もそのまま解釈されます。例えば、
のように書くと「(改行)(スペース)(スペース)(スペース)(スペース)テキスト(改行)」として解釈されます。
タグの内部にテキストを記述するところに使用できます。 通常のテキストでは、改行はスペースと見なされますが、 このタグの開始タグから終了タグまでを 1 つの改行として解釈させることができます。
バージョン:1.2~lang 属性で指定した言語に特化した項目を定義します。
lang |
対象言語を指定します。 言語は半角小文字の言語コード(ISO 639 に準拠)と半角大文字の国コード(ISO 3166 に準拠)で指定します。 例えば、日本語なら "jaJP" です。 |
---|
バージョン:1.2~CoveredCalc の言語設定がこのタグを含む language タグで指定された言語 の場合に、textId 属性で参照するタグの中に書かれたテキストを、このタグの中のテキストで置き換えます。
ある言語用に翻訳したテキストを定義するために用います。
textId |
対象となるテキストを含むタグの id 属性で定義した ID を指定します。 |
---|
usedAgainstAlpha 属性を誤って useAgainstAlpha 属性と記述していたところを修正した。
誤植の修正と細部の調整。
カバー定義のバージョン 1.5(アルファプレーンの利用)について記述を追加した。
細部の調整。および、スタイルシートの調整。
coverImage 要素の class 属性の省略値の詳細な説明は読みづらいだけなので記述するのをやめた。
カバー定義のバージョン 1.4(無効ボタン画像・チェックボタン画像・"Hot" ボタン画像の定義、基数切り替えボタンの定義、"Hot" 動作設定の定義)について記述を追加した。
カバー定義のバージョン 1.2(多言語化)、1.3(16進数用ボタン定義)について記述を追加した。
全体的に構成やデザインを見直した。
CoveredCalc ver.1.3.0 からツールチップテキストに対応したので、該当する記述を修正。
カバー定義のバージョン 1.1 を公開。
/coverDef/cover/window/button タグの class 属性に「+/-」ボタン用の値を追加した。
正式公開版