11 #include <RADUi/RADPlot.h>
12 #include <RADUi/RADSlintBackend.h>
26 const uint32_t width =
static_cast<uint32_t
>(std::max(1, image.
width));
27 const uint32_t height =
static_cast<uint32_t
>(std::max(1, image.
height));
28 slint::SharedPixelBuffer<slint::Rgba8Pixel> buffer(width, height);
30 auto* pixels = buffer.begin();
31 const size_t count =
static_cast<size_t>(width * height);
32 for (
size_t i = 0; i < count; ++i) {
33 const auto source = i < image.
pixels.size()
36 pixels[i] = {source.
r, source.g, source.b, source.a};
39 return slint::Image(buffer);
44 template<
typename Component,
typename Setter>
50 const slint::ComponentHandle<Component>& component,
53 double framesPerSecond,
55 : state_(std::make_shared<State>(
69 state->scheduler.requestUpdate([state]()
mutable {
70 if (
auto componentHandle = state->weakComponent.lock()) {
71 const auto snapshot = state->model.snapshot();
72 auto image = state->renderer->render(snapshot, state->viewport);
73 auto& component = **componentHandle;
74 (component.*state->setter)(RADUi::Slint::toSlintImage(image));
83 const slint::ComponentHandle<Component>& component,
86 double framesPerSecond,
89 weakComponent(component),
91 viewport(viewportRef),
92 scheduler(framesPerSecond),
96 slint::ComponentWeakHandle<Component> weakComponent;
100 std::unique_ptr<RADUi::PlotRenderer> renderer;
103 std::shared_ptr<State> state_;
109 template<
typename Component,
typename Setter>
112 const slint::ComponentHandle<Component>& component,
115 double framesPerSecond = 60.0,
119 model, component, setter, viewport, framesPerSecond, renderMode));
Explicit event connection handle.
Definition: RADCore.h:903
Base class for event receivers, senders, and thread-affinity aware objects.
Definition: RADCore.h:931
RAII-style binding handle that keeps a bridge object alive until disconnected.
Definition: RADUi.h:28
Coalesces UI updates so expensive redraws occur at a target frame rate.
Definition: RADUi.h:77
Mutable X/Y plot data model that emits dataChanged on edits.
Definition: RADPlot.h:171
RADCore::Event< void() > dataChanged
Raised when series data, ranges, or styles change.
Definition: RADPlot.h:175
Bridge object that renders a PlotModel into a Slint image property.
Definition: RADSlintPlot.h:45
void handleDataChanged()
Schedules a rate-limited render after model data changes.
Definition: RADSlintPlot.h:67
PlotComponentBridge(RADUi::PlotModel &model, const slint::ComponentHandle< Component > &component, Setter setter, RADUi::PlotViewport viewport, double framesPerSecond, RADUi::PlotRenderMode renderMode)
Connects to model changes and configures rendering.
Definition: RADSlintPlot.h:48
Definition: RADSlintBackend.h:20
slint::Image toSlintImage(const RADUi::PlotImage &image)
Converts a RADUi plot image to a Slint image.
Definition: RADSlintPlot.h:25
RADUi::Binding bindPlotToImageProperty(RADUi::PlotModel &model, const slint::ComponentHandle< Component > &component, Setter setter, RADUi::PlotViewport viewport, double framesPerSecond=60.0, RADUi::PlotRenderMode renderMode=RADUi::PlotRenderMode::Software)
Binds model rendering to a generated Slint image property setter.
Definition: RADSlintPlot.h:110
Definition: RADAppKit.h:20
std::unique_ptr< PlotRenderer > createPlotRenderer(PlotRenderMode mode)
Creates a renderer for mode.
PlotRenderMode
Renderer implementation selection.
Definition: RADPlot.h:163
@ Software
CPU software renderer.
RGBA image returned by plot renderers.
Definition: RADPlot.h:153
int width
Image width in pixels.
Definition: RADPlot.h:155
std::vector< PlotPixel > pixels
Pixel buffer in row-major order.
Definition: RADPlot.h:159
int height
Image height in pixels.
Definition: RADPlot.h:157
One output pixel.
Definition: RADPlot.h:141
uint8_t r
Red component.
Definition: RADPlot.h:143
Pixel viewport and axis rendering configuration.
Definition: RADPlot.h:111