Aggancia alle funzionalità della griglia nell'applicazione di disegno

3

Sto lavorando all'applicazione di disegno e voglio fornire una griglia con funzionalità di snap alla griglia. Sto cercando di trovare il modo giusto di farlo (idealmente un modello di progettazione), ma sono abbastanza confuso riguardo alla classe giusta che dovrebbe essere responsabile di ciò.

Ho una classe editor che ha un oggetto strumento attivo. L'editor sta ascoltando tutte le azioni dell'utente (clic del mouse, spostamento del mouse e così via ...) e le passa all'oggetto strumento attivo. L'oggetto strumento attivo gestisce quindi quegli eventi e restituisce la forma in base al suo stato (il primo clic attiva lo strumento, quindi ascolta il movimento del mouse e disegna l'anteprima della forma e il secondo clic crea la forma nella mia classe del modello).

Sto pensando di usare il pattern Filtro di intercettazione - ogni evento passerà attraverso il filtro per primo e il risultato sarà passato allo strumento attivo quindi. Immagino che potrebbe funzionare per la creazione di oggetti, ma cosa fare con le azioni di spostamento e ridimensionamento? Quelli dipendono dall'oggetto reale che viene spostato / ridimensionato.

    
posta Klinki 15.02.2016 - 08:21
fonte

1 risposta

1

Mentre il puntatore del mouse si sposta sulla griglia, il framework dell'interfaccia utente deve inviare eventi all'applicazione che finiscono nell'oggetto della vista della griglia, indicando dove si trova il puntatore.

Quello di cui hai bisogno è un oggetto che intercetti l'evento e passa un evento nuovo o modificato al tuo oggetto griglia. Controlla l'evento del mouse, acquisisce le sue coordinate, quindi calcola nuove coordinate che si agganciano a una griglia configurabile. Genera un nuovo evento e lo sostituisce al posto di quello originale nell'oggetto griglia. Se il tipo di evento non è un evento di spostamento del mouse, basta semplicemente passarlo senza modificarlo.

La tua classe di griglia dovrebbe contenere la logica per dipingere un piccolo pennino dove pensa che il mouse stia puntando, per indicare all'utente dove si sta muovendo il mouse.

Ogni framework dell'interfaccia utente è diverso, ma l'idea generale di "evento è arrivato, posso consumarlo, modificarlo / sostituirlo o ignorarlo" è abbastanza comune. La semantica di come realizzare queste azioni è sicuramente diversa, quindi è difficile dire con certezza come sarebbe implementata.

Un metodo che può funzionare è creare un elemento GUI invisibile che contenga la tua griglia ed abbia esattamente le stesse dimensioni. La maggior parte dei framework passa gli eventi dall'alto verso il basso calcolando la pila di elementi che esistono in un dato punto, iniziando dal livello genitore (es. Cornice della finestra), spostandosi nel mezzo (es. Pannelli / pannelli / elementi di gruppo) e finendo al bambino livello (l'elemento della GUI individuale che di solito è quello che usa l'evento). Potresti fare in modo che il genitore della griglia modifichi gli eventi del mouse mentre passano attraverso.

Ignorando eventi non correlati al movimento del mouse puoi consentire lo spostamento degli eventi di spostamento / ridimensionamento: essendo l'oggetto padre della griglia, dovrebbe essere spostato e ridimensionato gratuitamente quando il figlio esegue tali azioni.

    
risposta data 24.02.2016 - 06:24
fonte

Leggi altre domande sui tag