스타일
스타일 속성의 값을 바꾸면 디스플레이어블의 모양을 사용자 지정할 수 있습니다. 예를 들어 background 속성을 바꾸어 창이나 버튼의 배경을 변경할 수 있습니다.
스타일 속성에는 언제 사용할지를 지정하는 식별자 접두사를 붙일 수 있습니다. 예를 들어 버튼에 포커스가 있을 때는 hover_background, 없을 때는 idle_background를 사용합니다. background를 설정하면 idle_background와 hover_background 등을 함께 설정합니다.
Ren'Py에는 100개가 넘는 스타일 속성이 있지만, 이 절에서는 일부만 사용합니다.
스타일 사용과 상속
각 디스플레이어블에는 스타일이 내장되어 있습니다. 디스플레이어블을 직접 만들거나 스크린 시스템으로 만들 때 스타일 속성을 지정해 모양을 바꿀 수 있습니다. 다음 예제에서는
image big hello world = Text("안녕, 세상아", size=40)
Text 디스플레이어블에 size 속성을 지정해 텍스트 크기를 바꿉니다. 글꼴에 따라서도 달라지지만, 이 설정은 텍스트 높이를 40픽셀로 표시하여 텍스트 디스플레이어블의 모양을 변경합니다.
스크린 언어에서도 각 사용자 인터페이스 문에 관련 스타일 속성을 지정할 수 있습니다.
screen big_hello_world:
text "안녕, 세상아" size 40
개별 스타일은 여러 속성을 묶어 디스플레이어블에 함께 적용하기 위해 존재합니다. 예를 들어 다음 두 텍스트는 같은 모습으로 표시됩니다.
image big one = Text("안녕, 세상아", size=40, color="#f00")
image big two = Text("안녕, 세상아", style="big_red")
style big_red:
size 40
color "#f00"
각 스타일에는 속성 모음과 하나의 부모가 있습니다. 디스플레이어블에 스타일을 적용할 때, 해당 디스플레이어블이 받는 각 스타일 속성을 그 스타일에서 찾습니다. 없으면 부모 스타일, 그 부모의 부모 스타일 순으로 계속 찾습니다.
각 디스플레이어블은 style 속성을 받아 지정한 스타일을 적용합니다.
image big hello world = Text("안녕 세상아", style="big")
screen hello_world:
text "안녕, 세상아" style "big"
style 속성을 지정하지 않으면 디스플레이어블 종류에 따라 부모를 선택합니다. 예를 들어 이미지 버튼과 텍스트 버튼을 포함한 버튼의 기본 스타일은 "button", 격자는 "grid"입니다. 스크린 언어의 사용자 인터페이스 문에 있는 style_prefix 속성으로 부모 선택에 영향을 줄 수 있습니다.
스타일을 정의할 때 부모를 지정하지 않으면 기본 부모를 선택합니다. 스타일 이름에 밑줄(_)이 있으면 첫 밑줄까지의 부분을 제거한 이름을 부모로 사용합니다. 존재하지 않는 스타일을 사용하고 이름에 밑줄이 있으면 Ren'Py가 기본 부모를 사용해 생성합니다. 예를 들어 my_button은 button을 상속합니다. style 문이나 Style 클래스의 메서드로 이 상속 관계를 바꿀 수 있습니다. 그 밖의 경우에는 "default" 스타일을 사용합니다.
밑줄로 시작하는 스타일 이름은 Ren'Py 용도로 예약되어 있습니다.
Ren'Py는 시작할 때 스타일을 구성하므로, 초기화 단계가 끝난 뒤에는 이름 있는 스타일을 변경하지 않아야 합니다.
개발 중에는 Shift+I 스타일 검사로 디스플레이어블에서 사용하는 스타일과 스타일 속성을 확인하면 매우 유용합니다.
스타일 정의: style 문
스타일을 정의할 때는 style 문을 사용하는 것이 좋습니다.
style my_text is text:
size 40
font "gentium.ttf"
스타일이 없으면 style 문이 생성합니다. 이미 있으면 기존 스타일을 수정합니다.
참고
screen, transform, image 등의 문과 달리, 같은 이름에 대한 style 문은 하나로 제한되지 않습니다. 여러 문이 같은 스타일을 가리켜 차례로 수정할 수 있으며, 서로 경쟁하거나 모순되는 변경을 할 수도 있습니다. 이 경우 각 style 문의 초기화 실행 시점이 최종 결과에 큰 영향을 줍니다.
style 문은 style 키워드와 정의할 스타일 이름으로 시작합니다. 첫 줄에는 그 뒤에 0개 이상의 절과 선택적인 콜론이 올 수 있습니다.
콜론이 있으면 블록이 뒤따라야 합니다. 블록의 각 줄에는 하나 이상의 절이 있어야 합니다. 콜론이 없으면 문은 그 줄에서 끝납니다.
style 문은 다음 절을 받습니다.
- style-property simple-expression
단순 표현식의 값을 지정한 스타일 속성에 대입합니다.
isparent이 스타일의 부모를 설정하거나 교체합니다. 부모는 스타일 이름을 나타내는 단어여야 합니다.
clear이 style 문을 실행하기 전에 대입한 모든 속성을 제거합니다. 부모에서 속성 값을 상속하는 것은 막지 않으며 부모도 바꾸지 않습니다. 스타일의 부모를 초기화하려면
is default를 사용합니다.takestyle-name이 style 문을 실행하기 전에 대입한 모든 속성을 지우고 지정한 스타일의 속성으로 교체합니다. 부모는 바꾸지 않습니다.
variantsimple-expression단순 표현식을 평가하여 문자열 또는 문자열 리스트를 얻고, 이를 스크린 변형으로 해석합니다. 지정한 변형 중 하나 이상이 활성화되어 있으면 style 문을 실행하고, 그렇지 않으면 블록의 나머지를 무시합니다.
propertiessimple-expression단순 표현식을 평가하여 딕셔너리를 얻습니다. 딕셔너리는 스타일 속성을 값에 연결해야 하며, style 문에 직접 지정한 것처럼 값을 대입합니다.
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
이름 있는 스타일은 전역 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)
- parent
스타일의 부모입니다. 다른 Style 객체나 문자열일 수 있습니다.
- clear()
이 객체의 모든 스타일 속성을 제거합니다. 값은 이 객체의 부모에서 상속합니다.
style 문의
clear절과 같습니다.
- set_parent(parent)
이 스타일 객체의 부모를 parent로 설정합니다. 다른 Style 객체나 문자열일 수 있습니다.
style 문의
is절과 같습니다.
- take(other)
other의 모든 스타일 속성을 가져옵니다. 다른 Style 객체나 문자열일 수 있습니다.
style 문의
take절과 같습니다.
인덱스 스타일
인덱스 스타일은 디스플레이어블에 전달한 데이터에 따라 모양을 바꾸는 데 사용할 수 있는 가벼운 스타일입니다. 기존 Style 객체를 문자열이나 정수로 인덱싱하면 만들어집니다. 해당 인덱스 스타일이 없으면 원래 Style 객체를 부모로 하여 생성합니다.
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"]
스타일 환경설정
참고
GUI 환경설정은 여러 스타일에서 사용하는 변수를 바꿀 수 있으므로, 같은 작업에 GUI 환경설정을 사용하는 것이 더 나을 때가 많습니다.
사용자가 사용자 인터페이스의 일부를 직접 조절하게 하고 싶을 때가 많으며, 이런 요소는 스타일로 표현하는 것이 적합합니다. 예를 들어 제작자는 플레이어가 텍스트의 모양, 색상, 크기를 조절하게 할 수 있습니다. 스타일 환경설정은 이러한 사용자 지정을 지원합니다.
스타일 환경설정은 하나 이상의 스타일 속성을 제어합니다. 이름과 하나 이상의 선택 항목이 있으며, 언제나 항목 하나가 선택되어 그 선택이 영구 데이터에 저장됩니다. 기본값은 처음 등록한 항목입니다.
각 선택 항목에는 스타일, 속성, 속성 값의 연결이 하나 이상 들어 있습니다. 해당 항목을 선택하면 해당 스타일의 속성에 지정한 값을 대입합니다. 이는 Ren'Py를 처음 초기화할 때와 새 항목을 선택할 때마다 이루어집니다.
같은 스타일 환경설정의 모든 항목이 같은 스타일과 속성 모음을 갱신하도록 해야 합니다. 그렇지 않으면 다른 항목을 선택했다가 처음 항목으로 돌아왔을 때 일부 속성이 두 번째 항목의 값으로 남으므로 결과가 일정하지 않습니다.
다음은 사용자가 크고 단순한 텍스트와 작고 외곽선이 있는 텍스트 사이에서 선택할 수 있게 하는 스타일 속성 등록 예제입니다.
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 "꾸밈" action StylePreference("text", "decorated")
textbutton "크게" action StylePreference("text", "large")
- StylePreference(preference, alternative)
지정한 스타일 환경설정에서 alternative를 선택하는 액션입니다.
이 액션을 호출하면 update 이벤트가 발생합니다.
- preference
스타일 환경설정 이름 문자열입니다.
- alternative
선택 항목 이름 문자열입니다.
- renpy.get_style_preference(preference)
지정한 스타일 환경설정에서 선택된 항목의 이름 문자열을 반환합니다.
- preference
스타일 환경설정 이름 문자열입니다.
- renpy.register_style_preference(preference, alternative, style, property, value)
스타일 환경설정의 선택 항목에 관한 정보를 등록합니다.
- preference
스타일 환경설정 이름 문자열입니다.
- alternative
선택 항목 이름 문자열입니다.
- style
갱신할 스타일입니다. 스타일 객체나 스타일 이름 문자열일 수 있습니다.
- property
갱신할 스타일 속성 이름 문자열입니다.
- value
스타일 속성에 대입할 값입니다.
- renpy.set_style_preference(preference, alternative)
스타일 환경설정의 선택 항목을 설정합니다.
이 함수를 호출하면 update 이벤트가 발생합니다.
- preference
스타일 환경설정 이름 문자열입니다.
- alternative
선택 항목 이름 문자열입니다.
그 밖의 스타일 함수
- style.rebuild()
이름 있는 스타일을 다시 구성하여 초기화 단계가 끝난 뒤에도 스타일을 변경할 수 있게 합니다.
경고
이름 있는 스타일은 개별 게임 데이터의 일부로 저장되지 않습니다. 따라서 저장 후 불러오면 변경 사항이 유지되지 않습니다.