How to Skin foobar2000 ざっくり和訳 Part2



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

Part2を始める前に、slowboyfast氏に一言。放りっぱなしにすんのやめーや。



How to skin foobar2000 Part2



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


構成とグラフィックス




このパートで、foobarのグラフィックコーディングの基本を学ぶ。
「グラフィックコーディング」なんていうとシリアスでハードに聞こえるかもしれないが、一度覚えてしまえば、DeviantArtに記事を書くのと同じくらいに簡単な作業だ。
 このパートは、主にCUI(ColumnsUI)、PSS(Panel Stack Splitter)、ELP(ELPlaylist)を中心に行う。

必要なもの
 ・ちょっとした数学 - ほとんどの描画機能は、座標・長さ・幅などの、取っ付きの悪い材料を使う。数学の少なくとも基本的な知識を持っていることが必要だ。(足し算、引き算、割り算)。
 ・一揃いのコンポーネント - あなたが作りたいテーマには、とりあえずやりたいことに適したコンポーネントを探してくる必要がある。
 ・グラフィックツール/ソフトウェア - 完全にオプションであるけれども、画像を一から作るのに必要だし、重宝する。
 ・ 大量のヒマな時間 - 描き、テストし、修正する…その繰り返しだからね!


Ready, set, theme!



1.構想



 プロジェクトは、他のビッグなプロジェクトと同じように始まる。
 すぐにスキンの中をいじりたいかもしれないけれども、他のすべての仕事と同じように、どこかでうまくいかなくなる。
 アイデアをまず紙に描いてみるのは、いいスタートだ。PhotoshopやGimpでモックアップを作ってみるのがいいだろう。
 配色とレイアウトの実験だ。いい感じに見えることと、使いやすさを考える。

 私はいつも少々雑なスケッチで始める:
Image_computer/how2skin_2_img/brainstorm_by_slowboyfast-d6r0p5g.png

 そして、このような結果を達成するのを助けてくれる:
Image_computer/how2skin_2_img/wip_by_slowboyfast-d6r0p4l.png





2. 描画



OK。もうあなたの頭では明快な計画があり、準備万端だと思う。
Markkoenig氏のチュートリアルのPart1もよく読んだはずだ。では、実際の作業に移ろう。
覚えておくべきいくつかの基本的な関数がある:


$drawrect-長方形と直線を描く
$drawroundrect-丸められた長方形を描く(ボタンを作るための私のお気に入り)
$gradientrect-グラデーション
$drawblurrect-ぼやけた長方形(影/光を作るのに使える)
$drawellipse-長円を描く
$drawtriangle-三角形を描く

//注目
個々の関数は高さ&横幅、色、オプションの引数から成ることに注意すること。ELPlaylistとPSS両方で動く。


1. $drawrect
 先に述べたように、それは長方形と直線を描くのに使われる。ほとんど必須といってもいい。
 $drawrectの書式はこんな感じだ:

$drawrect(X,Y,WIDTH,HEIGHT,塗りつぶす色 R-G-B-OPACITY,境界線 R-G-B-OPACITY,ARGUMENTS)

 例えば、水平な線を引きたいなら、こう書く:

$drawrect(50,50,300,1,255-0-0-255,)

 赤い線は座標50(X), 50(Y)、300pxの長さと1px幅で描かれる。

Image_computer/how2skin_2_img/redline_by_slowboyfast-d6r5dvg.png

 もし長方形を描きたいなら、ついさっき描いたラインの幅を修正し、それを少し下のほうに描いてみよう。
$drawrect(50,70,300,10,255-0-0-255,)

 長方形は座標50(X), 70(Y)、300pxの長さと10px幅で描かれる。

Image_computer/how2skin_2_img/redrect_by_slowboyfast-d6r5eju.png

 OK、今度は垂直線だ。X座標を360に変更しよう。新しい線がわかりやすいように、色も変更しておこう。

$drawrect(360,50,1,30,0-0-255-255,)


 さあ、青い線ができたぞ!

Image_computer/how2skin_2_img/blueline_by_slowboyfast-d6r5ggq.png


2. $drawroundrect
 さて、もうお分かりだと思うが、角が丸い長方形を描くために使われる。
 書式はこう:
$drawroundrect(X,Y,WIDTH,HEIGHT,R1,R2,塗りつぶす色 R-G-B-OPACITY,境界線 R-G-B-OPACITY,ARGUMENTS)
 おっと、もう計算が必要だ。角の丸さはR1とR2で定義される。いい感じの曲がった角を持つためには、「いつも」WIDTHが4*R1以上、HEIGHTが4*R2以上であるはずだ。それを覚えておこう。

 了解、計算は十分だ。ナイスな角丸長方形を描こう。

$drawroundrect(50,90,100,20,3,3,0-0-0-255,255-0-0,)

 これが小さい角丸長方形だ。R1(3*4=12)よりwidth(100)が大きいのはわかるよな? 同じくR2(3*4=12)よりheight(20)は大きい。

Image_computer/how2skin_2_img/roundrect_by_slowboyfast-d6r5i4k.png

3 .$gradientrect

 お次は「gradientrect」だ。これは聞いた話なんだが、どうやらグラデーションを描けるらしいぜ!

$gradientrect(X,Y,WIDTH,HEIGHT,COLOR1 R-G-B,COLOR2 R-G-B,ARGUMENTS)

 さっそく2つ描いて、みんなを驚かせてやろう。なんてったってグラデーションだぜ!
 1つめのグラデーションは水平方向にかかる。こう書く("horizontal"を付け足して)

$gradientrect(50,120,150,150,150-150-50,35-35-35,horizontal)

 2番目はverticalのはずだ。XとYの座標、色をほんのちょっと修正する。もちろん"vertical"も追加して。

$gradientrect(220,120,150,150,150-50-50,35-35-35,vertical)

 まったく驚異だ。グラデーションってやつは!

Image_computer/how2skin_2_img/gradients_by_slowboyfast-d6r5j8n.png

4. $drawblurrect

 しまった、これについては特に言うことはない。ぼかしのかかった長方形を描く。影や逆にぼんやりと光る効果なんていいんじゃないかな。

$drawblurrect(X,Y,WIDTH,HEIGHT,COLOR R-G-B-OPACITY,BLUR STRENGTH)

 BLUR STRENGTHの引数でコントロールできる。(1-弱い、7-強い)

 さあ、ぼやけた何かをいくつか描いてみよう。いいかな?
 最初のものはレベル1。 2番目がレベル7。

$drawblurrect(50,290,100,20,255-0-128-255,1)
$drawblurrect(180,290,100,20,255-0-128-255,7)

 こんな小さな修正だけでこんなに違うなんてすげえなあ、blurrect!

Image_computer/how2skin_2_img/blur_by_slowboyfast-d6r5l52.png

5. $drawellpise

 長円を描く関数自身に尋ねてみるとこんな説明が帰ってくる。

$drawellipse(X,Y,WIDTH,HEIGHT,FILLING R-G-B-OPACITY,BORDER R-G-B-OPACITY,ARGUMENTS)

 これで遊んでみよう。WIDTHとHEIGHTをいじることで、完全な円または伸ばされた円を作ることができる。
 最初のものは真円だ。少し移動させて、WIDTHとHEIGHTが等しいことを確かめよう。
$drawellipse(50,320,40,40,255-0-0,255-255-0,)
 2番目のものは垂直に伸ばしてみる。それを右に移動させて、その高さを増やそう。
$drawellipse(100,320,40,50,255-0-0,255-255-0,)
 最後のものは水平に伸ばす。再びそれを動かし、その幅を増やす。
$drawellipse(150,320,50,40,255-0-0,255-255-0,)

 どうだい、3つの小さなドットを作ったよ!

Image_computer/how2skin_2_img/ellipses_by_slowboyfast-d6r5mi4.png

6. $drawtriangle

 三角形はちょっとトリッキー。書式:

$drawtriangle(X1,Y1,X2,Y2,X3,Y3,塗りつぶす色 R-G-B-OPACITY,境界線 R-G-B-OPACITY,ARGUMENTS)

 それはX,Yが3組の座標を持ち、三角形の頂点になる。描こう。
$drawtriangle(450,250,500,250,475,200,0-0-0,255-0-0,)

Image_computer/how2skin_2_img/triangle_by_slowboyfast-d6r5n90.png



 これは、三角形だ。



3. Write



 うん、わかってる。テキストを表示するのはfb2kテーマ作者には必須事項だ。それらはどこでも見つけられる。プレイリスト、パネル、ボタン。

4つの関数がある。

1.$drawtext-アルファ混合ができる。光ったり影にしたりする。
2.$drawtextex-透明度をつけることはできないが、$drawtextより速い(ばらまいて、強い影を作成するのにいい)
3.$textbutton-文字だけのボタンを作る。
4.$drawstring-魔法みたいだ!(後で説明する)

1.$drawtext
 書式はこう:

$drawtext(text,X,Y,WIDTH,HEIGHT,COLOR R-G-B-OPACITY,ARGUMENTS)

$drawtextの引数

●left - テキストを左寄せにする
●right - テキストを右寄せにする
●hcenter - 中央寄せ(水平方向)
●vcenter - 中央寄せ(垂直方向)
●top - 文字を上にあわせる
●bottom - 文字を下にあわせる
●end_ellipsis - 文字が長すぎる場合、「...」をつけて後を省略する。

 いいかな? テストしてみよう。二つの文字列を作って、$drawtextと$drawtextexで表示してみる。

$drawtext(THIS TEXT WAS WRITTEN BY '$DRAWTEXT' FUNCTION,50,50,300,20,0-0-0,)
$drawtextex(THIS TEXT WAS WRITTEN BY '$DRAWTEXTEX' FUNCTION,50,70,300,20,0-0-0,)

Image_computer/how2skin_2_img/textstrings_by_slowboyfast-d6r5tnc.png

 気づいたかもしれないが、二つは同じように見える。アドバイスとしては、可能なら$drawtextexにしよう。
 それは一方より早く、クリッピングのエラーに対応していて、ボタンやプレイリストのナイスな効果を作るのにいい。

3.$textbutton

 最も多用途の機能のうちの1つ:パネルを表示/隠すことができるし、最小化、最大化、レイアウトを変更できる。したいと思う大部分のことができる。
 以下から成る書式だ :

$textbutton(X,Y,WIDTH,HEIGHT,TEXT,MOUSEOVER TEXT,COMMAND,ARGUMENTS,MOUSEOVER ARGUMENTS)

 例として、preferencesを開くボタンを作りたいなら、こんな書き方ができる:

$textbutton(0,0,100,20,Preferences,Preferences,Command:File/Preferences,fontcolor:0-0-0,fontcolor:255-0-0)

 このボタンの上にマウスを動かせば、(文字の)色を赤に変更する。もちろんクリックすればprefsをオープンする。

//注目
フォントのサイズ、種類、装飾を一まとめに書ける。

$font(FONT FACE,SIZE,TYPE)

FACE - フォントの名前。「Calibri Bold Caps」のような。
SIZE - サイズを指定する :)
TYPE - 標準、太字、斜体を選べる。

 もう一度見て欲しい。
Image_computer/how2skin_2_img/textstrings_by_slowboyfast-d6r5tnc.png




4.結合



きちんとしたルックスのテーマを作るためには、描画の関数を一緒に使いこなす必要がある。グラフィックアプリのレイヤーを使うのと同様に、「WYSIWYG」インタフェースの代わりに、コードの行で表している。。
 結合は - こう呼ぶほうが好きだ - レイヤー化は、図形の上に他の図形を置くときに起こる。foobarでは、いつも一番上のレイヤーが一番底に描画されるので、少しやりにくいかもしれない。最後に書いたものがほかのすべてより上に来る。下のこの2つの長方形を見てくれ。

Image_computer/how2skin_2_img/l1_by_slowboyfast-d6ris6x.png

 この場合、シアン(cyan)の長方形(レイヤー2)はレイヤーの一番上だ。レイヤー1(マゼンタ)とレイヤー2(シアン)を切り替えてみよう。

Image_computer/how2skin_2_img/l2_by_slowboyfast-d6ris77.png

 現在マゼンタ色の長方形(を描写している行)が下により近いので、foobarはそれを最上のレイヤーとみなす。このテクニックは素敵な効果に使える。
 スキンの簡単なアートワークビューアを作りたい? なら、まず長方形を描くことから始めよう:

$drawrect(41,6,168,168,100-100-100-255,)

Image_computer/how2skin_2_img/albart1_by_slowboyfast-d6rityv.png

 それから、少しだけ小さな暗めの長方形を置く。厚めの境界線に見える。:

$drawrect(43,8,164,164,60-60-60-255,)

Image_computer/how2skin_2_img/albart2_by_slowboyfast-d6riu3u.png


次に、アートワークを表示するために、artreader機能を使う:

$imageabs(44,9,162,162,%path%,artreader nokeepaspect,)

Image_computer/how2skin_2_img/albart3_by_slowboyfast-d6riueu.png

OK。だがあまりにも平凡すぎる。上の方を少し明るくしてみよう:

$gradientrect(44,9,162,50,255-255-255-80,0-0-0-0,)

Image_computer/how2skin_2_img/albart4_by_slowboyfast-d6riunh.png

だいぶ良くなった。左上の角に、小さな光るような効果を追加してみよう:

$gradientrect(44,9,1,162,255-255-255-150,0-0-0-0,)
$gradientrect(45,9,161,1,255-255-255-150,0-0-0-0,horizontal)

Image_computer/how2skin_2_img/albart5_by_slowboyfast-d6riutl.png

まだ何か足りないな。影を加えれば完璧だ。それには、コード全体を下にずらし、$drawblurrectを書く。コードが上の図形のほうが先に描かれる(=下になる)ことを思い出そう。

$drawblurrect(40,6,170,169,0-0-0-100,2)

Image_computer/how2skin_2_img/albart6_by_slowboyfast-d6rivf7.png

こんな感じかな。以上がfoobarで描画する方法(PSSの最小限だが)だ。

この部分はまだ不完全(たいてい私の仕事のせい、多くの時間があるわけではない)だけれども、もっと追加するつもりだ。私はただこの小さなスターターガイドを共有したい。それが新しいfb2kユーザーの助けになることを希望する。じゃあね!

to do:

$drawstringを説明する
%_width% & %_height% による制御
%imageabsで画像を表示する
$putsによる効率的なグローバルな設定
$add、$sub、$divでの単純な計算方法
フローティングパネル(ポップアップ!)
引き込み可能なパネル



 

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