#ifndef PRIMITIVES_JUPYTER_H #define PRIMITIVES_JUPYTER_H /** Variante de primitives.h pour dessiner dans Jupyter, sans la SFML CAVEAT: Ceci est une pure rustine, du genre que l'on bricole entre minuit et 3h du mat pour sauver un TP, en attendant une solution pérenne: backend Jupyter pour SFML, utilisation de xcanvas (https://github.com/martinRenou/xcanvas) l'équivalent de ipycanvas (https://ipycanvas.readthedocs.io/) pour C++, ou possibilité de lancer des applications graphiques sur JupyterHub. NE PRENNEZ PAS EXEMPLE DESSUS! **/ #include <xcanvas/xcanvas.hpp> namespace Color { using Color = std::string; Color White = "White"; Color Blue = "Blue"; Color Red = "Red"; Color Yellow = "Yellow"; Color Green = "#00CC00"; Color Black = "Black"; } class Point { public: int x; int y; Point(int _x, int _y): x(_x), y(_y) {}; Point(double _x, double _y): x(_x), y(_y) {}; }; class VideoMode { public: int width; int height; VideoMode(int w, int h): width(w), height(h) {} }; using Canvas = xw::xmaterialize<xc::xcanvas>; class RenderWindow { VideoMode vm; public: Canvas canvas; RenderWindow(VideoMode _vm, std::string s) : vm(_vm) { vm = _vm; canvas = xc::canvas().initialize() .width(vm.width) .height(vm.height) .finalize(); canvas.cache(); } Canvas& get_canvas() { return canvas; } // Clear the canvas with the given color void clear(Color::Color color) { canvas.fill_style = color; canvas.fill_rect(0, 0, vm.width, vm.height); display(); } void display() { canvas.flush(); canvas.cache(); } }; void draw_point(RenderWindow &window, Point p, Color::Color color) { window.canvas.fill_style = color; window.canvas.fill_rect(p.x, p.y, 1, 1); } #endif