Newsgroup: it.comp.os.linux.development
Titolo: progr. grafica - da win a linux

salve a tutti sono un newbissimo della programmazione in linux...
conosco bene C, C++ e le API di win
conosco discretamente linux, riesco più o meno a amministrarlo a colpi di man pages e howto... :)
vorrei dare un'occhiata allaprogrammazione da queste parti.
innanzitutto vorrei chierita una cosa: cosa fa X? oltre a fungere da layer tra l'hardware e la programmazione (driver delle schede
video) cosa altro fa? crea le finestre?
ma praticamente crea solo l'oggetto finestra (senza barra del titolo, bordi ecc...) o sbaglio?
se non erro il compito di disegnare barra del titolo bordi ecc... cel'ha il window manager (enlightenment per esempio?)...
boh, forse sono un po' confuso. cmq un grazie a chi mi chiarisce questa cosa.
poi, volevo sapere come funziona qui la programmazione grafica.
so che windows ha un metodo che è tra i più difficili da comprendere (ma una volta capito ne puoi apprezzare i vantaggi). in linux
(sotto X, giusto?) come si fa a creare una finestra e disegnare nella sua client-area? e per disegnare direttamente nello schermo?
es. per impostare un pixel dello schermo? si può accedere direttamente al buffer video?
ci sono delle API per il disegno (rectangle, ellipse, circle, arc, ecc...) ?
quali formati grafici sono supportati di default dal sistema?
per ora grazie mille
ciao
xaero

 quali formati grafici sono supportati di default dal sistema?
fai un salto su 
developer.gnome.org
 e 
www.gtk.org
-- 
Non c'è più forza nella normalità, c'è solo monotonia.

 se non erro il compito di disegnare barra del titolo bordi ecc... cel'ha il window manager (enlightenment per esempio?)...
si utilizzano le librerie gerafiche gtk, Xaw, Qt, lesstiff/openmotif,
...
questioni di gusto personale.
I veri WindowsManager/Gui si basano su una di queste Gnome/Gtk,
KDE/QT, ...
Un metodo facile e` utilizzare Tcl+Tk o Perl+Tk
ciao, Andrea



 

fabrizio ha scritto:

salve a tutti sono un newbissimo della programmazione
in linux...

conosco bene C, C++ e le API di win

conosco discretamente linux, riesco più o meno a amministrarlo
a colpi di man pages e howto... :)

vorrei dare un'occhiata allaprogrammazione da queste parti.

innanzitutto vorrei chierita una cosa: cosa fa X? oltre a fungere da
layer tra l'hardware e la programmazione (driver delle schede

video) cosa altro fa? crea le finestre?

ma praticamente crea solo l'oggetto finestra (senza barra del titolo,
bordi ecc...) o sbaglio?se non erro il compito di disegnare barra del titolo
bordi ecc... cel'ha il window manager (enlightenment per esempio?)...


Esatto, la decorazione della finestra la fa il Window Manager:


volendo: settando l'overrideredirect della finestra durante la
sua creazione e


creandola come figlia della rootwindow, chiedi al wm di far finta
che non esista (e quindi di non decorarla)...


poi, volevo sapere come funziona qui la programmazione
grafica.

so che windows ha un metodo che è tra i più difficili
da comprendere (ma una volta capito ne puoi apprezzare i vantaggi). in
linux

(sotto X, giusto?) come si fa a creare una finestra e disegnare nella
sua client-area?


In realta con la grafica sotto Windows a confronto è una cazzata.
Qui (sempre se vuoi utilizzare X) devi direttamente gestire il ciclo degli
eventi, quindi quando ottieni un evento di expose puoi disegnare la parte
della finestra che è stata esposta: tieni presente che però
la gestione degli eventi dell XWindows è completamente asincrona
(okkio se vuoi utilizzare i thread!!!) e devi gestire tu il ciclo degli
eventi...


e per disegnare direttamente nello schermo?

es. per impostare un pixel dello schermo? si può accedere direttamente
al buffer video?


Esiste un'estensione dell'XWindows (XExtension) che ha il nome di DGA
Direct Graphics Access, dovresti avere l'header file X11/extensions/xf86dga.h


che ti permette di scrivere direttamente nel buffer video.


ci sono delle API per il disegno (rectangle, ellipse,
circle, arc, ecc...) ?

quali formati grafici sono supportati di default dal sistema?


Quelli supportati nativamente sono le Pixmap, le XBitmap ecc. il motodo
più veloce per disegnare una immagine su una finestra è utilizzare
le XImage,


se poi lo fai con le estensioni XShm, il tutto diventa più
interessante...


 

per ora grazie mille


Okkio che sembra oramai obsoleto utilizzare direttamente il core dell'
XWindows, in realtà è che c'è oramai poca gente che
ha i coglioni per farlo,


in ogni caso se vuoi rimanere a basso livello, puoi guardare l'XToolkit
e la relativa estensione che prende il nome di Motif..


Altrimenti quello che ti consiglio è: prenditi il codice
sorgente dell'fvwm2 e studiatelo: li c'è TUTTO... in ogni caso se
hai bisogno, fai un fischio...


 

ciao

xaero





 

fabrizio ha scritto:

salve a tutti sono un newbissimo della programmazione
in linux...

conosco bene C, C++ e le API di win

conosco discretamente linux, riesco più o meno a amministrarlo
a colpi di man pages e howto... :)

vorrei dare un'occhiata allaprogrammazione da queste parti.

innanzitutto vorrei chierita una cosa: cosa fa X? oltre a fungere da
layer tra l'hardware e la programmazione (driver delle schede

video) cosa altro fa? crea le finestre?

ma praticamente crea solo l'oggetto finestra (senza barra del titolo,
bordi ecc...) o sbaglio?


Okkio: forse non hai capito cos'è l'X: l'X è un server:
sotto X tu puoi esportare il display: ad es. puoi fare login su una macchina
remota su cui c'è un programma che vuoi lanciare: esportare da quella
macchina il display direttamente verso il tuo computer locale ed eseguire
il programma in questione, ciò significa che il programma girerà
sulla macchina remota, mentre l'interfaccia video girerà sul computer
locale (non importa se le due macchine hanno architetture diverse, l'X
si interessa delle opportune conversioni)... dopo di che volendo puoi sempre
dalla tua macchina locale fare un login su un'altra macchina remota, esportare
anche da quella il display ed eseguire un'altro programma: se implementato
tra i due programmi (che girano su macchine diverse e remote) puoi ad'es.
fare drag'n'drop: ciò avviene ovviamente tramite spedizione degli
oggetti draggati via network, il tutto non è banale: dire che l'XWindow
implementa solo la parte grafica è un pò restrittivo...


l'XWindows esegue tutta la trasmissione via tcpip facendo anche
la conversione tra little endian - big endian ecc: ogni programma quando
utilizza l'XWindow in realtà non è che scrive direttamente
sulla pagina grafica, ma tramite protocollo di rete chiede all'XWindow
che gira all'indirizzo tal dei tali di eseguire una determinata operazione.


Tutto questo assume ovviamente un significato ben più complesso
delle banalità che fà l'M$ Windows, senza contare che l'XWindows
è rimasto uno dei pochi sistemi a finestre a supportare appieno
display monocolore, terminali pure ecc..


Okkio che se hai fin'ora utilizzato Windows, allora sappi che ti
stai introducendo in un mondo ben diverso, più complesso e ben più
ostile (infinitamente migliore però)...