Sto sviluppando una serie di semplici widget per un piccolo display (128x128).
Ad esempio mi piacerebbe avere una schermata principale con un menu di sovrapposizione che posso usare per attivare la visibilità degli elementi della schermata principale. Ogni opzione sarebbe un'icona con un riquadro attorno mentre è selezionata. Gli eventi Button (sinistra, su, destra, giù, invio) dovrebbero essere assegnati al widget che ha "focus".
La messa a fuoco è una cosa semplice da capire quando utilizza una GUI, ma ho problemi ad implementarlo. Puoi suggerire un concetto semplice per gestire l'attenzione e inserire gli eventi? Ho queste idee semplici:
- Solo un widget può avere lo stato attivo, quindi ho bisogno di un singolo puntatore per quel widget.
- Quando questo widget riceve una sorta di input "ciclo" (come in "evidenzia l'elemento successivo in questo elenco"), l'attenzione viene assegnata a un altro widget.
- un widget deve avere un modo di dire all'applicazione quale widget viene messo a fuoco al prossimo.
- se un widget non può fornire un suggerimento sul "prossimo fuoco", l'applicazione deve essere in grado di capire dove dovrebbe andare l'attenzione.
I widget sono attualmente strutturati in questo modo:
- Un widget può avere un genitore, che viene passato al costruttore. I widget vengono creati staticamente, poiché voglio evitare l'allocazione dinamica della memoria (ho solo 16kB di RAM e mi piacerebbe avere il controllo su quello). I widget
- hanno fratelli, implementati come un elenco collegato intrusivo (hanno un membro
next
). Un genitore ha un puntatore alla testa del suo elenco di bambini.
Gli eventi di input sono argomenti ai metodi di buttonEvent
dei widget che possono accettare o ignorare quell'evento. Se ignora l'evento, può passare l'evento al suo genitore.
Le mie domande:
- Come posso gestire l'attivazione di questi widget?
- Sto rendendo questo troppo complicato?