How to Skin foobar2000 ざっくり和訳 Part1



これはDAジャーナルの記事「How to skin foobar2000」の Part1の和訳です。
2013年10月の記事ですが、まあ今でもいけてるはずです。
Part1は全体の概要で、Markkoenig氏の執筆。
Part2でslowboyfast氏の実際の描画の仕方、Part3でFlipOut69氏がパネルの重ね方などを解説されています。
日本語がつたなくて意味がとれない場合は、原文に当たってください。

始める前に、Markkoenig氏に一言。文が長えよ。




How to skin foobar2000



Part1-基本
Part2-構成&グラフィックス
Part3-パネル切り替えの作成
Part4-パネルで表示する行が半端になってしまうことの回避法
Part5-要素の相対的な位置とサイズの指定


Image_computer/how2skin_1_img/foobar7_by_markkoenig-d6ri937.png


私はfoobar2000のスキンについてチュートリアルを書くように頼まれた。多くのfb2kユーザーは、配布されているスキンを修正しようとするときはもちろん、単純に使うだけでも難題に遭遇するからである。
私はこの問題についてのエキスパートではない。いくつかのスキンを試してみて、どう動いたかを理解することから始めた。今でもその方法がベストだと思っている。時々ひどくイライラさせられるにしても。
エラーやアドバイス、質問、難問、あなたがやりたいことを共有し、自分自身で試してみてほしい。そうすればあなた自身が新しいエキスパートになれるはずだから。
この良いチュートリアル(旧式のPanelsUIがベースだが)を読んでみることを薦める。非常に有益なHydrogenAudioフォーラム、とその他のリンクをいくつか置いておく。

このページ、「Part1」は全体の概要を示す。;
「Part2」(slowboyfast氏により書かれた)が段階的に、foobar2000の描画機能だけでグラフィックの要素を作成する方法を案内する;
そして、FlipOut69氏による「Part3」がいくつかのカスタマイズ機能の詳細なプレゼンテーションを提案する。
さあ、準備が出来たなら、飛び込もう!



勧告



●互換性の問題を引き起こす可能性がない限り 、常にコンポーネントを最新のものにキープする。
●スキンをインストールするとき、それが指定しているfoobarのバージョンを確認する。 最新のfoobarのバージョンに古すぎるスキンをインストールすることは避ける。
●どういう動作をするものか確信が持てない場合、ファイルをバックアップする。リスクのあるときには現在動いているスクリプトをエクスポートまたはコピーする。
●個人的な忠告だが、異なるバージョン間の互換性の問題を回避するために、クリーンなfoobar2000インストール上でスキンをインストールすること。(特にWSH Panel Mod)
コンポーネントとそのバージョンをチェックし、競合がなければ一つのfoobar2000の上に複数のスキンをインストールすることができる、と言われてはいる。
スキンの一部、または全体を無効にするかもしれないコンポーネントの更新は、注意すること。 しかしそれは必ずしも開発中のコンポーネントが原因とは限らない。
●私はほとんどポータブルインストールを、ノーマルなインストールより使っている。スキンを入れるのに簡単だし、必要なだけ複数のfoobar2000を用意できるからだ。アップデートやコンフリクトの心配をする必要がない。
 あなたの持つライブラリとメディアプレーヤーの設定を維持するために、他のインストールからコアファイル(データベースなど)をコピーしておけばいい。
●コーディングが得意で画像に凝る気がないなら、foobar2000用のコードに直接グラフィック要素を加えることができるだろう。一方、PhotoshopやGimpや、他のプログラムを使用してPanel Stack Splitterで組み立てるやり方もある。



インストール



ダウンロードしたスキンをインストールするときに注意する点:

●その複雑さ。
 ○あるコンポーネントは動作のときに新しいフォルダ、システム・ファイルその他を必要とするかもしれない。スキンについての説明をよく読むこと。
●foobar2000インストールのタイプ。
○ポータブルインストールなら、インストールフォルダに全部放り込めばいい。
○ノーマルインストールでは、典型的な手段は、スキンとコンポーネントをfoobar2000の主要なディレクトリに入れることである。コンフィギュレーションファイルはC:\Users\[あなた]\Documents\AppData[隠しフォルダ]\Roaming\foobar2000\configurationに入れる。手動でいくつかのコンポーネントを、...Roaming\foobar2000\user-componentsに配置する。そんなに単純には片付かないことも多い。

スキンを作る、あるいはインストールするときには、一般的に「skins」フォルダを作ってその中にファイルを入れておくことを覚えておこう 。



Default UI



foobar2000は、カスタマイズしやすいけれども、非常に限定されたデフォルトインタフェース(DUI)で始まる。
それは完全に作動し非常に速いのだが、変更出来るのはフォント、色、標準の要素、位置、サイズくらいだ。
最初に動作しているfoobar2000のパラメータをいじろうと思ったら、Preferences/Display/Default UIと[toolbar]/View/Layout/Enable Layout editing modeにたどり着くだろう。
Prefs/Display/Default UI/Playlist Viewでは、foobar2000のTitleFormattingを使ってカスタムのカラムとグループ体系を追加できる。
 View/Layout/Enable layout editing modeコマンド(CUIではView/Layout/Live editing)を使って、プレーヤーのウィンドウ内のUI要素を選び、動かすことができる。
 すべての要素は、一つの同じレイヤーに並べられる;複数の要素を同じ場所に置くためには、あなたはタブスタックを追加する必要がある(Enable layout editing modeの場合、目的のUI要素で右クリックし"Add splitter"/"Add panel"を選ぶ)
 


CUI + Panel Stack Splitter



foobar2000のUI操作感を大幅に変えようと思えば、Panel Stack Splitterと相性の良いColumns UIコンポーネントを使う必要がある。
Columns UI単独では、より多くの可能性を提供できない。かつて他のコンポーネントがあったけれど、それらは旧式で、もうサポートされていない(例えば Panels UI)。


Prefs/Display/Columns UIを編集すれば、CUIはより自由に、スプリッタを使用してウインドウのスペースを分割し、要素を組み立てることを可能にする。
6つのタブが、CUIのpreferencesのページにある:

●Mainタブはfclファイルをインポート/エクスポートし、ウィンドウのタイトルに表示する文字列を編集する場所である。
●LayoutタブはグラフィックUIの素材のほとんどを編集する所であり、私達が時間を最も費やすところでもある。
●Status barタブは技術情報を表示する(ウィンドウ底の)ステータス・バーを編集することを可能にする。Status barを表示しないことも多々ある。
●Notification areaは自明ではあるが、ツールチップやトレイアイコンのオプションをコントロールする。
●Filterタブはフィルタ要素を扱うときに効果を発揮する。
●そういえば、Artworkタブはあまり使わない。もっと効率的なアートワークコンポーネントや別の方法があるから。


PSSはDUIやCUI自体のhorizontal/vertical splittersよりも、階層的なパターンが使えるぶん、構成が自由である。:一つ、あるいはグループの要素をひとまとめにして、表示/他の要素を操作することが可能だ。こちらではスキンで一部を、違う部分に切り替えることができる。そして単独でスクリプトを実行することが可能だ。
見えるフレームで切り離される独立型要素の代わりに、フレームがなくても、PSSは1枚のパネルの上で複数の要素を結合できる。
パネルの要素はパネル自体と違う振る舞いをする、もちろんColumns UIの管理下で。
少し乱雑に見えるかもしれないが、DUIのタブシステムより多くの可能性を与える。

The Layout



さて、このLayoutタブについて話そう。手始めに、デフォルト(通常、NGPlaylist)で配置してあるすべての要素を消去すること。そしてベースになるhorizontal/vertical splitter、あるいはPSSを挿入する。(右click/insert)
あとはスキンに応じて必要なものを追加していくだけだ。下のこの例を見よう。

Layoutタブにおける、一番上のSplitterがメインのSplitterになる。それがスキンの一般的な「背景」であり、下位のすべてのものよりも最初に表示される。
しかしながら、動作中のスキンにおいてPSSの設定内では要素は上から順にリストされる。PSSスクリプトで呼ばれるどんな要素でも、実行中はこの交差状態にあることを心に留めておいて欲しい。
要素の階層は、右クリックし、「Move up/Move down」を選ぶことによって設定される;presetsメニューは、あなたが同じ.fclのいくつかの構成を保存しておくことを可能にする。
技術的には、複数のまったく違うスキンを作成し、単一の.fclファイルに持つことが可能だ。パネルと要素は、メインのPanel Stack Splitterを選び、「Configure」をクリックすることによって編集できる(編集したいパネルや要素も直接選ぶことができる。しかし、階層の上部の要素がしばしばリセットされる)。

「Monolite Flat」の例を見てみよう。構成のためのパネルが要素の上にあるのがわかるだろう。waveform seekbarは、prev/play/pause/nextボタンを動かす(これらはスクリプトによって作られた要素であり、リストには見えない)最初でメインのPanel Stack Splitterの一番下に位置するコンポーネントである。
;その上にはLibrary Treeを動かす別のPSSがある。メインのPSSからコントロールされるELPlaylist。などなど。ツールバーボタンは構成上スキンの上位に位置する。2番目のスクリーンショットを見れば、もっとわかりやすい。

Image_computer/how2skin_1_img/3_by_markkoenig-d6r5mid.png

WSH要素は1つのパネル(黒いやつ)にまとめられている。2つの他のコンポーネントが,、最初のPSSで作られた3つのボタンの近くにうまいこと配置されているおかげで、一貫性を持ち結合されているように見える。

Image_computer/how2skin_1_img/2_by_markkoenig-d6r5pfy.png

従って、スキンをデザインする、または修正するときに一番最初に考えるべき重要なことは、その構成だ。
全体の構造は、階層を持つ「レイヤー」により支配されている。そこに様々なサイズのパネルを追加し、その中にひとつ、あるいは複数のUIの要素を配置する。
パネルまたはUI要素を追加するためには、Layoutタブのsplitterを右クリックし、「Change splitter type」、または「Insert panel」を選ぶ。

コーディネート




「Configure」をクリックすると、PanelListタブが現在のUI要素(PSSかコンポーネント)を表示する。
要素は上から下へ(最初のものは一番上のレイヤー、最後が一番下に)リストアップされる。もし一つのパネルまたは要素が、他の要素を覆っているなら、これを考慮する必要がある。
個々の要素やパネルを寸法決めするために、「forced layout」にチェックを入れよう。TitleFormattingで値を計算すれば、ぐっと実用的になる。
例えば、要素の位置(x、y)を設定するには数値を書き込めば十分だ。しかしウィンドウがリサイズされるようならば、%_width%(ウィンドウの幅を返す)のようなTF値を使ったほうがずっといい。
選択はケースバイケースである。「ignore panel size limits」にチェックすれば、パネルの制限外の要素をアレンジできる。
「Hide panel on startup」は要素を出現させるためのボタンがある場合に使用する。
範囲の外にあるか、別の要素の下に隠されて見えないことがあるので、編集したい時は要注意。

Image_computer/how2skin_1_img/4_by_markkoenig-d6r5mi0.png

これらのダイアログで編集する度に、「Apply」を押すこと。「OK」を押してしまうと、前の要素を編集できないことに気づく:ダイアログボックスが空になってしまう。修正の後に「OK」を押す前に、Layoutタブの「Apply」を押して編集中のPSSや要素に戻れるようにしておくべきだ。


Colours and Fonts



DUIのオプションページのようにfoobar2000 UIとサードパーティ製の要素の色とフォントを編集できる;すでに設定して(例えば、スクリプトを使う)いないなら。いくつかのサードパーティ製コンポーネントは、このメニューを使って、あるいは右クリックで、設定にアクセスできる。

Image_computer/how2skin_1_img/5_by_markkoenig-d6r5mhq.png



Script



f2kスキン作成の他の重要な面は、カスタマイズするためにスクリプトを使用したとき、どのようにUI要素が働き、表示されるかを知ることである。
スクリプトはTitle Formatting(TF)に依存しているので、そちらも扱えるようにしておいたほうがいい。(リンク参照)
foobar2000のいくつかの表示オプションと標準コンポーネントは、TFを使う:ウィンドウタイトル、ステータス・バー、通知エリア、columns playlist、metadata displayなど。
それだけでなく、Panel Stack Splitter、ELPlaylist/NG Playlist、LibraryTree、などもある。TFを使えばまったく簡単だが、他の手段では制限される可能性もある。
もしあなたが意欲的なら、WSH Panel Modを駆使してJavaScriptに切り換えることを選ぶかもしれない(下記参照)。

NG Playlist



その表示オプションは、Prefs/Columns UI (or DUI)/Playlist Viewかtitles/Preferencesを右クリックして見つけられる。

ELPlaylist



表示オプションはPrefs/Columns UI/Layoutタブか、右クリックでSettingsを選ぶことで見つかる。(もしあなたがスキンを修正したあとで.fclファイルに保存するのを忘れなかったら。ELPlaylistは、前に保存された設定にリセットされる)
ELPlaylistでの修正は2つのセクションに分けられる。

●全体の要素:Style, Field definition, Behaviour,Miscタブ;
●1つのスクリプト(ELPlaylistは複数のスクリプト、すなわち複数のカスタムのライブラリ表示を持てる。切り替え可):Script,Groupingタブ。

タブを一つ一つ取り上げていこう。これは一応、マニュアルに全部書いてあることだ(分量としては物足りないが)。
そして、スクリプトが上から下に向けて実行されることに注意しよう:例えば、もし背景イメージの前に文字列を表示したいなら、文字列を表示する”前に”イメージが表示されることを確かめよう($imageabs…の後に$drawstring)。ここでも、他人のやり方を覗いてみるのは非常に参考になる。

●Scriptタブは、あなたが…(だよね?)スクリプトを書く場所だ。Track listはライブラリトラックリストを参照する: つまりここが、タイトル、曲の長さ、曲順、etcを表示するのにぴったりな場所だ。Group headerも同じ。
track listについて、クソ多い事柄を表示できる。フォーム、色、画像、etc。二つのセクションは、曲が変わったときとか、ユーザーが操作したとき(ファイルを追加した、再生しなおした、etc)にいつでも呼ばれる。
Per Secondは毎秒ごとにチェックされる(Behaviourタブ「update every second」にチェックしていれば);プログレスバーやスライドする情報やetcを作ることが出来る。
Popup (Background)とPopup (Track)は、ポップアップ内の情報を表示するためのものだ;このオプションの設定はmiscタブにある。

Image_computer/how2skin_1_img/6_by_markkoenig-d6r5mjr.png

●Styleタブは、トラックリストに影響を与えるものだけでなく、全体のUI要素のための主要な表示オプションが集められている。
フォントはカスタムデフォルトフォントを選ぶか、スクリプトを直接編集できる;複数のフォントを使え、スクリプトで指定できるなら。その場合、カスタムデフォルトフォントより優先される。
odd/even items backgroundを編集すれば「iTunes look」(行ごとに縞模様にする)にすることができる。スクリプトでも出来るけどね。
Enable Visual StyleはVistaのためにデザインされていて、用途によっては合わないこともあるだろう。
Pseudo-Transparent backgroundは興味深いけれども、「透明度」トピックとして後でまた触れる。

Image_computer/how2skin_1_img/7_by_markkoenig-d6r5mjl.png

Groupingタブはプレイリストビューアを構成する一つの方法だ 。
Group byは、コンテキストメニュー(「Group by」)にアクセス可能ないくつかのグループフォーマット(Artist/Album, Albums only, tracklist sorted by artist, title, length, year, etc.)を名付けて、設定しておくことができる。
これらのオプションにはTFを使用する。グループフォーマットは、トラックをどうやってグループ化するかを決め、Sort formatによって並び替える。
Row heightはひとつのトラックラインの高さ。
Playlist Filterは、特定のグループフォーマットを使う時に、ライブラリをフィルタリングすることを可能にする;つまり、genrasでフィルタリングしたものを「ジャンル」と名づけておくことができる。
最後に、Associated titleformat script nameは、特定のグループフォーマットを特定の表示スクリプトと接続することを可能にする(Scriptタブ/「Titleformat Script Presets」に設定した名前を与えると仮定して)。このグループフォーマットは自動的に作動するはずだ。

Image_computer/how2skin_1_img/8_by_markkoenig-d6r5mjh.png

Field definitionタブは、値を保持しておくことができる。スクリプトで必要になるたびに長ったらしい式を書くのを繰り返したくないだろう?
色の設定(245-145-93-125)や長いパスを20回書く代わりに、ここに値を書いておいて、$get関数を使えばいい。

Image_computer/how2skin_1_img/9_by_markkoenig-d6r5mj9.png



Behaviourタブでは、ELPlaylistと対話時に起こることを編集する。クリックしたときの反応、etc.

miscタブはポップアップに関すること。

Panel Stack Splitter



まったく同じようにスクリプトが動く。Splitter Settingダイアログボックスにいる時には、4つのタブがある。(Panellistタブは前にも触れている)。

●Scriptタブは、ELPlaylistと同じくTFが使える。「PerTrack」はトラックが変化したときに反応し、「PerSecond」は秒ごとにアップデートされる。文字列や、ボタン、情報を表示、画像を表示(グラフィックUI要素、背景、アーティスト写真、カバー等)を作成できる;何ができるかはTFのリンクを参照。いくらでも複雑にできるけれど、foobar2000標準のUIエンジンより遅くなってしまうことは覚悟しなければならない。もし重く非常に複雑なスキンを計画しているなら、JScriptに切り換えたほうがいいかもしれない。
●Behaviourタブはパネルの動作を決定する。
●Global Variablesは「Field definition」と同じ意味だ。

PSSはたくさんの個々の要素を設定できる。PanelListにあるコンポーネントを選び、「Configure」を押せば、その設定ウィンドウを開く;時々この機能が使えないこともある。

WSH Panel Mod



これはJScript、VBScriptが使えるシンプルかつ極めて強力なコンポーネントだ。
TFの能力を超えて、ほとんど何でも可能だ:たぶん、既にBr3tt氏のすごい仕事をいくつか知っているだろう。
ここでの難点はJScriptを学ばなければいけないことだが、私がやっているように他人のスクリプトをコピーし、修正することで理解を深めることができる。
サンプルがコンポーネントのパッケージに含められている。WSH Panel Modは印象的なスキンの重要な鍵だといえるだろう。



文法の基本



最初から流暢にコードを書ける人などいない。
正直に言えば、文や関数を覚え、操作のコツを掴むまでしばらくかかるだろう。
基本的に、使われる文法は値/フィールド参照と関数の、2つのカテゴリーに分けられる。
値またはフィールド参照は、ひとつの情報(サイズ、ポジション、色、透明度、メタデータ、数量など)であり、関数は、ひとつにまとまった処理である。例えば、foobar2000がスタートする時もそうだし、前もって指定しておいた瞬間(トラックが変化したとき)、直接呼ぶこともある(ボタンをクリックするなど)。

一般的に言って、スクリプトは「情報を見つけ、何らかの処理を呼び出す」過程を記述する以上の何者でもない。
つまり、あなたが関数を書きたいと思ったら、取りに行く情報のことを把握していなければならない。そうでないとクラッシュしたり、何も返ってこなかったり、エラーを見つけるまで頭を強打したくなる羽目に陥るかもしれない。
だからこそスクリプトを書いたり、理解するのには基本が大事なんだ。
少し例を見てみよう。

私達は最初のPSSのScriptタブにいる。この非常に簡単なスクリプトにおいて、グラフィックの要素、描画、画像を静的/動的に呼び出してみる。

●黄色ゾーンは基本的な、このスクリプトが使う画像が入っているディレクトリにアクセスするやり方である。$puts関数は、スクリプトが呼び出すのに簡単なように、名前をつけて情報/値を保持することができる。
ここでは、『%ps_foobar2000_path%\skin... etc.』であるパスの情報を『skin_path』と名付けた。;従って、青色ゾーンでは、$get関数を使って画像へのパスを完成させるために呼び出している。:$get(skin_path)\play.png.
●ピンクゾーンでは、ツールバーの背景および灰色の境界線を描いた。スクリプトは上から下へ動く。私は最初に灰色の背景を描いた。グラデーションを加え、境界線を描いた。見ればわかるが、数値と動的な値の両方とも使った。
動的な値は、数値と同じ位置に置かれる。メタデータ(trackタグのような)は%...%のような形で呼ばれる(関数が$...で呼ばれるのに対して)。
ここで私は、リサイズの後でもウィンドウの幅に合うような背景を設定したかった。そこで%_width%を呼び出し、相対的で、常にアップデートされるようにした。
●青色ゾーンで、再生ボタンを描画した。ここで一般的な$if関数の使い方を見ることができる。値やコンポーネントの状態によって分岐するような用途だ。:$if(返される値, 値が真の場合, それ以外の場合)のように動く。
これは文法がややこしくなっていく、ほんの手始めである。この関数でplay/pauseボタンの動作を決める。ボタンの同じ操作でも、再生中かそうでないかで反応が違うようにする。
2つのボタンを並べるのは簡単だが、それは避けたい。同じ場所で2つの種類のボタンを交代で呼ぶために、$ifを使用する必要がある。:もし再生中なら「Pause」ボタンに行き、そうでなければ「Play」が表示される。

Image_computer/how2skin_1_img/11_by_markkoenig-d6r5r5l.png

ちょっと別のスキンのELPlaylistスクリプトを見てみよう。CUI、PSS、ELP(そしてたぶん、もっと多くのコンポーネント)が同じ文法を使うけれども、関数には多少の違いがあり、そのままでは動かないことも多い。
ところで、スクリーンショットを見ればわかるように、私は読みやすく便利なようにスクリプトを整理している。

●最初の、黄色の、保持された値のことは既に話している。
Field definitionタブに入れることもできるが、私は一目でわかるところに置いておくほうが好きだ。
見本として、$puts関数に$if機能を組み合わせている:「text_color」と名づけている値を再生中か否か、選択されているか否かという条件によって変えるためだ。
ただトラックの状態によってテキストの色が変わってほしいだけなら、この方法は余計なタイプを防止してくれる。"$if(%el_isplaying%, then all the $drawstring, and if not, use this other string"...長い。代わりにあなたはひとつの文字列だけタイプして、一回だけ変わった値を保持するだけでいい。
重要なのは、ほとんどの関数が結合でき、より複雑な結果を出せるということだ。それを心に留めておいて欲しい。
4行目の終わりに')))'があるように、もっと多くの関数が結合でき、もっと多くの括弧が登場するのだ。
●「BG」ゾーンでは、「iTunes look」を設定している(/!\ そういえば全体の背景について話していない: 背景は、ここのよりグローバルなカンバスに入っている。ここでのELPの背景は透明)。
odd/even background効果のために、$ifと$mod関数を使って、動的にトラックごとの背景を変えている。[グループのアイテムのインデックスナンバー]を2で割って、その結果が1であるかどうかによって分岐させる。$if(%el_item_index%,$or(1,3,5,7, etc.))のように固定値を使う代わりに、すべてのトラックをカバーできる。
●青色ゾーンで同じ仕掛けを使って、選択や再生中のときに長方形を追加している。
●緑色ゾーンでは、アイテムの列に表示するために、メタデータがリストされる。
$font関数で好きなフォント、サイズ、タイプを設定しよう。(注:$drawstring機能はTrueTypeフォントのみ動作する。さもなければ、$drawtext/$drawtextexによってGDIレンダラーを使う。それはOpenTypeとTrueTypeを使うことができる)。
それから、私は1つのデータごとに1つの文字列を追加しているが、1つの文字列で多くのメタデータを表示してもかまわない。
●再生中を示すマークも同じことで、特別なフォントを使った。
●ratingのマーク(ここでは見えないが)のために、$padと$repeatを使用して文字を並べた。
●結局、ELPlaylistに、アイテムの全体の数と順番が同じアイテム(つまり、グループの最後のアイテム)への影の効果(グラデーション)を追加するように頼んだ。(見栄え)

Image_computer/how2skin_1_img/12_by_markkoenig-d6r5w9y.png

Image_computer/how2skin_1_img/13_by_markkoenig-d6r5w9b.png


ここに、関数を結合した複雑な文法のスクリプトをいかに構成するかという、いくつかの例がある。主要かつ重要なルールを数え上げてみよう。

●//は、行をスクリプトが解釈しないようにする。(コメント)
●関数を結合するときは注意すること。ちゃんと「(」と「)」の数は合っているか? 一般的に、コンマひとつ打ち忘れるだけで、スクリプトの残り全部を働かなくするか、だいなしにしてしまう。
●したいことをする前にプランを立てるのは良い。エラーとリスクと不毛な時間を減らす。
●両方を使えるなら、固定値/数値より相対的/動的な値を使う。
●関数を呼ぶ前に、必要とされるデータに不足がないか考えよう。
●スクリプトは上から順に実行される。構成を考える際に考慮しよう。
●作成や修正は1度に1つ。バグを迅速に見つけるためだ。
●複数の関数を結合する時には、一番深いところにある関数が最初に呼ばれることを覚えていてほしい。$if($add($div($get(...と書いたら、fb2kはまずgetを吟味し、divide、addときて最終的にifをチェックしtrueかfalseを返す。時々例外はある。ひとつの$if、非常にシンプルなケースだが、このプロセスは「if[value]=trueなら次の処理を実行する」というものだ。優先順位について考える必要がある。
●もし直接的に必要な関数を見つけられなくても、たいてい、間接的な方法がある。
●それぞれのコンポーネント/タブには、それぞれに合うスクリプトを書こう。
●よりシンプルであれ。



透明度



スキンにおける透明度は、非常に良い機能だけれど、時々扱いが苦痛になる。透明度に関する様々なオプション:

●Columns UI「Main」タブで、「Use transparency」というボックスが全体のウィンドウに影響を与える。私がDUIで(黒い背景に白いフォントを使った)それを使ったとき、「これ何だ?」としか思わなかった。
●Splitter Settings/Behaviourタブにおいて、「Pseudo Transparency」というボックスは、Scriptタブに設定された背景を透過させることができる。
●いくつかのコンポーネントが、それぞれ独自の透明度機能(ELPlaylist, Lyrics Show Panel 3, Biography View, Channel Spectrum...)を持っている。

要するに、デフォルトの透明度機能はパネルの背景が見えるように、コンポーネントを透過させるだけだ。;私はそれが、「pseudo transparency=偽りの透明度」というラベルがつけられた理由であると思う。
デフォルトの機能で複雑な透明度を持つスキンを組み立てることは少し難しいかもしれず、トリックを見つける必要があるかもしれない。さもなければ、2つ方法がある:

●しつこいようだが、JScriptはどこにでも透明度(大部分)を適用できる。
●より透明度を得やすいもうひとつの方法がUI_Hacksコンポーネント(foobar2000の作者により承認されなかった、バグが多い、名前がトロイ(ウィルス)とまぎらわしい)である。
個人的には、特に問題があるとは思っていない。ただ背景が見えるだけでなく、Windowsのデスクトップや他のプログラムのウインドウが見えるという意味で、それは本当の透明度を提供する。
そのオプションがPrefs/Display/Main Windowタブにある。ここからできること:

○ウィンドウフレームを見えないように変更する。
○ウィンドウのアクションを変更し、ロックし、リサイズを使用不可にする。または指定されたサイズに編集する。

Image_computer/how2skin_1_img/10_by_markkoenig-d6r5mj2.png

●何が興味深いかといえば、様々な透明度モードを追加されることだ。
「Disable」はWindowsのAero effectを使用不可にする(もしあなたがそれを使っているなら)。「Glass Frame」は、Windowsのデフォルトフレームを、編集できる値によって変化するものと取り替える。私は、選択的なぼかしが使えるため、Luxにこのモードを用いた。
「Sheet of glass」は、色の重量に基づいて、選択的で、ぼやけたアルファ透明度を作動させるようだ:軽い色が透明度により影響されるのに対して暗いまたは堅固な色は影響されない。
これらのモードを除いて、「Alpha transparency」というボックスは、透明度を全体のウィンドウに適用する:「Disable」「Alpha transparency」を選ぶと、ウィンドウをすっかり透明にするけれども、フレームはSolidのままだ。チェックをつけずに「Glass Frame」を選ぶと、背景がsolidのままになる。etc.
これらの透明度の機能がAeroを利用していることを忘れないこと。
もしあなたが、Aeroを使用不可にするvisual stylesを使っているならば、それぞれ少しばかり違う結果を得るだろう。さらに、いくつかのフォントとアンチエイリアシング/ClearTypeは、alpha transparencyがうまくいかないかもしれない。従って、あなたは時々不快なレンダリング結果を経験するかもしれない。

Image_computer/how2skin_1_img/snap19_by_markkoenig-d6r5nc2.png


次の章を読む前に、foobar2000のスキンの核心部分をもっと理解したいと思うんじゃないかな?
コメントや質問は自由にしていい。私は提案と訂正/追補を受け入れよう。
スキンを楽しもう!





コメントは日本語でお願いします。(URLは入力禁止:Do not URL writing.) :System message: コメントを受けつけています。