`raygui` - Когда нужен GUI, а времени нет

01 Jun, 2026

Знакомая ситуация? Вы разрабатываете крутую игру или сложное приложение, и вдруг понимаете: для отладки, настройки параметров или просто для удобства работы с данными вам нужна небольшая утилита. Нечто с кнопками, полями ввода, слайдерами. И вот тут начинается головная боль: тащить тяжеловесные фреймворки вроде Qt или Electron ради пары десятков контролов кажется избыточным. А писать всё с нуля на чистом OpenGL или DirectX — это вообще отдельный проект. Что же делать?

В такие моменты на помощь приходят библиотеки вроде raygui. Сегодня мы поговорим о проекте, который позволяет быстро и без лишних заморочек добавить графический интерфейс в ваши C/C++ приложения, особенно если вы уже работаете с raylib.

Что такое raygui и кому он пригодится?

raygui — это легковесная библиотека для создания графических интерфейсов (GUI) в так называемом "немедленном режиме" (Immediate-Mode GUI, IMGUI). Она родилась как вспомогательный модуль для популярной игровой библиотеки raylib, переняв её философию простоты и прямолинейности. Представьте себе: никаких сложных систем виджетов, никаких деревьев объектов, никаких замысловатых циклов обработки событий. Просто вызываете функцию, и она рисует кнопку. Если кнопка нажата, функция возвращает true. Всё!

Кому это нужно? В первую очередь, разработчикам, которые создают:

  • Инструменты и утилиты: Редакторы уровней, редакторы данных, конфигураторы, отладочные панели для игр или приложений.
  • Прототипы: Быстро набросать интерфейс для проверки идеи.
  • Образовательные проекты: Изучить основы GUI без погружения в дебри фреймворков.

Если вы цените скорость разработки, минимализм и контроль над происходящим, raygui может стать вашим верным помощником.

Реклама

Логотип raygui

Immediate-Mode GUI: В чем фишка?

Чтобы понять прелесть raygui, стоит разобраться в концепции IMGUI. В отличие от традиционных "режимных" (Retained Mode) GUI-библиотек (вроде Qt, WinForms), где вы создаете объекты виджетов, добавляете их в дерево, а потом система сама их отрисовывает и обрабатывает события, IMGUI работает по-другому:

Каждый кадр вы заново описываете весь свой интерфейс.

  • Хотите кнопку? Вызываете GuiButton().
  • Нужен слайдер? Вызываете GuiSlider().

Функция отрисовывает элемент и сразу же возвращает его состояние (например, была ли нажата кнопка). Это делает код невероятно простым и предсказуемым. Нет состояния, которое нужно где-то хранить, нет сложных колбэков. Вы буквально "рисуете" интерфейс в каждом кадре, и он реагирует на ввод. Это особенно удобно для игровых движков и инструментов, где цикл отрисовки уже и так работает каждый кадр.

Ключевые возможности raygui: Простота и функциональность

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

1. Богатый набор контролов: От кнопок до цветовых палитр

raygui предоставляет более 25 различных элементов управления, покрывающих большинство потребностей при создании инструментов. Здесь есть всё, что нужно:

  • Базовые: Label, Button, CheckBox, TextBox, Slider, ProgressBar.
  • Контейнеры: WindowBox, GroupBox, Line, Panel, ScrollPanel, TabBar.
  • Продвинутые: ListView, ColorPicker, MessageBox, TextInputBox.

Представьте, что вы делаете редактор уровней. Вам нужны кнопки для сохранения/загрузки, слайдеры для настройки параметров объектов, текстовые поля для ввода имен, списки для выбора текстур и даже ColorPicker для настройки цвета освещения. raygui предоставляет это из коробки!

Вот как выглядит простейший пример с кнопкой и сообщением:

#include "raylib.h"

#define RAYGUI_IMPLEMENTATION
#include "raygui.h"

int main()
{
    InitWindow(400, 200, "raygui - controls test suite");
    SetTargetFPS(60);

    bool showMessageBox = false;

    while (!WindowShouldClose())
    {
        BeginDrawing();
            ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));

            if (GuiButton((Rectangle){ 24, 24, 120, 30 }, "#191#Show Message")) showMessageBox = true;

            if (showMessageBox)
            {
                int result = GuiMessageBox((Rectangle){ 85, 70, 250, 100 },
                    "#191#Message Box", "Hi! This is a message!", "Nice;Cool");

                if (result >= 0) showMessageBox = false;
            }

        EndDrawing();
    }

    CloseWindow();
    return 0;
}

Согласитесь, код читается как открытая книга!

Пример работы raygui

2. Гибкая система стилизации: Настраиваем под себя

Стандартный вид raygui — это минималистичный, но приятный глазу стиль raylib. Однако, если вам нужно что-то своё, raygui не ограничивает. Вы можете легко настроить цвета, шрифты и метрики для каждого контрола.

Библиотека поставляется с несколькими предустановленными стилями:

Дополнительные стили raygui

А если этого мало, есть специальный инструмент rGuiStyler, который позволяет визуально создавать и редактировать стили, а затем загружать их в ваше приложение во время выполнения с помощью функции GuiLoadStyle(). Это очень удобно, когда нужно быстро подогнать интерфейс под фирменный стиль проекта.

rGuiStyler

3. Встроенная поддержка иконок: Делаем интерфейс информативнее

Мелкие, но важные детали делают интерфейс удобнее. raygui поставляется со встроенным набором из 256 монохромных иконок размером 16x16 пикселей. Их можно легко вставлять в текст кнопок или меток, просто указывая ID иконки.

Например, #05#Open Image добавит иконку открытия файла перед текстом. А для более читаемого кода можно использовать GuiIconText(RICON_FILE_OPEN, "Open Image").

Иконки raygui

И, конечно же, есть инструмент rGuiIcons для просмотра и кастомизации этого набора иконок.

4. Комплекс инструментов для разработчика

raygui — это не только библиотека, но и целая экосистема. Помимо уже упомянутых rGuiStyler и rGuiIcons, есть ещё rGuiLayout — визуальный редактор для создания и размещения элементов интерфейса. Это значительно ускоряет процесс прототипирования и позволяет дизайнерам или менее техническим специалистам участвовать в создании макетов.

rGuiLayout

Технические детали: Как это работает под капотом?

raygui — это удивительно компактная библиотека. Она реализована как single-file header-only library. Это значит, что для её использования вам достаточно просто включить один файл raygui.h в ваш проект. Для компиляции реализации функций нужно лишь один раз определить макрос RAYGUI_IMPLEMENTATION перед включением raygui.h в одном из ваших .c или .cpp файлов. Это упрощает интеграцию до предела: скопировал файл — и готово!

Изначально raygui тесно связан с raylib и использует её графические примитивы для отрисовки. Однако, благодаря своей архитектуре, его можно адаптировать и для работы с другими графическими библиотеками/движками, что делает его довольно универсальным решением для быстрых GUI.

Практическое применение: Где raygui покажет себя лучше всего?

В моей практике часто возникает потребность в небольших, но функциональных утилитах. Например:

  • Редактор конфигураций: Для игры или движка, где нужно настроить кучу параметров, от разрешения экрана до физических констант.
  • Инструмент для работы с данными: Просмотр и редактирование таблиц, баз данных, ресурсов игры (например, инвентаря персонажа или характеристик предметов).
  • Отладочные панели: Во время разработки игры или сложного алгоритма, очень удобно иметь на экране кнопки для переключения режимов, слайдеры для изменения скорости симуляции или текстовые поля для ввода команд.
  • Простые графические редакторы: Для тайлсетов, спрайтов или даже простеньких векторных изображений.

raygui идеально подходит для всех этих сценариев, когда вам нужен быстрый, функциональный и легковесный интерфейс без оверхеда больших фреймворков.

Выводы: Стоит ли попробовать raygui?

Если вы C/C++ разработчик, особенно если вы уже знакомы с raylib или ищете максимально простой способ добавить GUI в свои инструменты, raygui — это находка. Он предлагает отличный баланс между простотой использования и функциональностью.

Кому особенно подойдет:

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

Забудьте о часах, потраченных на изучение сложных систем виджетов. С raygui вы сможете сосредоточиться на логике вашего инструмента, а не на его внешнем виде. Попробуйте, и, возможно, raygui станет вашим новым любимым инструментом для создания GUI!