Обновить README.md
This commit is contained in:
parent
2eba3e02f1
commit
237adfcddf
254
README.md
254
README.md
@ -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
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
```
|
||||||
|

|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Wiki** - на GitHub/GitLab можно создать отдельную Wiki для расширенной документации
|
||||||
|
|
||||||
|
4. **GitHub Pages** - можно сгенерировать HTML документацию (как я сделал выше) и разместить на GitHub Pages
|
||||||
|
|
||||||
|
Нужна помощь с чем-то конкретным из этого?
|
||||||
Loading…
x
Reference in New Issue
Block a user