Several improvements

- Make all random functions const
- Remove make_black() call from setup()
- Add optional size_changed() override
This commit is contained in:
2025-10-27 11:18:33 +01:00
parent 2b5f589506
commit 2c01e472b0
2 changed files with 23 additions and 13 deletions

View File

@@ -1,10 +1,10 @@
#include "ScreensaverPlugin.hpp"
#include <cairo/cairo.h>
#include <libscnumerics.hpp>
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<double> dx {rect.x, rect.width};
std::uniform_real_distribution<double> 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<double> dist {0, _r.width};
return dist(sc::random::instance().engine());
}
double ScreensaverPlugin::random_y() {
double ScreensaverPlugin::random_y() const {
std::uniform_real_distribution<double> dist {0, _r.height};
return dist(sc::random::instance().engine());
}
double ScreensaverPlugin::random01() {
double ScreensaverPlugin::random01() const {
std::uniform_real_distribution<double> 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<double> 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
}

View File

@@ -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);
};