43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
//
|
|
// 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() = default;
|
|
virtual ~ScreensaverPlugin() = default;
|
|
|
|
virtual void setup(cairo_t* context, const cairo_rectangle_t& rect);
|
|
virtual int fps() const;
|
|
|
|
virtual void update() = 0; // advance state for next frame
|
|
virtual void render() = 0; // draw next frame
|
|
|
|
protected:
|
|
cairo_t* _c {nullptr};
|
|
cairo_rectangle_t _r {};
|
|
std::random_device _dev {};
|
|
std::default_random_engine _eng {_dev()};
|
|
|
|
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);
|
|
void rounded_rect(const cairo_rectangle_t& rect, double radius);
|
|
};
|
|
|
|
#endif // _ScreensaverPlugin_H_
|