Обновить 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