2010-10-16 10 views
5

Come fanno le persone a creare GUI? Intendo il principio base o il principio base per disegnare componenti visuali sullo schermo come KDE, Gnome, ecc. Esistono semplici esempi su come disegnare qualcosa come un rettangolo sullo schermo occupandosi direttamente dell'hardware?Come vengono disegnate le GUI?

Sto utilizzando un PC per coloro che chiedono informazioni sulla mia piattaforma.

+0

Dipende interamente dalla piattaforma. – EboMike

+0

Quando si dice "PC", si intende probabilmente "Windows"? Ok, il prossimo: di quale livello stiamo parlando? Stai creando un'app per Windows con la sua GUI? O stai scrivendo il tuo sistema creativo ?! – EboMike

+0

Quando dico un PC intendo un PC non Windows. Sono dual windows di avvio e Linux allo stesso tempo. Un esempio per Windows o Linux sarà utile ma voglio davvero essere indipendente dalla piattaforma. Voglio occuparmi direttamente dell'hardware. Non sto cercando di ottenere una certa funzionalità, ma voglio sapere come funziona una cosa del genere. – Lettuce

risposta

6

Bene ok, iniziamo dal basso. Hai un monitor che mostra un'immagine. Questa immagine è una matrice di pixel, diciamo, 1600x1200 pixel con profondità di 24 bit.

Il monitor sa cosa visualizzare dalla scheda video. La scheda video sa cosa visualizzare attraverso il "frame buffer", che è un grande blocco di memoria che - in questo esempio - contiene 1600 * 1200 pixel, di solito con 32 bit per pixel nelle schede contemporanee.

Il frame buffer è spesso accessibili alla CPU come un grande blocco e la memoria che può colpire in direttamente, e alcuni adattatori hanno GPU che consentono cose come rendere roba nel frame buffer, come triangoli strutturato ombreggiate, così la La CPU invia semplicemente i comandi attraverso un "buffer di comandi", dicendogli cosa disegnare e dove.

Quindi si dispone del sistema operativo, che carica un driver hardware che comunica con la scheda video.

Il sistema operativo in genere offre funzioni per scrivere nel buffer del frame utilizzando le funzioni. Win32 ad esempio ha molte funzioni come BitBlt, Line, Text, ecc. Questi finiranno per parlare con il driver.

Quindi si dispone di qualcosa come Java, che esegue il rendering della propria grafica, in genere utilizzando le funzioni fornite dal sistema operativo.

+0

Quindi imparare qualsiasi strumento che possa occuparsi del frame buffer può darmi la libertà di creare le mie GUI. Giusto? – Lettuce

+2

Dipende ancora da quale livello Stai cercando di sistemarti. Stai scrivendo il tuo sistema operativo? Stai scrivendo il tuo kernel? Non puoi essere indipendente dalla piattaforma (a meno che tu non scriva il tuo kernel da zero, ha ve divertente!). Ecco perché abbiamo cose come Win32 o Java o QT - per permetterti di essere indipendente dalla piattaforma, nonostante tu abbia bisogno di un driver personalizzato per ogni scheda grafica là fuori, e che ogni sistema operativo abbia il proprio modo di esporre il driver a te. – EboMike

0

Probabilmente è necessaria una libreria grafica come, ad esempio, OpenGL.

Per l'interazione diretta dell'hardware, è probabilmente necessario eseguire operazioni di assemblaggio, che sono completamente specifiche del computer.

+0

So che ci sono DirextX, OpenGL e altri .. Ma voglio capire il principio stesso .. Intendo il principio di livello molto basso dell'interfaccia utente grafica. – Lettuce

+0

@Downvoter: perché? –

+0

@Lettuce: dipende dalla piattaforma. –

-1

Se si è disposti a consultare un sacco di codice sorgente, è possibile vedere Mesa 3D, un'implementazione open source delle specifiche OpenGL.

3

La risposta semplice è bitmaps, infatti questo si applicherebbe anche ai caratteri sui terminali nei primi giorni.

del GUI originale, cose come Xerox Parc's Alto GUI erano basati su display bitmap e la grafica sono state elaborate con strumenti di disegno semplice bitmap e librerie grafiche, utilizzando la geometria semplice per determinare forme come cerchi, quadrati, rettangoli, ecc, e poi mappare mostra i pixel.

La GUI di oggi è la stessa, tranne che con software e hardware aggiuntivi che hanno velocizzato e migliorato il processo e le prestazioni di queste GUI.

La mappatura fondamentale dei bit, ad es. 10101010 in pixel dipende dall'hardware del display, ma a livello semplicistico, si fornisce un buffer di visualizzazione in memoria e si popolano semplicemente i byte con i dati di visualizzazione.

Quindi, per una bitmap monocromatica di base, la si disegna fornendo bit che rappresentano la forma che si desidera disegnare, è possibile posizionare questi bit, in questo modo, un semplice pulsante 8x8pix.

01111110 
10000001 
10000001 
10111101 
10111101 
10000001 
10000001 
01111110 

quale si può vedere più facile se mi rendo con # e lo spazio invece di 1 e 0.

###### 
#  # 
#  # 
# #### # 
# #### # 
#  # 
#  # 
###### 

che come immagine bitmap sarebbe simile a questa: http://i.stack.imgur.com/i7lVQ.png (so che è un po ' piccolo :) ma questo è il tipo di scala in cui avremmo iniziato, quando le GUI sono state sviluppate per la prima volta.)

Se disponevi di uno schermo a colori più complesso (ad esempio 24 bit, dovresti fornire ogni pixel utilizzando un 24 bit numero.)

Ovviamente alcune bitmap non possono essere disegnate manualmente (ad esempio il bordo di una finestra), come abbiamo fatto sopra, qui è dove la geometria è utile, e possiamo usare semplici funzioni per determinare i valori dei pixel necessari per disegnare un rettangolo , o qualsiasi altra forma semplice, e quindi costruire da lì.

Una volta che si è in grado di disegnare grafica in questo modo su un display, si aggancia un ciclo di disegno a un interrupt di sistema per mantenere aggiornato lo schermo (si ridisegna lo schermo molto spesso, a seconda delle prestazioni del sistema.) In questo modo puoi farlo gestire l'interazione da dispositivi dell'utente, ad es un topo.

Nei primi tempi, anche prima di Xerox Parc/Alto c'erano un certo numero di primi sistemi di computer che disponevano di display basati su vettori, questi costituivano un'immagine disegnando linee su una rappresentazione CRT di un piano cartesiano.Tuttavia, questi display non hanno mai visto l'uso tradizionale, tranne forse in alcuni dei primi videogiochi, come Asteroids e Tempest.

+0

Quindi, come si può implementare questo su un computer? Voglio dire, come posso davvero mostrarlo sullo schermo se voglio farlo.Qualsiasi esempio in qualsiasi lingua andrà bene. – Lettuce

+0

Questo potrebbe essere fatto in Assembly Language, su un livello estremamente elementare si assegnerebbe un buffer (regione di memoria) che è stato inviato al sistema di visualizzazione (nel nostro esempio un display mono), lo chiameremmo un buffer di visualizzazione. - Quindi possiamo eseguire varie operazioni sul buffer di visualizzazione per il rendering di forme o disegni bitmap. – ocodo

+0

Ovviamente al giorno d'oggi non avresti mai bisogno di toccare qualcosa di così basso come questo, e ci sono molti modi in cui puoi costruire GUI. E costruire una GUI completa da questi livelli di base sarebbe una cosa abbastanza stupida da fare, ma potresti fare una serie di esercizi a questo livello basso per capire i principi e la meccanica al lavoro. – ocodo

Problemi correlati