Обновить README.md

This commit is contained in:
KoDer 2026-08-23 17:57:34 +00:00
parent 2eba3e02f1
commit 237adfcddf

254
README.md
View File

@ -1,3 +1,253 @@
# gui # X11 GUI Library
Lightweight X11 GUI library for C++ with widget system and event handling Легковесная GUI библиотека для C++ с использованием X11.
## Возможности
- Программный рендеринг виджетов
- Событийно-ориентированная архитектура (EventBus)
- Поддержка анимаций
- Иерархия виджетов
- Работа с изображениями (BMP, PPM)
## 📦 Установка
```bash
git clone https://github.com/yourusername/gui.git
cd gui
mkdir build && cd build
cmake ..
make
```
## 🎯 Быстрый старт
```cpp
#include "gui.h"
int main() {
gui::window win("Мое Приложение");
win.addPAGE("main");
win.configur_page("main", [](gui::page& p) {
gui::WidgetData btnData;
btnData.id = "my_button";
btnData.text = "Нажми меня!";
btnData.x = 50;
btnData.y = 50;
btnData.width = 150;
btnData.height = 40;
p.Button(btnData);
}, true);
gui::EventBus::get().on("button.click", [](const gui::EventData& e) {
std::cout << "Button clicked: " << e.source_id << std::endl;
});
while (true) {
win.update();
}
return 0;
}
```
## 📚 API Документация
### Основные классы
#### gui::window
Основное окно приложения.
**Методы:**
- `window(std::string title)` - создание окна
- `void update()` - главный цикл обработки событий
- `void addPAGE(std::string name)` - добавление страницы
- `void configur_page(std::string name, callback_page fn, bool active)` - настройка страницы
- `void openPAGE(std::string name)` - открытие страницы
#### gui::page
Страница/вкладка с виджетами.
**Методы создания виджетов:**
- `Button(WidgetData data)` - кнопка
- `Label(WidgetData data)` - текстовая метка
- `Input(WidgetData data)` - поле ввода
- `Checkbox(WidgetData data)` - флажок
- `Slider(WidgetData data)` - ползунок
- `Progressbar(WidgetData data)` - индикатор прогресса
- `Listbox(WidgetData data)` - список
- `Dropdown(WidgetData data)` - выпадающий список
- `TreeView(WidgetData data)` - дерево
- `RawPictureWidget(WidgetData data)` - изображение
#### gui::WidgetData
Структура данных для настройки виджета.
```cpp
struct WidgetData {
WidgetType type; // Тип виджета
std::string text; // Текст
std::string id; // Уникальный ID
unsigned long bg_color; // Цвет фона (0xRRGGBB)
unsigned long fg_color; // Цвет текста
int x, y; // Позиция
int width, height; // Размеры
bool checked; // Состояние (для checkbox/radio)
float value; // Значение (для slider/progress)
std::vector<std::string> items; // Элементы списка
callback_void on_change; // Callback при изменении
};
```
#### gui::EventBus
Система событий.
**Методы:**
- `static EventBus& get()` - получение экземпляра
- `int on(const std::string& event, Handler h)` - подписка на событие
- `void off(int token)` - отписка
- `void emit(const std::string& event, EventData data)` - генерация события
**События виджетов:**
- `"button.click"` - нажатие кнопки
- `"slider.change"` - изменение слайдера
- `"checkbox.change"` - изменение чекбокса
- `"list.select"` - выбор элемента списка
- `"dropdown.select"` - выбор из выпадающего списка
- `"input.submit"` - отправка ввода (Enter)
### gui::RawPicture
Класс для работы с изображениями.
**Методы:**
- `void create(int w, int h, int bits)` - создание буфера
- `void setPixel(int x, int y, uint32_t color)` - установка пикселя
- `void drawLine(...)` - рисование линии
- `void fillRect(...)` - заполнение прямоугольника
- `void drawCircle(...)` - рисование круга
- `void fillCircle(...)` - заполнение круга
- `void drawText(...)` - рисование текста
- `bool load(const std::string& path)` - загрузка BMP/PPM
- `void present(...)` - вывод на экран
## Доступные виджеты
| Виджет | Описание |
|--------|----------|
| **Button** | Кнопка с текстом или изображением |
| **Label** | Текстовая метка |
| **Input** | Поле ввода текста |
| **Checkbox** | Флажок (вкл/выкл) |
| **Radio** | Радиокнопка |
| **Slider** | Ползунок (0.0 - 1.0) |
| **Progressbar** | Индикатор прогресса |
| **Listbox** | Список с прокруткой |
| **Dropdown** | Выпадающий список |
| **TreeView** | Древовидная структура |
| **ScrollView** | Область прокрутки |
| **RawPicture** | Отображение изображения |
## Требования
- X11
- C++17 или выше
- CMake 3.10+
## Примеры
### Создание кнопки
```cpp
gui::WidgetData btn;
btn.id = "start_btn";
btn.text = "Старт";
btn.x = 100;
btn.y = 100;
btn.width = 120;
btn.height = 40;
btn.bg_color = 0x2563EB; // Синий
btn.fg_color = 0xFFFFFF; // Белый текст
page.Button(btn);
```
### Работа с событиями
```cpp
gui::EventBus::get().on("button.click", [](const gui::EventData& e) {
if (e.source_id == "start_btn") {
std::cout << "Start button clicked!" << std::endl;
}
});
```
### Создание слайдера
```cpp
gui::WidgetData slider;
slider.id = "volume";
slider.type = gui::WidgetType::SLIDER;
slider.x = 50;
slider.y = 200;
slider.width = 200;
slider.height = 20;
slider.value = 0.5; // 50%
gui::EventBus::get().on("slider.change", [](const gui::EventData& e) {
std::cout << "Volume: " << (e.value * 100) << "%" << std::endl;
});
page.Slider(slider);
```
## Структура проекта
```
gui/
├── include/
│ └── gui.h # Заголовочный файл
── src/
│ └── gui.cpp # Реализация
├── examples/
│ └── basic.cpp # Пример использования
├── CMakeLists.txt
└── README.md
```
## 🤝 Contributing
1. Fork репозиторий
2. Создайте ветку (`git checkout -b feature/AmazingFeature`)
3. Закоммитьте изменения (`git commit -m 'Add some AmazingFeature'`)
4. Отправьте в ветку (`git push origin feature/AmazingFeature`)
5. Откройте Pull Request
## 📄 Лицензия
Распространяется под лицензией MIT.
## 👥 Авторы
- **Your Name** - *Initial work*
## 🙏 Благодарности
- X11 library
- Все, кто тестировал и помогал с разработкой
```
## 🎯 Что еще можно добавить:
1. ** badges** в начало README:
```markdown
![Platform](https://img.shields.io/badge/platform-Linux-blue)
![License](https://img.shields.io/badge/license-MIT-green)
![C++](https://img.shields.io/badge/C++-17-blue)
```
![Demo](screenshots/demo.png)
```
3. **Wiki** - на GitHub/GitLab можно создать отдельную Wiki для расширенной документации
4. **GitHub Pages** - можно сгенерировать HTML документацию (как я сделал выше) и разместить на GitHub Pages
Нужна помощь с чем-то конкретным из этого?