スタイル link
スタイルプロパティーの値を変更して displayable の見た目をカスタマイズできます。例えば background
プロパティーを変更するとウィンドウやボタンの背景をカスタマイズできます。
スタイルプロパティー いつそのプロパティーが使用されるかを示す識別子を接頭辞に持てます。例えば hover_background
プロパティーはボタンにフォーカスがあると使用され、 idle_background
プロパティーはボタンがフォーカスを失うと使用されます ( background
プロパティーを設定するととりわけ idle_background
と hover_background
の両方を設定します )。
Ren'Py は 100 以上のスタイルプロパティーを持ちますが、このセクションではそのうち少しのみが使用されます。
スタイルとスタイルの継承 link
それぞれの 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
各スタイルはプロパティーをまとめるためにあり、Displayable に同時に適用できます。例えばこれらの2つのテキストは同様に表示されます
image big one = Text("Hello, World", size=40, color="#f00")
image big two = Text("Hello, World", style="big_red")
style big_red:
size 40
color "#f00"
各スタイルはプロパティーのセットと親を1つ持ちます。指定のスタイルが指定の Displayable に適用されると、(その Displayable が受け取ったもののうち)各スタイルプロパティーがそのスタイルプロパティーの中から探されます。見つからなければ、親スタイル、親スタイルの親スタイルを探していきます。
各 displayable は "style" というプロパティーを受け取り、そのスタイルを Displayable に適用します。
image big hello world = Text("Hello World", style="big")
screen hello_world:
text "Hello, World" style "big"
style
プロパティーが指定されないと、提供された displayable の種類に基づいて親が選ばれます。例えば(imagebuttonやテキストボタンを含め)ボタンは "button" スタイルがデフォルトとなり、 grid は "grid" スタイルになるなどです。親の選択はスクリーン言語のユーザーインターフェースステートメントにある style_prefix から影響を受けます。
スタイルが親の指定なしで定義されると、デフォルトの親がそのスタイルに選ばれます。そのスタイル名にアンダースコア (_) があるなら親は最初のアンダースコアまでを取り除いて名付けられます。例えば my_button
というスタイルは button
というスタイルを継承します。この継承は style ステートメントや Style
クラスのメソッド呼び出しで変更可能です。そうでなからえば "default" スタイルが使用されます。
アンダースコアで始まる名前のスタイルは Ren'Py 内部での使用のために予約されています。
Ren'Py は起動時にスタイルを構成するので、名前を持つスタイルは 初期化フェーズ 後に変更するべきではありません。
開発中、 displayable に使用されているスタイルとスタイルプロパティーを確認出来る Shift+I スタイルインスペクター は有用でしょう。
スタイルの定義: スタイルステートメント link
スタイル は style ステートメントを使用して定義されます。
style my_text is text:
size 40
font "gentium.ttf"
style ステートメントはあるスタイルが存在しなければそのスタイルを作成し、そうでなければ既存のスタイルを style ステートメントによって修正します。
注釈
screen や transform, image のような他のステートメントと違い、 style ステートメントは指定の名前に対して唯一のものではありません。: いくつかのステートメントが同じスタイルを参照でき、次々に、あるいは同時に、矛盾するような変更ができます。そのような場合、それぞれの style ステートメントが実行される各初期化の順が最終的な結果に対して大きく影響します。
style ステートメントはキーワード style
と定義するスタイル名で始まります。最初の行にはこれに 0 以上の節や、任意のコロンが続きます。
コロンが存在すると、次にブロックが続かなければなりません。ブロックの各行は 1 つ以上の節を含み、そうでなければステートメントが終了します。
style ステートメントは以下の節を受け取ります。 :
- スタイルプロパティー 単純式
単純式の値を指定されたスタイルプロパティーに代入します。
is
親このスタイルの親を設定、または置き換えます。親はスタイル名の単語でなければなりません。
clear
この style ステートメントが実行されるより前に代入されたこのスタイルの全てのプロパティーを除去します。これはスタイルの親からのプロパティー値の継承は防がず、その親を変更しません。スタイルの親を消去するには代わりに
is default
を使用してください。take
スタイル名この style ステートメントが実行されるより前に代入された、このスタイルの全てのプロパティーを除去し、指定のスタイルのプロパティーで置き換えます。これはスタイルの親は変更しません。
variant
単純式単純式を評価し、 スクリーン variant として解釈される文字列か文字列のリストを生成します。少なくとも 1 つ指定された variant がアクティブならその 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 a has all the properties of style c, except that when not present
# in c, the properties are taken from b or b's parents.
style a is b:
take c
Style ステートメントは常に 初期化フェーズ で実行されます。
スタイルの定義: Python link
名づけられたスタイルは、グローバルな style
オブジェクト上のフィールドに存在します。新しいスタイルを作成するには、Style
クラスのインスタンスを作成し、 style
オブジェクト上のフィールドに割り当てます。:
init python:
style.big_red = Style(style.default)
スタイルプロパティーは、style オブジェクトのフィールドプロパティーへの割り当てによって設定できます。:
init python:
style.big_red.color = "#f00"
style.big_red.size = 42
しかし、スタイルプロパティーの値にはこの方法ではアクセスできず、書き込み込みです。
- class Style(parent) link
- parent
親となるスタイルです。これは他のスタイルオブジェクトまたは文字列にできます。
- clear() link
これは、すべてのスタイルプロパティーをこのオブジェクトから削除します。値はオブジェクトの親から継承されます。
style ステートメントの
clear
節に相当します。
- set_parent(parent) link
このスタイルオブジェクトの親を parent に設定します。これは他のスタイルオブジェクトまたは文字列にできます。
style ステートメントの
is
節に相当します。
- take(other) link
これはすべてのスタイルプロパティーを other から持ってきます。これはスタイルオブジェクトまたは文字列にできます。
style ステートメントの
take
節に相当します。
インデックスされたスタイル link
インデックスされたスタイルは、displayable に与えられたデータによって displayable の外観を変えるときに使えるシンプルなスタイルです。インデックススタイルは、文字列や整数によって既存のスタイルオブジェクトにインデックスを作って作成できます。インデックススタイルが存在しないときは、インデックスを作成すると元のスタイルオブジェクトの子としてこれが作成されます。
init python:
style.button["Foo"].background = "#f00"
style.button["Bar"].background = "#00f"
screen indexed_style_test:
vbox:
textbutton "Foo" style style.button["Foo"]
textbutton "Bar" style style.button["Bar"]
スタイル設定(Style Preferences) link
注釈
gui.preference では複数のスタイルで使用される変数を変更できるので GUI Preferences は同様なことのよりよい達成方法となるでしょう。
しばしばユーザーがユーザーインターフェースの一部をカスタマイズ出来るようにすることが望まれます。例えば製作者は彼のゲームのプレイヤーが、そのテキストの外見や色、サイズを調整出来るようにしたいと望むかもしれません。スタイル設定はこのようなカスタマイズを可能にします。
スタイル設定は一つ以上のスタイルプロパティーを制御する設定です。スタイル設定は名前と一つ以上の代替スタイルを持ちます。あるスタイル設定には常にその代替スタイルのうち一つが選択され、永続データに保存されています。登録された最初の代替スタイルが初期値となります。
代替スタイルは一つ以上の関連づけられたスタイルとプロパティーおよびそれに関連づけられた値を持ち、ある代替スタイルがスタイル設定に対応する選択された代替スタイルになると、そのスタイルのプロパティーには指定された値が代入されます。これは Ren'Py が最初に初期化される時と、新しい代替スタイルが選択される時に常に実行されます。
特定のスタイル設定に対するすべての代替スタイルは、必ず同じスタイルとプロパティーの組み合わせを更新するべきです。さもなければある代替スタイルから他の物になった後に元のスタイルに戻るとき、2つ目の代替スタイルで設定されたプロパティーが一部残り結果が未定義となります。
こちらはスタイルプロパティーを登録し、通常の大きい文字と、外枠付きの小さい文字のどちらかをユーザーが選択できるようにする例を示しています。
init python:
# The "decorated" alternative of the "text" preference will set the size to 22 on the "say_dialogue" style.
renpy.register_style_preference("text", "decorated", style.say_dialogue, "size", 22)
renpy.register_style_preference("text", "decorated", style.say_dialogue, "outlines", [ (1, "#000", 0, 0) ])
renpy.register_style_preference("text", "large", style.say_dialogue, "size", 24)
renpy.register_style_preference("text", "large", style.say_dialogue, "outlines", [ ])
# The "decorated" alternative will be the default one for the "text" preference since it was registered first.
以下のコードにより、ユーザーが代替スタイルをボタンを使って選択できるようになります。
textbutton "Decorated" action StylePreference("text", "decorated")
textbutton "Large" action StylePreference("text", "large")
- StylePreference(preference, alternative) link
alternative を指定のスタイル設定に対応する選択された代替スタイルにするアクションです。
update イベントはこのアクションが呼び出されたときに引き起こされます。
- preference
スタイル設定の名前の文字列です。
- alternative
代替スタイルの名前の文字列です。
- renpy.get_style_preference(preference) link
スタイル設定に対する選択された代替スタイルの名前を文字列として返します。
- preference
スタイル設定の名前の文字列です。
- renpy.register_style_preference(preference, alternative, style, property, value) link
スタイル設定に対し、代替スタイルの情報を登録します。
- preference
スタイル設定名の文字列です。
- alternative
代替スタイルの名前の文字列。
- style
更新されるスタイル。これはスタイルオブジェクトにするか、スタイル名の文字列にします。
- property
更新されるスタイルプロパティーの名前の文字列。
- value
スタイルプロパティーに割り当てる値。
- renpy.set_style_preference(preference, alternative) link
スタイル設定に対し、選択された代替スタイルを設定します。
update イベントはこの関数が呼び出されたときに引き起こされます。
- preference
スタイル設定の名前の文字列です。
- alternative
代替スタイルの名前の文字列です。
その他のスタイル関数 link
- style.rebuild() link
名前付きスタイルを再構築し、初期化コードの外側でスタイルを変更できるようにします。
警告
名前付けされたスタイルは、ゲームごとのデータの一部として保存されません。つまり、保存と読み込みのサイクルにおいてスタイルの変更は持続しません。