Работа с RosaTheme
Подключение в коде QML
import RosaTheme 1.0 as Rosa
...
Label {
color: Rosa.Theme.textColor
}
Работа с константами размеров
Для выставления констант в коде, которые напрямую зависят от разрешения монитора, необходимо использовать Rosa.Theme.scale(48). Для переменных типа size можно воспользоваться Rosa.Theme.scaleSize(100, 48) — это вернёт тип Qt.size.
import RosaTheme 1.0 as Rosa
...
Button {
height: Rosa.Theme.scale(48)
}
Работа с цветом
Есть 2 набора переменных с property color:
- Набор переменных для тёмной темы property color bgColor: theme.dark ? theme.darkShadesBlackColor : theme.lightShadesWhiteColor. Эти переменные используются с компонентами, где переход на тёмную тему хорошо заметен. Пример: Label { color: Rosa.Theme.textColor }. Здесь при светлой теме текст будет чёрным, а при тёмной — белым.
- Набор переменных с прямым указанием цвета readonly property color lightShadesWhiteColor: '#FFFFFFFF'. Этот набор используется там, где нельзя определить цвет из первого набора. Имена цветов соответствуют дизайну в Figma.
Работа со шрифтами
Предоставляется набор переменных для шрифтов, например, property font titleLargeFont. Имена переменных соответствуют дизайну в Figma.
import RosaTheme 1.0 as Rosa
...
Label {
font: Rosa.Theme.titleLargeFont
}
Работа с иконками
Каталоги вида 16x16 — это размер иконок. 16x16@2 — это иконки с масштабом x2, который учитывается автоматически через функцию Rosa.Theme.icon().
Раздел other — это иконки нестандартных размеров, например, Rosa.Theme.icon('illustration'). Как видите, здесь префикс other необязателен.
Вся логика по выбору иконки описывается через параметр наименования: Rosa.Theme.icon('16/wifi' + (isDarkTheme ? "" : "-dark")).
helloworld/
├── CMakeLists.txt
└── src/
├── CMakeLists.txt
├── main.cpp
├── resources.qrc
└── icons/
└── 16x16/
├── wifi.png
└── wifi-dark.png
├── 16x16@2/
├── 16x16@3/
├── 24x24/
├── 24x24@2/
├── 24x24@3/
├── other/
├── other@2/
└── other@3/
├── icons.qrc
└── qml/
└── main.qml
Логика смены иконок для тёмной темы прописана в Theme.qml. Однако для случаев, когда одна и та же иконка работает по-разному в разных приложениях в тёмной теме, есть второй параметр — context. Он формирует уникальный ключ для маппинга именно в своём контексте использования тёмной темы.
app-1
Button {
icon.source: Rosa.Theme.icon('24/plus')
}
app-2
Button {
icon.source: Rosa.Theme.icon('24/plus', 'flat-button')
}
В Theme.qml должно быть так:
mapIconsDark: ({
'24/plus' : '24/plus-dark'
'24/plus flat-button' : '24/plus'
})