//
// 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_