Изображение (image)
Контрол image предназначен для отображения изображений с поддержкой визуальных тем.
Быстрый старт
#include <wui/control/image.hpp>
// Из файла
auto logo = std::make_shared<wui::image>("res/logo.png");
window->add_control(logo, {10, 10, 100, 100});
// Из ресурса (Windows)
#ifdef _WIN32
auto icon = std::make_shared<wui::image>(IDI_LOGO);
window->add_control(icon, {10, 10, 32, 32});
#endif
// Из данных
std::vector<uint8_t> png_data = load_png_file("icon.png");
auto img = std::make_shared<wui::image>(png_data);
window->add_control(img, {50, 50, 64, 64});
API
Конструкторы
// Из ресурса (Windows)
image(int32_t resource_index, std::shared_ptr<i_theme> theme_ = nullptr);
// Из файла
image(std::string_view file_name, std::shared_ptr<i_theme> theme_ = nullptr);
// Из данных
image(const std::vector<uint8_t> &data);
Методы
// Смена изображения
void change_image(int32_t resource_index); // Windows
void change_image(std::string_view file_name);
void change_image(const std::vector<uint8_t> &data);
// Размеры
int32_t width() const;
int32_t height() const;
Работа с темами
image автоматически поддерживает смену тем. Настройки хранятся в теме:
light.json
{
"type": "image",
"resource": "IMAGES_LIGHT",
"path": "res/images/light"
}
dark.json
{
"type": "image",
"resource": "IMAGES_DARK",
"path": "res/images/dark"
}
При смене темы изображения автоматически подгружаются из соответствующей директории или ресурса.
Примеры
Логотип приложения
// В конструкторе окна
logo_ = std::make_shared<wui::image>("res/logo.png");
window->add_control(logo_, {10, 10, 128, 64});
Иконка с ресурсом (Windows)
// resource.h
#define IMG_LOGO 109
#define IMG_SAVE 110
// В rc-файле
IMG_LOGO IMAGES_DARK "res\\images\\dark\\logo.png"
IMG_LOGO IMAGES_LIGHT "res\\images\\light\\logo.png"
// В коде
#ifdef _WIN32
auto logo = std::make_shared<wui::image>(IMG_LOGO);
#endif
Динамическая смена изображения
auto status_icon = std::make_shared<wui::image>("res/online.png");
window->add_control(status_icon, {10, 10, 16, 16});
// При изменении статуса
if (is_online) {
status_icon->change_image("res/online.png");
} else {
status_icon->change_image("res/offline.png");
}
Интеграция с button
Кнопки используют image internally для отображения иконок:
auto save_btn = std::make_shared<wui::button>(
"Save",
[]() { save(); },
wui::button_view::image_right_text,
"res/save.png",
16
);
См. также
- Кнопка — использует image для иконок
- Визуальные темы