Создать классы отдельных экранов программы.
- Создать класс главного окна программы.
Создание .rcss и .rml файлов описания отдельных экранов программы
Как это делается см. в документации/примерах библиотеки.
Доступные css свойства.
- Заметки
- Внешний вид элементов управления можно задавать при помощи либо стилей css, либо изображений из заранее подготовленной текстуры - во втором случае .rml файл грузится быстрее.
Все файлы (.rml, .rcss, .png) следует поместить в папку (Windows - корневая папка программы, Android - папка assets проекта Packaging), пути к этим файлам в программе задаются относительно этой папки, а в самом файле - относительно папки расположения этого файла.
Файлы .rml могут содержать в качестве текста не ASCII символы, но в этом случае их следует сохранять как utf8, а используемые шрифты должны поддерживать соответствующие Unicode символы.
- Предупреждения
- Файлы .rcss не должны сохраняться как utf8, т.к. они включаются целиком в состав файлов .rml при парсинге, что приводит к появлению Assert'ов при запуске Debug версии программы.
Создать классы отдельных экранов программы
Для каждого экрана программы необходимо создать класс-наследник от класса covellite::rocket::Layer, передав ему в качестве второго параметра конструктора путь к соответствующему .rml файлу.
class MainScreen final :
{
MainScreen::MainScreen(IWindowGui_t & _Window) :
Layer(_Window, "Data/main.rml")
{
Если необходим экран с заголовком, содержащим текст, заданный в заголовке .rml файла, создать класс наследник слоя, в конструкторе которого передать базовому классу идентификатор заголовка из его объявления в .rml файле.
- Необходимо сделать:
- Добавить пример использования панели с заголовком.
Создание класса главного окна программы
Класс главного окна программы отвечает за переключение пользовательских экранов и обработку пользовательского ввода.
Создать класс-наследник от класса covellite::app::IWindow, в конструкторе котрого установить набор строк для локализации приложения, добавить стартовый экран программы и подписаться на требующие обработки на уровне окна приложения события.
m_WindowGui(_WindowGui),
m_Events(_WindowGui)
{
m_WindowGui.Set(
{
# if BOOST_OS_WINDOWS
{ u8"[BACK]", u8"ALT + LEFT" },
{ u8"[EXIT]", u8"кнопку закрытия окна программы" },
# elif BOOST_PLAT_ANDROID
{ u8"[BACK]", u8"кнопку BACK устройства" },
{ u8"[EXIT]", u8"кнопку HOME устройства" },
# endif
});
m_LayerCount++;
m_Events[::layers::Button.Help]
.Connect([&](void)
{
m_LayerCount++;
});
m_Events[::layers::Button.Controls]
.Connect([&](void)
{
m_LayerCount++;
});
m_Events[::layers::Button.Text]
.Connect([&](void)
{
m_LayerCount++;
});
m_Events[::layers::Button.Draw3DObject]
.Connect([&](void)
{
m_LayerCount++;
TODO("Событие создания basement::Simple3DObject должно генерироваться здесь.");
});
m_Events[::layers::Button.Simple2DGame]
.Connect([&](void)
{
m_LayerCount++;
m_Events[::events::Simple2DGame.Start]();
});
m_Events[::layers::Button.Demo]
.Connect([&](void)
{
m_LayerCount++;
m_Events[::events::Demo.Start]();
});
m_Events[::layers::Button.Back]
.Connect([&](const bool & _IsStopBasement)
{
m_WindowGui.Back();
m_LayerCount--;
if (_IsStopBasement)
{
m_Events[::events::Basement.Stop]();
}
});
m_Events[::covellite::events::Key.Up]
.Connect([&](const ::covellite::events::Key_t::Code & _Code)
{
static const auto WindowsEscKeyCode = 0x1B;
if (_Code == WindowsEscKeyCode && m_LayerCount == 1)
{
m_Events[::covellite::events::Application.Exit]();
}
});
}
- Заметки
- Идентификаторы элементов управления передаются в функцию-обработчик события Click_t в нижнем регистре независимо от того, каким образом они были заданы в .rml файле.
- Цвет фона можно задавать как поле background-color для body в .rcss файле, но в этом случае для заполнения всего окна следует в стилях rml и body поставить
rml,
body
{
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
body
{
background-color: blue;
...
В классе окна событие Click_t будет вызываться для всех элементов управления всех активных пользовательских экранов, при этом здесь имеет смысл обрабатывать события, непосредственно связанные с работой окна (переход к другому слою или выход из программы).
События, которые может обрабатывать окно.