スタイルによって displayable の見た目をカスタマイズできます。これはdisplayable の style プロパティーの値を変更して実現できます。例えば background
プロパティーを変更するとウィンドウやボタンの背景をカスタマイズできます。
スタイルプロパティーはいつそのプロパティーが使用されるかを記す接頭辞とそのプロパティー自身の 2 つの要素で構成されます。例えば hover_background
プロパティーはボタンにフォーカスがあると使用され、 idle_background
プロパティーはボタンがフォーカスを失うと使用されます ( background
プロパティーは idle_background
と hover_background
の両方を設定します )。
Ren'Py には100 以上のスタイルプロパティーがありますがこの章では少数のプロパティーを使用するに留めます。 background
に対するスタイルプロパティーとして color
, font
, outlines
, size
を使用します。スタイルプロパティーの完全なリストは style properties を参照してください。
それぞれの displayable にはスタイルが組み込まれています。displayable が作成されるときに直接またはスクリーンシステムを介して style プロパティーが与えられ、そのスタイルが displayable の見た目の更新に使用されます。以下の例では
image big hello world = Text("Hello, World", size=40)
テキスト displayable に size
プロパティーが与えられており、テキストのサイズが変更されます。このカスタマイズでは、テキスト displayable の見た目として高さが40ピクセルのテキストを表示するようにしています。
スクリーン言語と同様に、各ユーザーインターフェース用のステートメントは適切なスタイルプロパティーを受け取ります。
screen big_hello_world:
text "Hello, World" size 40
Ren'Py はスタイルの継承をサポートしていて各スタイルは親を 1 つ持っています。スタイルでスタイルプロパティーが定義されていなければそのプロパティーの値は直近の親から継承します。
各 displayable はその displayable のスタイルの親を指定する "style" というプロパティーを受け取ります。
image big hello world = Text("Hello World", style="big")
screen hello_world:
text "Hello, World" style "big"
style
プロパティーが指定されないと、提供された displayable の種類に基づいて親が選ばれます。選ばれた親はスクリーン言語のユーザーインターフェースステートメントにある style_group から影響を受けます。
スタイルが親を定義せずに定義されるとデフォルトの親がそのスタイルに選ばれます。そのスタイル名にアンダースコア (_) があるなら親は最初のアンダースコアまでを取り除いて名付けられます。例えば my_button
というスタイルは button
というスタイルを継承します。この継承は style ステートメントやスタイルオブジェクトのメソッド呼び出しで変更可能です。存在しないスタイルが使用され、またそのスタイル名にアンダースコアがあるなら Ren'Py はデフォルトの親を使用してそれを作成します。
アンダースコアで始まる名前のスタイルは Ren'Py 内部での使用のために予約されています。
Ren'Py は起動時にスタイルをビルドするので、名前を持つスタイルは style ステートメントや init
ブロックの外で変更するべきではありません。
config.developer
が true なら、ある displayable に使用されているスタイルを確認出来るスタイルインスペクターが使用可能です。
スタイルインスペクターを使用するにはマウスをある displayable 上に移動して shift+l を押します。すると Ren'Py がマウス位置にある displayable のリストをスクリーンに描画された順に表示します ( つまり最後の displayable はそれ以外の上にあるということです )。
スタイル名をクリックするとその displayable が継承するスタイルと、 最終的に displayable に寄与する各スタイルのプロパティーが表示されます。
スタイル は style ステートメントを使用して定義されます。
style my_text is text:
size 40
font "gentium.ttf"
style ステートメントはあるスタイルが存在しなければそのスタイルを作成し、そうでなければ既存のスタイルを style ステートメントによって修正します。
style ステートメントはキーワード style
と定義するスタイル名で始まります。最初の行にはこれに 0 以上の節や、任意のコロンが続きます。
コロンが存在すると、次にブロックが続かなければなりません。ブロックの各行は 1 つ以上の節を含み、そうでなければステートメントが終了します。
style ステートメントは以下の節を受け取ります。 :
単純式の値を指定されたスタイルプロパティーに代入します。
is
親このスタイルの親を設定します。親はスタイル名でなければなりません。
clear
この style ステートメントが実行されるより前に代入されたこのスタイルの全てのプロパティーを除去します。これはスタイルが親からプロパティーの値を継承することを防ぎません。
take
スタイル名この style ステートメントが実行されるより前に代入されたこのスタイルの全てのプロパティーを除去し、指定のスタイルのプロパティーで置き換えます。これはスタイルの親を変更しません。
variant
単純式単純式を評価し、 スクリーンバージョン として解釈される文字列か文字列のリストを生成します。少なくとも 1 つ指定されたバージョンがアクティブなら style ステートメントが実行され、そうでなければ無視されます。
properties
単純式単純式を評価して辞書を得ます。辞書にはスタイルとその値が期待され、値は style ステートメントに与えられたように代入されます。
スタイルステートメントの例は:
# Creates a new style, inheriting from default.
style big_red:
size 40
# Updates the style.
style big_red color "#f00"
# Takes the properties of label_text from big_red, but only if we're
# on a touch system.
style label_text:
variant "touch"
take big_red
style ステートメントは常に初期化時に実行されます。 style ステートメントが init
ブロックにない場合は自動的に init 0
ブロックに配置されます。
名前付きスタイルは、グローバルな style
オブジェクト上のフィールドに存在します。新しいスタイルを作成するには、Style クラスのインスタンスを作成し、 style
オブジェクト上のフィールドに割り当てます。:
init python:
style.big_red = Style(style.default)
スタイルプロパティーは、style のフィールドプロパティーへの割り当てによって設定できます。:
init python:
style.big_red.color = "#f00"
style.big_red.size = 42
Style
(parent) link新しいスタイルオブジェクトを作成します。スタイルプロパティーはこのオブジェクトのフィールドに割り当てられます。
親となるスタイル。これは他のスタイルオブジェクトまたは文字列にできます。
clear
() linkこれは、すべてのスタイルプロパティーをこのオブジェクトから削除します。値はオブジェクトの親から継承されます。
set_parent
(parent) linkこのスタイルオブジェクトの親を parent に設定します。
take
(other) linkこれはスタイルプロパティーを other から持ってきます。 other はスタイルオブジェクトにする必要があります。
インデックスされたスタイルは、displayable に与えられたデータによって displayable の外観を変えるときに使えるシンプルなスタイルです。インデックススタイルは、文字列や整数によってスタイルオブジェクトにインデックスを作って作成できます。インデックススタイルが存在しないときは、インデックスを作成するとこれが作成されます。
init python:
style.button['Foo'].background = "#f00"
style.button['Bar'].background = "#00f"
インデックススタイルは、displayable にインデックスされたスタイルを与えて使用できます。:
screen indexed_style_test:
vbox:
textbutton "Foo" style style.button["Foo"]
textbutton "Bar" style style.button["Bar"]
注釈
gui.preference では複数のスタイルで使用される変数を変更できるので GUI Preferences は同様なことのよりよい達成方法となるでしょう。
しばしばユーザーがユーザーインターフェースの一部をカスタマイズ出来るようにすることが望まれます。例えば製作者は彼のゲームのプレイヤーが、その外見や色、テキストのサイズを調整出来るようにしたいと望むかもしれません。スタイル設定はこのようなカスタマイズを可能にします。
スタイル設定は一つ以上のスタイルプロパティーを制御する設定です。スタイル設定は名前と一つ以上の代替スタイルを持ちます。あるスタイル設定には常にその代替スタイルのうち一つが選択されています。選択された代替スタイルは永続データに保存され、スタイルプロパティーに登録された最初の代替スタイルが初期値となります。
代替スタイルは一つ以上の関連づけられたスタイルとプロパティーおよびそれに関連づけられた値を持ち、ある代替スタイルがスタイル設定に対応する選択された代替スタイルになると、そのスタイルのプロパティーには指定された値が代入されます。これは Ren'Py が最初に初期化される時と、新しい代替スタイルが選択される時に常に実行されます。
特定のスタイル設定に対するすべての代替スタイルが同じ一連のスタイルとプロパティーを更新すると保証するべきです。さもなければいくつかのスタイルは値が代入されず、その結果は未定義となります。
スタイル設定の関数の一覧です。 :
StylePreference
(preference, alternative) linkalternative を指定のスタイル設定に対応する選択された代替スタイルにするアクションです。
スタイル設定の名前の文字列。
代替スタイルの名前の文字列。
renpy.
get_style_preference
(preference) linkスタイル設定に対する選択された代替スタイルの名前を文字列として返します。
スタイル設定の名前の文字列。
renpy.
register_style_preference
(preference, alternative, style, property, value) linkスタイル設定に対し、代替スタイルの情報を登録します。
スタイル設定名の文字列です。
代替スタイルの名前の文字列。
更新されるスタイル。これはスタイルオブジェクトにするか、スタイル名の文字列にします。
更新されるスタイルプロパティーの名前の文字列。
スタイルプロパティーに割り当てる値。
renpy.
set_style_preference
(preference, alternative) linkスタイル設定に対し、選択された代替スタイルを設定します。
スタイル設定の名前の文字列。
代替スタイルの名前の文字列。
スタイルプロパティーを登録し、通常の大きい文字と、外枠付きの小さい文字のどちらかをユーザーが選択できるようにする例を示します。
init python:
renpy.register_style_preference("text", "decorated", style.say_dialogue, "outlines", [ (1, "#000", 0, 0) ])
renpy.register_style_preference("text", "decorated", style.say_dialogue, "size", 22)
renpy.register_style_preference("text", "large", style.say_dialogue, "outlines", [ ])
renpy.register_style_preference("text", "large", style.say_dialogue, "size", 24)
以下のコードにより、ユーザーが代替スタイルをボタンを使って選択できるようになります。
textbutton "Decorated" action StylePreference("text", "decorated")
textbutton "Large" action StylePreference("text", "large")