added base class for screen savers
This commit is contained in:
parent
5af3fd5b53
commit
751d079225
56
ScreensaverPlugin.cpp
Normal file
56
ScreensaverPlugin.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// ScreensaverPlugin.cpp
|
||||||
|
// tmp
|
||||||
|
//
|
||||||
|
// Created by Bob Polis at 2020-10-26
|
||||||
|
// Copyright (c) 2020 SwiftCoder. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "ScreensaverPlugin.hpp"
|
||||||
|
|
||||||
|
ScreensaverPlugin::ScreensaverPlugin(cairo_t* context, const cairo_rectangle_t& rect)
|
||||||
|
: _c {context}, _r {rect}, _x_dist {rect.x, rect.width}, _y_dist {rect.y, rect.height} {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreensaverPlugin::make_black() {
|
||||||
|
cairo_set_source_rgb(_c, 0, 0, 0);
|
||||||
|
cairo_rectangle(_c, 0, 0, _r.width, _r.height);
|
||||||
|
cairo_fill(_c);
|
||||||
|
}
|
||||||
|
|
||||||
|
cairo_rectangle_t ScreensaverPlugin::random_rect() {
|
||||||
|
cairo_rectangle_t rect;
|
||||||
|
double v1, v2;
|
||||||
|
v1 = random_x();
|
||||||
|
v2 = random_x();
|
||||||
|
if (v1 < v2) {
|
||||||
|
rect.x = v1;
|
||||||
|
rect.width = v2 - v1;
|
||||||
|
} else {
|
||||||
|
rect.x = v2;
|
||||||
|
rect.width = v1 - v2;
|
||||||
|
}
|
||||||
|
v1 = random_y();
|
||||||
|
v2 = random_y();
|
||||||
|
if (v1 < v2) {
|
||||||
|
rect.y = v1;
|
||||||
|
rect.height = v2 - v1;
|
||||||
|
} else {
|
||||||
|
rect.y = v2;
|
||||||
|
rect.height = v1 - v2;
|
||||||
|
}
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
double ScreensaverPlugin::random_x() {
|
||||||
|
return _x_dist(_eng);
|
||||||
|
}
|
||||||
|
|
||||||
|
double ScreensaverPlugin::random_y() {
|
||||||
|
return _y_dist(_eng);
|
||||||
|
}
|
||||||
|
|
||||||
|
double ScreensaverPlugin::random01() {
|
||||||
|
return _01_dist(_eng);
|
||||||
|
}
|
39
ScreensaverPlugin.hpp
Normal file
39
ScreensaverPlugin.hpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// ScreensaverPlugin.hpp
|
||||||
|
// screensaver
|
||||||
|
//
|
||||||
|
// Created by Bob Polis at 2020-10-26
|
||||||
|
// Copyright (c) 2020 SwiftCoder. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef _ScreensaverPlugin_H_
|
||||||
|
#define _ScreensaverPlugin_H_
|
||||||
|
|
||||||
|
#include <cairo/cairo.h>
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
class ScreensaverPlugin {
|
||||||
|
public:
|
||||||
|
ScreensaverPlugin(cairo_t* context, const cairo_rectangle_t& rect);
|
||||||
|
virtual ~ScreensaverPlugin() = default;
|
||||||
|
|
||||||
|
virtual void draw_frame() = 0;
|
||||||
|
virtual int fps() const = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
cairo_t* _c;
|
||||||
|
cairo_rectangle_t _r;
|
||||||
|
std::random_device _dev;
|
||||||
|
std::default_random_engine _eng {_dev()};
|
||||||
|
std::uniform_real_distribution<> _01_dist {};
|
||||||
|
std::uniform_real_distribution<> _x_dist;
|
||||||
|
std::uniform_real_distribution<> _y_dist;
|
||||||
|
|
||||||
|
void make_black();
|
||||||
|
cairo_rectangle_t random_rect();
|
||||||
|
double random_x();
|
||||||
|
double random_y();
|
||||||
|
double random01();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _ScreensaverPlugin_H_
|
Loading…
x
Reference in New Issue
Block a user