ShapesEditor
Éditeur de formes géométriques 2D interactif et extensible développé en C++20 avec la bibliothèque EZ-Draw++ : création, manipulation, stylisation et persistance de formes via la souris et le clavier.

"Langage & Standard":
C++20
"Bibliothèque graphique":
EZ-Draw++ / EZ-Draw (Eric Rémy)
"Backend graphique":
X11 (Linux)
"Build multiplateforme":
Makefiles (Linux / MinGW / MSYS)
Langage
C++20
Bibliothèque
EZ-Draw++
Backend
X11 (Linux)
Présentation & Architecture Technique
Pas de Qt, pas de framework GUI tout fait : EZ-Draw donne un canvas et des événements souris/clavier à l'état brut. Boutons, callbacks, sélection multiple - tout UI.hpp est écrit à la main, ce qui oblige à comprendre exactement ce qu'un framework fait d'habitude à ta place.
Classe abstraite Shape
Racine de la hiérarchie, portant les attributs communs à toutes les formes : point d'ancrage, couleur, épaisseur de trait, mode de remplissage.
Spécialisation par héritage
Square hérite de Rectangle, Circle hérite de Ellipse - les formes dérivées réutilisent la géométrie de leur parent au lieu de la dupliquer.
Factory Pattern (sauvegarde/chargement)
Enregistrement dynamique via register_factory_function : chaque classe s'enregistre auprès de Shape pour permettre une désérialisation polymorphique depuis shapes.txt.
SetOfShapes & MyWindow
SetOfShapes gère la scène globale ; MyWindow (héritant de EZWindow) gère l'événementiel souris/clavier et s'appuie sur UI.hpp pour les briques GUI personnalisées.

Fonctionnalités Clés
Création & Outils
Ajout de formes via boutons d'interface ou raccourcis clavier dédiés :
Interactions & Édition
Sélection simple et multiple (Ctrl + clic), glisser-déposer, personnalisation du remplissage, de l'épaisseur et de la typographie des étiquettes.
Palette de couleurs, ou raccourcis directs :
Persistance de données
Sauvegarde (S) et chargement (L) de l'état complet de la scène dans un fichier texte structuré, shapes.txt.


Compilation & Tooling Multiplateforme
Support natif C++20 avec un système de build dédié par système d'exploitation, plutôt qu'un unique Makefile générique masquant les différences de backend graphique.
$ compilation (Linux / X11)
sudo apt install libx11-dev libxext-dev
make$ compilation (Windows)
# MinGW
make -f Makefile_win.mk
# ou MSYS
make -f Makefile_MSYS.mkCe que j'ai appris
Héritage & Abstraction (POO)
Classe abstraite racine Shape portant les attributs communs (ancrage 2D Point, couleur, épaisseur de trait, mode de remplissage), avec spécialisation par héritage : Square hérite de Rectangle, Circle hérite de Ellipse.
Factory Pattern & Sérialisation Polymorphique
Système d'enregistrement dynamique via register_factory_function : chaque classe s'enregistre auprès de Shape pour permettre de recréer le bon type concret au chargement du fichier shapes.txt, sans le connaître à l'avance.
Événementiel & UI Custom (EZWindow)
MyWindow hérite de EZWindow pour gérer souris et clavier bas niveau (glisser-déposer, sélection multiple via Ctrl), avec des briques d'interface personnalisées (boutons, callbacks, labels) écrites à la main dans UI.hpp.
Compilation Multiplateforme
Système de build dédié par OS : Makefile classique sous Linux (dépendances libx11-dev / libxext-dev), et scripts MinGW / MSYS séparés sous Windows pour gérer les différences de backend graphique.