// // Huey.cpp // screensaver // // Created by Bob Polis at 2020-10-26 // Copyright (c) 2020 SwiftCoder. All rights reserved. // #include "Huey.hpp" #include #include #include #include class Huey : public ScreensaverPlugin { public: Huey() = default; ~Huey() = default; int fps() const override; void update() override; void render() override; private: double _hue {0}; }; ScreensaverPlugin* create_instance() { return new Huey; } int Huey::fps() const { return 5; } void Huey::update() { } void Huey::render() { // next color HSB hsb; hsb.h = _hue; hsb.s = 1.0; hsb.b = 0.4; // convert to rgb Color color {hsb}; RGB rgb {RGB(color)}; // setup color, fill whole window cairo_set_source_rgb(_c, rgb.r, rgb.g, rgb.b); cairo_rectangle(_c, _r.x, _r.y, _r.width, _r.height); cairo_fill(_c); // show hue value std::ostringstream hue_oss; hue_oss << "hue: " << std::setw(3) << static_cast(_hue); std::ostringstream rgb_oss; rgb_oss << "red: " << std::setw(3) << static_cast(255 * rgb.r); rgb_oss << ", green: " << std::setw(3) << static_cast(255 * rgb.g); rgb_oss << ", blue: " << std::setw(3) << static_cast(255 * rgb.b); cairo_set_source_rgb(_c, 0, 0, 0); cairo_select_font_face(_c, "Hack", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(_c, 24); cairo_move_to(_c, 31, 51); cairo_show_text(_c, hue_oss.str().c_str()); cairo_move_to(_c, 31, 87); cairo_show_text(_c, rgb_oss.str().c_str()); cairo_set_source_rgb(_c, 1, 1, 1); cairo_move_to(_c, 29, 49); cairo_show_text(_c, hue_oss.str().c_str()); cairo_move_to(_c, 29, 85); cairo_show_text(_c, rgb_oss.str().c_str()); // update for next frame _hue += 0.5; if (_hue >= 360.0) { _hue -= 360.0; } }