Files
wlrootspp/include/wlr/scene.hpp
T
AstralZX 5bd1c6561c add xdg decoration, scene/tree factories, geometry + seat focus
more wrapper soup. xdg decoration manager, scene/tree node factories so
callers stop touching raw wlr_scene_*_create, a box geometry helper, and
seat pointer/keyboard focus clearing. dragging myself through it.
2026-08-29 10:04:50 +02:00

53 lines
1.8 KiB
C++

// SPDX-License-Identifier: AGPL-3.0-only
#pragma once
#include <string>
#include "wlr/wlr.hpp"
#include "wlr/color.hpp"
#include "wlr/node.hpp"
namespace wlr {
std::string version();
class Scene {
public:
Scene() : m_scene(wlr_scene_create()) {}
~Scene() { if (m_scene) wlr_scene_node_destroy(&m_scene->tree.node); }
Scene(const Scene&) = delete;
Scene& operator=(const Scene&) = delete;
Scene(Scene&&) = delete;
Scene& operator=(Scene&&) = delete;
struct wlr_scene* raw() const { return m_scene; }
explicit operator bool() const { return m_scene != nullptr; }
void set_blur_data(int num_passes, int radius, float noise,
float brightness, float contrast, float saturation) {
wlr_scene_set_blur_data(m_scene, num_passes, radius,
noise, brightness, contrast, saturation);
}
void set_blur_num_passes(int num_passes) { wlr_scene_set_blur_num_passes(m_scene, num_passes); }
void set_blur_radius(int radius) { wlr_scene_set_blur_radius(m_scene, radius); }
void set_blur_noise(float noise) { wlr_scene_set_blur_noise(m_scene, noise); }
void set_blur_brightness(float brightness) { wlr_scene_set_blur_brightness(m_scene, brightness); }
void set_blur_contrast(float contrast) { wlr_scene_set_blur_contrast(m_scene, contrast); }
void set_blur_saturation(float saturation) { wlr_scene_set_blur_saturation(m_scene, saturation); }
struct wlr_scene_tree* root() { return &m_scene->tree; }
Tree add_tree() { return Tree{wlr_scene_tree_create(&m_scene->tree)}; }
Rect add_rect(int w, int h, const Color& c) {
float col[4]; c.apply(col);
return Rect{wlr_scene_rect_create(&m_scene->tree, w, h, col)};
}
Buffer add_buffer() { return Buffer{wlr_scene_buffer_create(&m_scene->tree, nullptr)}; }
Surface add_surface(struct wlr_surface* s) { return Surface{wlr_scene_surface_create(&m_scene->tree, s)}; }
private:
struct wlr_scene* m_scene;
};
}