Стили (Styles)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Стили позволяют настраивать внешний вид отображаемых объектов. Это делается путём изменения значения свойств стиля для отображаемых объектов. Например, изменение свойства background позволяет настроить фон окна или кнопки.


Свойства стиля состоят из двух частей:

  • Префикс, указывающий, когда используется свойство.
  • Само свойство.

Например, свойство кнопки hover_background используется, когда кнопка находится в фокусе, в то время как свойство idle_background используется, когда кнопка не в фокусе. Среди прочего, задание свойства background позволяет установить idle_background и hover_background.

Хотя в Ren'Py насчитывается более 100 свойств стиля, в этом разделе используются только несколько свойств. Наряду с background, мы используем color, font, outlines и size в качестве свойств стиля. С полным списком свойств стиля можно ознакомиться в разделе «Свойства стиля».

Использование стилей и наследования стилей (Using Styles and Style Inheritance)[править | править код]

У каждого элемента, отображаемого на экране, есть встроенный стиль. При создании отображаемого объекта напрямую или с помощью системы экранов ему могут быть предоставлены свойства стиля. Эти стили используются для обновления внешнего вида отображаемого объекта. В следующем примере:

image big hello world = Text("Привет, Мир", size=40)

свойство size предоставляется отображаемому объекту Text, что позволяет изменять размер этого текста. Благодаря этому можно настроить внешний вид отображаемого текста, выведя на экран текст высотой в 40 пикселей.

Аналогично, при использовании языка экрана каждый оператор пользовательского интерфейса принимает соответствующие свойства стиля:

screen big_hello_world:
    text "Привет, Мир" size 40


Ren'Py поддерживает наследование стилей, причём каждый стиль имеет одного родителя. Если свойство стиля не определено в стиле, значение свойства наследуется от ближайшего родителя, родителя во втором поколении или другого предка.

Каждый отображаемый объект принимает свойство с именем style, который задаётся родительским стилем отображаемого элемента:

image big hello world = Text("Привет, Мир", style="big")

screen hello_world:
    text "Привет, Мир" style "big"

Если свойство style не задано, родитель выбирается на основе типа отображаемого объекта, который был предоставлен. На выбранного родителя может влиять свойство style_prefix операторов пользовательского интерфейса на языке экрана.

Когда стиль определён без указания родителя, для стиля выбирается родитель по умолчанию. Если в своём имени стиль содержит символ подчеркивания (_), родительский элемент называется путём удаления всего, вплоть до первого подчеркивания. Например, стиль с именем my_button наследуется от button. Это наследование можно изменить с помощью оператора style или путём вызова метода для объекта стиля. Когда используется несуществующий стиль и в его имени есть символ подчеркивания, Ren'Py создаст его, используя родительский элемент по умолчанию.

Имена стилей, начинающиеся с символа подчеркивания, зарезервированы для использования Ren'Py.

Поскольку Ren'Py создаёт стили при запуске, названные стили не должны изменяться вне оператора стиля или блока init.

Инспектор стилей (Style Inspector)[править | править код]

Когда config.developer принимает значение True, можно использовать инспектор стилей, чтобы увидеть, какие стили используются отображаемыми элементами.

Чтобы активировать инспектор стилей, наведите указатель мыши на отображаемый объект и нажмите Shift+I. Ren'Py покажет список отображаемых элементов, которые включают положение мыши, в порядке их отображения на экране. То есть последний отображаемый элемент - тот, что находится поверх других.

Нажмите на имя стиля, чтобы отобразить стили, от которых наследуется отображаемый элемент, и свойства, которые каждый стиль вносит в конечный отображаемый объект.

Определение стилей: оператор style (Defining Styles: Style Statement)[править | править код]

Предпочтительным способом определения стилей является оператор style:

style my_text is text:
    size 40
    font "gentium.ttf"

Если стиль не существует, оператор style создаёт его. Иначе существующий стиль изменяется оператором style.

Оператор style начинается с ключевого слова style и имени определяемого стиля. За этим в первой строке следует ноль или более компонентов и необязательное двоеточие.

Если присутствует двоеточие, блок должен это учитывать. Каждая строка блока должна содержать один или несколько компонентов. Иначе оператор будет завершён.


Оператор style принимает следующие компоненты:

свойство стиля и простое выражение
Присваивает значение простого выражения данному свойству стиля.
is и родительский элемент
Задаёт родительский элемент этого стиля. Родителем должно быть слово, дающее название стилю.
clear
Удаляет все свойства этого стиля, назначенные до выполнения оператора style. Это не мешает стилю наследовать значения свойств от своих родителей.
take и название стиля
Удаляет все свойства этого стиля, назначенные до выполнения оператора style, и заменяет их свойствами названного стиля. Не меняет родителя этого стиля.
variant и простое выражение
Оценивает простое выражение для получения строки или списка строк, которые интерпретируются как варианты экрана. Если хотя бы один из приведенных вариантов активен, выполняется оператор style, иначе он игнорируется.
properties и простое выражение
Оценивает простое выражение для получения словаря. Словарь должен сопоставит свойства стиля со значениями, а значения присваиваются так, как если бы они были предоставлены в операторе style.


Примеры операторов style:

# Создаёт новый стиль, наследуя от default.
style big_red:
    size 40

# Обновляет стиль.
style big_red color "#f00"

# Принимает свойства label_text из big_red, но только если мы
# находимся в сенсорной системе.

style label_text:
    variant "touch"
    take big_red

Операторы style всегда выполняются во время инициализации. Если оператор style не находится в блоке init, он автоматически помещается в блок init 0.

Определение стилей: оператор python (Defining Styles: Python)[править | править код]

Названные стили существуют как поля в глобальном объекте style. Для создания нового стиля необходимо создать экземпляр класса Style и передать его полю в объекте style:

init python:
     style.big_red = Style(style.default)


Свойства стиля можно установить, присвоив стилям полеподобные свойства:

init python:
     style.big_red.color = "#f00"
     style.big_red.size = 42


class Style(parent)
Создаёт новый объект стиля. Полям этого объекта могут быть назначены свойства стиля.
parent
Родитель стилей. Это может быть другой объект стиля или строка.


clear()
Удаляет все свойства стиля из этого объекта. Значения будут унаследованы от родителя этого объекта.


set_parent(parent)
Устанавливает родителя этого объекта стиля для parent.


take(other)
Берёт все свойства стиля от other. other должен быть объектом стиля.


◇ Индексированные стили[править | править код]

Индексированные стили – упрощённые стили, которые можно использовать для настройки внешнего вида отображаемого объекта на основе данных, предоставленных этому отображаемому объекту. Индексный стиль создаётся путём индексации объекта стиля строкой или целым числом. Если индексированный стиль не существует, его создаёт индексирование.

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 сначала инициализируется, а затем всякий раз, когда выбирается новая альтернатива.

Следует убедиться, что каждая альтернатива для данной настройки стиля обновляет один и тот же набор стилей и свойств. Иначе некоторым стилям могут не быть присвоены значения, и результат не будет детерминированным.


Функции настройки стиля:

StylePreference(preference, alternative)
Действие, которое заставляет alternative стать выбранной альтернативой для данной настройки стиля.
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)
Устанавливает выбранную альтернативу для настройки стиля.
preference
Строка, задающая имя настройке стиля.
alternative
Строка, задающая имя альтернативы.


Вот пример регистрации свойства стиля, которое позволяет игроку выбирать между крупным, обычным и менее оконтуренным текстом.

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 "Художественный шрифт" action StylePreference("text", "decorated")
textbutton "Крупный шрифт" action StylePreference("text", "large")


◇ Другие функции стиля[править | править код]

style.rebuild()
Приводит к перестроению названных стилей, что позволяет изменять стили после завершения фазы инициализации.



Предупреждение! Названные стили не сохраняются как часть игровых данных. Это означает, что изменения в них не будут сохранены в течение цикла сохранения и загрузки.

Источник[править | править код]

Статья "Styles" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи