Quindi sto ancora lavorando alla mia piccola "biblioteca" della GUI. (C ++ con boost) L'obiettivo è fornire una soluzione semplice per piccoli display SPI, utilizzando un Raspberry o una scheda incorporata.
Così, ho finito per avere una classe Widget da cui derivano i widget concreti. Gli esempi sarebbero una casella di testo o una cornice di immagine. I widget possono contenere altri widget per consentire i gruppi. Ciò è ottenuto tramite aggregazione utilizzando un contenitore STL. Alla fine, il set di dati GUI completo può essere visto come una specie di albero, con alcuni nodi con nodi figlio.
Ogni widget deve avere un metodo di disegno che assomiglia a
void drawMe(brush *myBrush);
Un pennello fornisce metodi di disegno primitivi come "setPixel" o "drawRectangle" Ciò consente al widget di disegnare se stesso, utilizzando i metodi forniti dal pennello. Un widget si disegna per prima, quindi richiama il metodo drawMe di ogni widget figlio, se presente.
Ora parliamo del mio problema. Ogni widget ha le sue coordinate, relative al genitore. Questo non è abbastanza, il pennello ha bisogno della coordinata assoluta del widget, perché un pennello non sa nulla di bambini o genitori. Un pennello fornisce solo metodi come setPixel (int x, int y) e disegna in un buffer di pixel.
Ma in qualche modo ho una brutta sensazione lasciando che i widget conoscano le sue coordinate assolute. Questo sembra sbagliato. D'altra parte, al momento un bambino non sa che è di proprietà di un genitore, quindi, in nessun modo un widget può calcolare le sue coordinate assolute.
Posso implementare la soluzione alternativa nel pennello, in modo che il pennello supporti più livelli invece di una sola tela (il buffer dei pixel). Un genitore deve quindi impostare i livelli per i propri figli. Sembra un trucco sporco.
Inoltre, è una buona idea che il genitore conosca le sue coordinate figlio?
Vedi, sono da qualche parte perso con questi problemi. Ci sono framework GUI là fuori, come QT e cose del genere. Quindi, il mio problema dovrebbe essere conosciuto e risolto già. Hai qualche suggerimento? Come implementeresti il processo di disegno?
L'intero progetto riguarda l'apprendimento di nuove cose, principalmente paradigmi OOP. Mi piace sentire la tua opinione su questo.