<windowSkins>
<windowSkins>は利用可能な中でもっとも強力な要素で、全てのShareazaウィンドウの外観をカスタマイズできます。 Shareazaスキンではこの要素は外側のボーダーに影響します。
ウィンドウスキンはメインの<windowSkins>要素内に<windowSkin>要素として指定されます。 各ウィンドウスキンはウィンドウ外観の異なる部分を定義するために、多数の要素を持っています。
以下は簡単な例です:
<?xml version="1.0" encoding="UTF-8"?> <windowSkins> <windowSkin> <target name="CMainWnd"/> <image path="MySkin.bmp"/> <parts> <part name="Top" rect="0,0,64,20"/> </parts> </windowSkin> </windowSkins> </skin> |
要素
ウィンドウスキンに含むことができる様々な要素があり、以下でそれぞれ解説しています:
要素 | 説明 |
<target> | スキンを特定のウィンドウまたはウィンドウファミリーに適用します |
<image> | スキンで使用するビットマップを読み込みます |
<parts> | ウィンドウを塗りつぶす際に使用されるソース画像のパーツ(領域)を定義します |
<anchors> | ボタンのような特別な意味を持つウィンドウの領域を定義します |
<caption> | テキストキャプションの塗り方を設定します |
<region> | 不定形ウィンドウ領域を生成します |
<target>
<target>要素は特定のウィンドウスキンを適用する対象となるウィンドウ(例:ダウンロードモニタウィンドウ)を指定します。スキンには1つ以上の
対象はname(名前)属性で指定され、それはShareazaウィンドウ名か"ベースクラス"となります。以下は対象名の例のリストです:
対象 | 説明 |
CMainWnd | メインウィンドウ |
CChildWnd | 全てのフローティング子ウィンドウ |
CChildWnd.Panel | 全ての固定子ウィンドウ(タブモード) |
CSearchWnd | フローティング時の検索ウィンドウのみ |
CSearchWnd.Panel | 固定時の検索ウィンドウのみ(タブモード) |
*** このようにShareaza内のどのようなパネルのスキンも作成できます(例:CHomeWnd.Panel/CmediaWnd.Panel) *** | |
CBaseMatchWnd | フローティング時の検索、ヒットモニタ、ホスト参照ウィンドウ |
CHostCacheWnd | ホストキャッシュウィンドウ |
CDialog | アプリケーション内の全ダイアログ |
CAboutDlg | アバウトダイアログ |
CSettingsSheet | Shareaza設定シート(CDialogではない) |
CDownloadMonitorDlg | ダウンロードモニタ |
<image>
<image>タグはスキンの一部を形成する為に読み込まれる画像を指定します。 ビットマップファイル名はpath(パス)属性で指定されます。現在サポートされる <image>タグは2種類あります。
このうち一般的で有用なもの:
<image path="SomeImage.bmp"/>
この書式は指定した画像を読み込み、スキンのペイントに使用されます。 全てのウィンドウパーツを画像から読み込むことができます。
もう一方のあまり一般的でない形式:
<image path="Background.bmp" type="watermark"/>
これは透かし画像を対象のダイアログに背景としてタイリングします。これは現在、ダイアログだけでサポートされます。
<parts><parts>要素はウィンドウをペイントするために使用されるソース画像の領域(または"parts"…部品)のリストを含んでいます。 ウィンドウはいくつかの部品に分割され、それぞれの部品は"TopLeft"のような名前が付けられています。 Shareazaはスキン画像のパーツをこれらのウィンドウ部品に描画することでウィンドウをペイントします。
各部品は name と rectという構成要素を持っています。 nameはウィンドウのどの領域を描画するかを示す部品名を指定し、rectは使用する画像の正確な矩形領域をX軸、Y軸、幅、高さという形式で指定します。例:
<parts> <part name="TopLeft" rect="0,0,32,20"/> <part name="Top" rect="32,0,64,20"/> <part name="TopRight" rect="96,0,32,20"/> </parts> |
以下はスキンに含むことができる部品名です:
部品 | 説明 |
TopLeft | ウィンドウの左上隅 |
Top | ウィンドウ最上部 (可変サイズ) |
TopRight | ウィンドウ右上隅 |
LeftTop | TopLeftとLeftの間の領域 |
Left | ウィンドウの左端 (可変サイズ) |
LeftBottom | LeftとBottomLeftの間の領域 |
RightTop | TopRightとRightの間の領域 |
Right | ウィンドウの右端 (可変サイズ) |
RightBottom | RightとBottomRightの間の領域 |
BottomLeft | ウィンドウの左下隅 |
Bottom | ウィンドウの最下部 (可変サイズ) |
BottomRight | ウィンドウの右下隅 |
System | 通常、ホバー、押下状態のシステムメニュー要素 |
SystemHover | |
SystemDown | |
Minimise | 通常、ホバー、押下状態の最小化ボタン |
MinimiseHover | |
MinimiseDown | |
Maximise | 通常、ホバー、押下状態の最大化ボタン |
MaximiseHover | |
MaximiseDown | |
Close | 通常、ホバー、押下状態の閉じるボタン |
CloseHover | |
CloseDown |
これらの部品は以下の不活性状態を持っています:
部品 | 説明 |
TopLeftIA | ウィンドウの左上隅 |
TopIA | ウィンドウの最上部(可変サイズ) |
TopRightIA | ウィンドウの右上隅 |
4つのコーナー部品は常時ソース画像として正確にペイントされます。4つの角部分は必要に応じて領域を繰り返しタイリングします。 全ての部品がオプションで、XMLファイル内で見つからない場合はカスタマイズされません。
4つの可変サイズの部品では、タイリングは画面の必要なスペースを塗りつぶすデフォルトメソッドとなります。 また、ソース画像を引き延ばして対象領域を満たす代換メソッドも利用可能です。 これを指定するには、<part>要素内にmode="stretch"を含めて下さい。 そうすれば引き延ばされた部品が表示されます:
<parts> <part name="TopLeft" rect="0,0,32,20"/> <part name="TopLeftIA" rect="0,0,32,20"/> <part name="Top" rect="32,0,64,20" mode="stretch"/> <part name="TopIA" rect="32,0,64,20" mode="stretch"/> <part name="TopRight" rect="96,0,32,20"/> <part name="TopRightIA" rect="96,0,32,20"/> </parts> |
さらに簡単に言えば、全てのウィンドウパネルでスキンを作成することができます。 例えば、Shareazaメディアプレイヤーでは"media"ウィンドウパネルの上にも"close"ボタンがあります。以下は部品の例です:
<image path="WindowPanel.bmp"/> <target window="CMediaWnd.Panel"/> <parts> <part name="TopLeft" rect="1,23,129,21"/> <part name="Top" rect="130,23,10,21"/> <part name="TopRight" rect="0,45,64,21"/> <part name="CloseHover" rect="64,45,61,21"/> <part name="CloseDown" rect="128,45,61,21"/> </parts> |
もちろん、closeボタンの上にはアンカーを置かなければなりませんが、それは次のセクションで説明します。 =)
<anchors>アンカー(anchors)は閉じる、最大化、最小化ボタンのような重要なウィンドウ部品の位置の記録に使用されます。 ユーザーの入力を正確に扱うためにも、Shareazaはこれらの領域の場所を知っておく必要があります。
例:
<anchors> <anchor name="System" rect="4,4,18,18"/> <anchor name="Close" rect="-21,4,17,17"/> <anchor name="Maximise" rect="-40,4,17,17"/> <anchor name="Minimise" rect="-59,4,17,17"/> </anchors> |
<anchor>要素内の矩形領域(rect)はウィンドウ上の位置であり、ソース画像内の位置でないことに注意してください。またウィンドウはサイズ変更が可能なため、左上隅だけでなく全てのウィンドウの角に比例した矩形を用意しておく必要があります。
これは座標上で正・負の数を指定することによって行われます。正の座標は左上隅に比例し、負の座標は右下隅に比例しています。上の例として、X座標"-21"は右端から21ピクセルであることを意味し、X座標"4"は左端から4ピクセルであることを意味します。矩形領域はX、Y、幅、高さで指定する形式になります。
アンカーと部品はウィンドウ生成のために同時に機能させることができます。例えば、MinimiseHoverとMinimiseDown部品を提供しているなら、最小化アンカーのある場所にペイントされることになります。
次のアンカーを定義できます:
アンカー |
説明 |
Icon | ウィンドウアイコンとして表示される16x16の領域 |
System | システムポップアップメニュー用のクリック可能な領域 |
Minimise | 最小化ボタン |
Maximise | 最大化ボタン |
Close | 閉じるボタン |
<caption>
<caption>要素はウィンドウテキストのキャプション表示方法を定義します。もしどんなcaption要素も存在しないなら、テキストキャプションは描画されません。以下はcaption要素の例です:
<caption rect="25,2,-69,22" fontFace="Tahoma" fontSize="11" colour="FFFFFF" inactiveColour="273C47"/> |
以下の属性をcaption要素に付加することができます:
- rect - キャプションで占められる矩形領域。4つの各座標は絶対座標(例:x1,y1,x2,y2)で、負の座標はウィンドウ右または下の端と比例しています。これはウィンドウのサイズとキャプションの矩形領域が比例することを許可します。
- fontFace - Windowsのデフォルトキャプションフォントと異なる場合、フォントフェース名
- fontSize - ポイントかピクセルによるフォントサイズ。もしサイズが指定されているなら、フェース名も指定しておかなければなりません
- fontWeight - フォントのウェイトで、1~1000の間の整数または、"plain"や"bold"のようなキーワード
- colour - ウィンドウ有効時にキャプションテキストを塗る色
- inactiveColour - ウィンドウ無効時にキャプションテキストを塗る色
- OutlineColour - キャプションテキスト周りの1ピクセルサイズのボーダーを塗る色
- ShadowColour - キャプションテキスト周りの影を塗る色
- fill - テキストを塗る前に、キャプション矩形領域を満たす色。もし指定がない場合は矩形領域は何も塗られません
- caps - もし"all"が設定されている場合、キャプションは表示前に全て大文字に変換されます
<region>
<region>要素はShareazaにウィンドウの不定形領域の作成法を指定し、見栄えのする視覚的な外観を構成する不定形ウィンドウを許可します。この要素が存在しない場合、Shareazaは標準の矩形領域を作成します。
region要素が含まれている場合、それは基本的な形を表す1つ以上の<shape>要素から成り、それらは最終的に複雑なリージョンを形成する為に標準のセット操作を使用して結合されます。
例:
<region> <shape type="rectangle" rect="9,25,-11,-1"/> <shape type="roundRect" rect="0,0,-1,26" size="16,25" combine="or"/> </region> |
それぞれの連続したシェイプは、ウィンドウの最終的な形を生成するために、現在のリージョンに結合されます。各シェイプは以下を含みます:
- type - シェイプの種類(下を参照)
- rect - このシェイプ用の境界矩形領域(x1,y1,x2,y2 形式)。負の数はウィンドウの右または下の端と比例していて、"0,0,-1,-1"はウィンドウ全体を扱います。
- combine - 現在のシェイプと前のシェイプとの結合方法。最初のシェイプはcombine属性があってはなりません。
可能な結合方法:
- or - このシェイプを前のシェイプに追加する(論理OR演算)
- and - このシェイプと前のシェイプの重なり領域を得る(論理AND演算)
- xor - 重なり領域ではなく、このシェイプまたは他のシェイプによって遮蔽される領域を得る(論理XOR演算)
- diff - 前のシェイプからこのシェイプを減算します
可能なシェイプ種類:
- rectangle - 矩形
- ellipse - 楕円
- roundRect - 角が丸い長方形。この種類のシェイプは角の曲線の幅と高さを表す、2つの整数パラメータである size という名前の拡張属性を持つ必要があります。例:size="16,20"