Исходник ImGui - Изменение темы в меню.

Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,994
Реакции[?]
1,275
Поинты[?]
5K
Сегодня научу вас делать возможность изменения темы в вашем ImGui меню.
Создаем массив, статическую переменную типа int, а также комбо элемент:

C++:
const char* themes[]{ "Dark Purple", "Dark Blue" };
static int curTheme;
ImGui::Combo(xorstr("Menu Theme"), &curTheme, themes, ARRAYSIZE(themes));
Дальше реализуем такой код:

C++:
if (curTheme == 0)
            {
                colors[ImGuiCol_WindowBg] = ImVec4(0.39f, 0.00f, 0.63f, 0.11f);
            }
            else if (curTheme == 1)
            {
                colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
            }
Там где я задавал цвет WindowBg вы задаете цвет всем остальным элементам, важно задать переменной curTheme изначальное значение 0.
Результат:
1617814670202.png
1617814675604.png
 
Эксперт
Статус
Оффлайн
Регистрация
13 Сен 2020
Сообщения
1,415
Реакции[?]
712
Поинты[?]
9K
Сегодня научу вас делать возможность изменения темы в вашем ImGui меню.
Создаем массив, статическую переменную типа int, а также комбо элемент:

C++:
const char* themes[]{ "Dark Purple", "Dark Blue" };
static int curTheme;
ImGui::Combo(xorstr("Menu Theme"), &curTheme, themes, ARRAYSIZE(themes));
Дальше реализуем такой код:

C++:
if (curTheme == 0)
            {
                colors[ImGuiCol_WindowBg] = ImVec4(0.39f, 0.00f, 0.63f, 0.11f);
            }
            else if (curTheme == 1)
            {
                colors[ImGuiCol_WindowBg] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
            }
Там где я задавал цвет WindowBg вы задаете цвет всем остальным элементам, важно задать переменной curTheme изначальное значение 0.
Результат:
Посмотреть вложение 142626
Посмотреть вложение 142627
но можно же сделать через switch и так
C++:
switch (theme) {
    case 0: StyleColorsDark();   break;
    case 1: StyleColorsLight();   break;
}
 
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,994
Реакции[?]
1,275
Поинты[?]
5K
но можно же сделать через switch и так
C++:
switch (tabs) {
    case 0: StyleColorsDark();   break;
    case 1: StyleColorsLight();   break;
}
в 2021 году использовать switch :CoolCat:
но можно же сделать через switch и так
C++:
switch (theme) {
    case 0: StyleColorsDark();   break;
    case 1: StyleColorsLight();   break;
}
1617815078472.png
 
купить дизайн: yougame.biz/threads/155999
Дизайнер
Статус
Оффлайн
Регистрация
19 Сен 2018
Сообщения
794
Реакции[?]
1,381
Поинты[?]
9K
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
C++:
if(1 == choosing) {
    goto mark1;
}
if(2 == choosing) {
    goto mark2;
}
{
    mark1:
    // case 1
    goto ending;
    mark2:
    // case 2
    goto ending;
}
ending:;
Оператор switch преобразуется примерно в это. Если немного вникнуть в подробности, то можно понять, что goto в данном контексте не несет дополнительной нагрузки компилятору в плане оптимизации.
Использовать switch можно, а иногда и нужно. Я хотел бы посмотреть, как вы пишете 20 if-else для обработки значения того же enum'а
 
Похожие темы
Сверху Снизу