From 2c01e472b077c6a18c897362ed26b3527e359f37 Mon Sep 17 00:00:00 2001 From: Bob Polis Date: Mon, 27 Oct 2025 11:18:33 +0100 Subject: [PATCH] Several improvements - Make all random functions const - Remove make_black() call from setup() - Add optional size_changed() override --- src/ScreensaverPlugin.cpp | 22 +++++++++++++++------- src/ScreensaverPlugin.hpp | 14 ++++++++------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/ScreensaverPlugin.cpp b/src/ScreensaverPlugin.cpp index d4a1d25..d60fa9a 100644 --- a/src/ScreensaverPlugin.cpp +++ b/src/ScreensaverPlugin.cpp @@ -1,10 +1,10 @@ #include "ScreensaverPlugin.hpp" +#include #include void ScreensaverPlugin::setup(cairo_t* context, const cairo_rectangle_t& rect) { _c = context; _r = rect; - make_black(); } int ScreensaverPlugin::fps() const { @@ -17,11 +17,11 @@ void ScreensaverPlugin::make_black() { cairo_fill(_c); } -cairo_rectangle_t ScreensaverPlugin::random_rect() { +cairo_rectangle_t ScreensaverPlugin::random_rect() const { return random_rect_in_rect(_r); } -cairo_rectangle_t ScreensaverPlugin::random_rect_in_rect(const cairo_rectangle_t& rect) { +cairo_rectangle_t ScreensaverPlugin::random_rect_in_rect(const cairo_rectangle_t& rect) const { cairo_rectangle_t r; std::uniform_real_distribution dx {rect.x, rect.width}; std::uniform_real_distribution dy {rect.y, rect.height}; @@ -47,22 +47,26 @@ cairo_rectangle_t ScreensaverPlugin::random_rect_in_rect(const cairo_rectangle_t return r; } -double ScreensaverPlugin::random_x() { +bool ScreensaverPlugin::random_bool() const { + return sc::random::boolean(); +} + +double ScreensaverPlugin::random_x() const { std::uniform_real_distribution dist {0, _r.width}; return dist(sc::random::instance().engine()); } -double ScreensaverPlugin::random_y() { +double ScreensaverPlugin::random_y() const { std::uniform_real_distribution dist {0, _r.height}; return dist(sc::random::instance().engine()); } -double ScreensaverPlugin::random01() { +double ScreensaverPlugin::random01() const { std::uniform_real_distribution dist {}; return dist(sc::random::instance().engine()); } -double ScreensaverPlugin::random_between(double v1, double v2) { +double ScreensaverPlugin::random_between(double v1, double v2) const { std::uniform_real_distribution dist {v1, v2}; return dist(sc::random::instance().engine()); } @@ -100,3 +104,7 @@ void ScreensaverPlugin::config(nlohmann::json&& data) { void ScreensaverPlugin::configure() { // empty default implementation } + +void ScreensaverPlugin::size_changed() { + // empty default implementation +} diff --git a/src/ScreensaverPlugin.hpp b/src/ScreensaverPlugin.hpp index e79c167..c694a92 100644 --- a/src/ScreensaverPlugin.hpp +++ b/src/ScreensaverPlugin.hpp @@ -11,6 +11,7 @@ class ScreensaverPlugin { virtual void setup(cairo_t* context, const cairo_rectangle_t& rect); virtual void configure(); + virtual void size_changed(); virtual int fps() const; virtual std::string version() const = 0; @@ -27,12 +28,13 @@ class ScreensaverPlugin { nlohmann::json _j {}; void make_black(); - cairo_rectangle_t random_rect(); - cairo_rectangle_t random_rect_in_rect(const cairo_rectangle_t& rect); - double random_x(); - double random_y(); - double random01(); - double random_between(double v1, double v2); + cairo_rectangle_t random_rect() const; + cairo_rectangle_t random_rect_in_rect(const cairo_rectangle_t& rect) const; + bool random_bool() const; + double random_x() const; + double random_y() const; + double random01() const; + double random_between(double v1, double v2) const; void rounded_rect(const cairo_rectangle_t& rect, double radius); };