PowerIcons. Icone a 32 bit sui nostri Amiga




Il presente articolo gi apparso sulla rivista:




PowerIcons: icone a 32 bit sui nostri Amiga

E' difficile per chiunque trovarsi a parlare di qualcosa di proprio senza che questo possa risultare immodesto o patetico. Più volte la sottoscritta è riuscita a schivare simili "delicati inviti" a recensire, per esempio, l'ormai famosissimo ZoneXplorer; o, compito ancor più ingrato, realizzare un articolo sui frattali: mi sarei trovata nè più nè meno che nella stessa, imbarazzantissima situazione! Ma il recente rilascio di PowerIcons ha riscosso tanto successo nel panorama Amiga mondiale da non poter rifiutare la richiesta di dedicare di persona qualche facciata a un progetto tanto unico e innovativo. Sono passati davvero molti anni dall'ultima volta che un prodotto destinato a migliorare o abbellire i nostri Amiga fece parlare di sè; forse addirittura questo non succedeva più dall'epoca degli immancabili VisualPrefs, del caro amico Massimo Tantignone, o del vecchio NewIcons, per mano dell'anch'esso italiano (ma purtroppo "emigrato") Nicola Salmoria. Ed essendo italianissima anche l'autrice di PowerIcons, che vi sta scrivendo, viene spontaneo chiedersi se davvero il nostro Paese, oltre ad essere culla delle civiltà e della cultura, non possa forse fregiarsi anche del nobile titolo di Culla dell'Ingegno Amighista! Ma c'è ancora posto al giorno d'oggi per programmi di questo genere, quando da tempo ogni iniziativa sembrava essersi posta in stand-by in vista dei nuovi AmigaOS4 e MorphOS ? Ha ancora senso investire risorse solo per abbellire una macchina che è in fase di estinzione o di radicale ristrutturazione ?


Un p di storia, come sempre...

Definisco il PC un mero "strumento", l'Amiga un "universo" in cui piacevolmente rinchiudersi. E molti sono concordi su questa mia affermazione; forse è proprio la ragione per cui, da sempre, utenti e programmatori Amiga si sono sforzati per rendere ancora più gradevole sul lato estetico e funzionale il loro amato "universo", riempiendo lacune mai ufficialmente colmate. Questo grazie anche all'innegabile fantasia, creatività e ingegno propri (non a caso) delle persone che su Amiga sono cresciute e hanno speso anni della loro vita a programmare e lavorare, credendo in un ideale informatico che forse non morirà mai. Io stessa non ho saputo resistere all'idea di fare qualcosa per rendere più bello il sistema operativo su cui passo ore e ore delle mie giornate... è stato Ambient, il desktop di MorphOS, a fornirmi lo stimolo necessario. Ambient è ancora un progetto giovane e immaturo, benchè il suo autore, David Gerber, sia ricco di ottime intenzioni. Per questa ragione, molti utenti di MorphOS su Pegasos preferiscono utilizzare il vecchio ma ancora potentissimo Magellan o, come chi vi scrive, il Workbench di Amiga, suscitando comprensibile scandalo.
Però Ambient è stato il primo desktop a permetterci di usare icone a 32 bit: quando le ho viste la prima volta, abituata come sono (e come tutti noi siamo) alle orribili icone a 256 colori rimappati del Workbench, mi sono resa conto che non sarei più riuscita a vivere priva di una simile bellezza!
Da buona programmatrice Amiga audace ed anticonformista quale mi ritengo, ho iniziato da subito a valutare la possibilità, e le eventuali difficoltà, inerenti un traguardo tanto ambizioso come quello di permettere ad Amiga e al Workbench di gestire icone a 32 bit in modo totalmente automatico.
PowerIcons è in definitiva la tappa finale di un percorso, di un'esperienza iniziata diversi mesi prima applicando "patch" alla icon.library e acquisendo progressiva confidenza e destrezza nel compito di migliorarla. Un vero braccio di ferro tra me e le Icone!


Ghosty

Primo risultato concreto oltre che primo prodotto rilasciato al pubblico è stato Ghosty, una patch tramite la quale realizzai l'antico desiderio di vedere tutte le icone di default visualizzate in trasparenza sul Workbench.
Ne sentivo quasi l'esigenza fisica, il mio occhio aveva bisogno di poter distinguere quei files dotati di icona da quelli che invece ne sono privi, e a mio avviso nulla era più adeguato di un effetto evanescente, fantasmatico, "ghost" appunto. Molti utenti hanno condiviso questa mia esigenza giudicando piacevole l'idea anche dal lato estetico (e lo è indubbiamente), non mancando quindi di aggiungere Ghosty al proprio armamentario "regolare" di patch e commodities. Lo stesso Ambient a distanza di poco tempo ha adottato questa mia idea, anche se il suo supporto per le icone di default è attualmente pressochè nullo. Ma è stato un piccolo passo in avanti, la consapevolezza di aver dato con la mia idea un contributo indiretto.


Un progetto mai rilasciato: Ghosty+

Una cosa che da sempre mi riesce difficile concepire è come mai i programmatori di AmigaOS abbiano deciso di operare il "remapping" delle icone a colori anche quando si utilizza, come nella maggior parte dei casi, uno schermo Hi/True Color. Disponendo ogni icona di dati "chunky" ad 8 bit con palette individuale di 256 colori, come previsto dallo standard "Glow (o
Color) Icon" introdotto con AmigaOS 3.5, non c'era alcuna reale necessità di limitarsi ai colori disponibili della palette di schermo anche con modi video a 16 o 24 bit, con conseguente riduzione di colori (remapping) e ovvia perdita di qualità. Ogni icona in questo formato, se trattata nel modo corretto, potrebbe disporre di 256 tinte individuali. Risolvere il problema sarebbe stato piuttosto semplice: era sufficiente, come per Ghosty, applicare una patch alla funzione DrawIconState() della icon.library, incaricata del disegno delle icone Amiga. Tramite una funzione veramente elementare, anzichè disegnare l'immagine contenente i dati "planari" dell'icona rimappata, avrei estratto i dati chunky con relativa palette dall'icona per operare direttamente un rendering a 24 bit nella RastPort di destinazione. In realtà le cose erano leggermente più complesse, in quanto era mia intenzione riunire questa nuova funzionalità all'interno di Ghosty, e non solo: per ragioni di maggiore velocità, optai per la creazione di una bitmap "tampone" atta a contenere, fin dal suo caricamento da disco, l'immagine a 24 bit dell'icona (o per meglio dire, la sua immagine a 256 colori convertita in formato 24 bit). Questo progetto, benchè del resto estremamente più semplice di PowerIcons, non fu mai rilasciato al grande pubblico per la sua natura "sperimentale" e in quanto conteneva alcune volute limitazioni (impossibilità di cambiare il modo video senza disattivare e riattivare manualmente la patch, limitato supporto di alcune impostazioni di sistema relative alle icone, etc.) che non sarebbero piaciute troppo... Ciononostante utilizzai Ghosty+ per parecchio tempo, divertendomi a disegnare icone che utilizzassero tutti i 256 colori disponibili, sia per la prima che per la seconda immagine. Se non fosse stato per il bordo spigoloso, alcune erano davvero indistinguibili da vere icone a 16.7 milioni di colori.


Non bastavano 24 bit?

Non è detto che tutti i lettori siano esperti di grafica, quindi è doveroso precisarlo: quando si parla di immagini a 32 bit non si fa riferimento ad una maggiore profondità colore quanto ad 8 bit addizionali usati per indicare la percentuale di trasparenza da utilizzare in operazioni di composizione o visualizzazione. Per ogni pixel saranno quindi disponibili
256 livelli di trasparenza: ciò che viene definito "Alpha Channel". Un valore zero significa che quel pixel dovrà essere totalmente trasparente, un valore di 128 indicherà una fusione al 50% tra il pixel dell'immagine e il relativo pixel sottostante, mentre per un valore di 255 il pixel sarà totalmente opaco (100% pixel immagine, 0% pixel sottostante). L'impiego di immagini a 32 bit con Alpha Channel rende pertanto possibili effetti di ombreggiatura, aloni luminosi e contorni con anti-aliasing nei confronti dello sfondo su cui l'immagine di partenza dovrà essere disegnata.
Utilizzare icone a 32 bit significa rendere possibile tutto questo: un alto livello di realismo sul nostro desktop.


Perch PNG?

PNG, acronimo di Portable Network Graphics, è un formato piuttosto diffuso che, utilizzando un algoritmo di compressione estremamente efficace e senza perdita di qualità (lo stesso algoritmo di GZIP), permette di immagazzinare immagini di alta qualità in dimensioni spesso ridottissime. Lo standard PNG prevede inoltre, proprio come l'IFF, la presenza di "chunk" atti a contenere ogni tipo di informazione addizionale, risultando per questo estremamente espandibile e adattabile in teoria alla memorizzazione di tipi di dati anche molto differenti tra loro. Ogni "chunk" è composto da 4 bytes contenenti la lunghezza del blocco di dati, 4 bytes contenenti l'identificatore ASCII del nome del chunk, i dati veri e propri e 4 bytes finali usati per il calcolo del CRC. Un file PNG contenente un'immagine sarà principalmente composto da un chunk "IHDR" (simile al BitMapHeader, una struttura contenente dimensioni e formato) e da un chunk "IDAT", all'interno del quale si trovano i dati raw dell'immagine, compressi tramite l'algoritmo "Z" previa applicazione di speciali filtri atti ad ottimizzarne la compressione. Ultima considerazione, ma non per importanza: PNG è uno dei pochi formati grafici per cui sia attualmente previsto il supporto di immagini a 32 bit. Ambient non è stato certo il primo desktop ad adottare il formato PNG per le icone: possiamo citare Gnome, KDE, e sicuramente molti altri. La struttura modulare dei file PNG permette, ad esempio, l'utilizzo di uno speciale chunk "icon" all'interno del quale immagazzinare informazioni proprie di un'icona, come la sua posizione, i toolypes, la dimensione dello stack, le coordinate e dimensioni del cassetto associato. Un'altra grande comodità è rappresentata dal fatto che non sono necessari editor speciali per creare icone di questo tipo ma è sufficiente un programma di disegno con supporto del formato PNG in salvataggio: creato il nostro capolavoro, possibilmente completo di Alpha
Channel, sarà sufficiente salvarlo su disco aggiungendo il suffisso ".info" (questa, almeno, è la regola da usare su Amiga ;) Risulta ovvio che un'icona così creata non disporrà ancora di alcun chunk "icon" (è ancora, cioè, quello che io amo definire "icona vergine"), che verrà creato per la prima volta dopo un'operazione di Snapshot o di aggiunta di ToolTypes, per esempio. Emerge altrettanto evidente il fatto che tali icone sono per definizione prive di tipo intrinseco: non esistono, in generale, icone PNG di tipo Disk, Drawer, Tool o Project, anche se un'icona contenente un
DefaultTool, per esempio, verrà identificata automaticamente come icona "Project", se questo non crea incoerenze rispetto al tipo di file associato.
In mancanza di informazioni in merito circa le estensioni (tag) usate da altri sistemi operativi per immagazzinare i dati di icona all'interno dei chunk PNG, ho deciso di basarmi sul formato dei tag usati da Ambient.
Ritengo questa un'operazione moralmente innocua in quanto si tratta di dati teoricamente disponibili a chiunque (è sufficiente analizzare le icone salvate da Ambient con un editor binario). Ho adottato da Ambient anche l'idea dell'assenza di tipo intrinseco appena discussa. Ritengo anzi in questo modo di aver agito in modo corretto sia nei confronti di Ambient che della comunità Amiga per due ragioni: 1) Quello scelto da Ambient verrà, grazie a PowerIcons, esteso alla comunità intera per ereditarietà e 2)
Adottando uno standard già introdotto, si è evitato di crearne uno proprietario da zero, evitando dunque confusioni e scissioni future come spesso accade, purtroppo, riguardo molti altri aspetti di AmigaOS.


...and next came PowerIcons

Forte di tutte queste riflessioni e informazioni accumulate, decisi dunque di mettermi al lavoro con l'obiettivo di integrare in un unico programma il supporto per le icone PNG, il rendering in "true color" delle icone standard Amiga e l'effetto trasparenza offerto dal mio "vecchio" Ghosty. Ancora una volta il mio amato Pegasos si è rivelato una palestra di sviluppo veloce e produttiva, in aggiunta al fidato compilatore VBCC. Introdurre in modo trasparente il supporto per le icone PNG da parte di AmigaOS e del Workbench ha richiesto un attento lavoro di pianificazione: implementare tutto tramite una patch alla icon.library è sicuramente più complesso che non apportare le modifiche necessarie alla stessa, previa possibilità di lavorare direttamente sui sorgenti. Si deve fare molta attenzione affinchè non si creino conflitti, e molta attenzione anche dev'essere rivolta alla compatibilità con le applicazioni di terze parti. La difficoltà maggiore, almeno a livello teorico, è stata inventare un trucco speciale per permettere a RAWBInfo di continuare a funzionare anche con icone PNG.
Ritengo infatti che una delle comodità maggiori sia proprio quella offerta da RAWBinfo (ma anche da parte del requester di Informazioni originale del Workbench) per cambiare con un semplice drag'n'drop l'immagine di un'icona, senza alcuna necessità di usare manualmente speciali utility da shell.
L'unico trucco possibile è stato quello di inserire nei dati chunky "fasulli" di un'icona PNG, ottenuti tramite IconControlA() e la tag ICONCTRLA_GetImageData, una stringa contenente il filename dell'icona associata. Per inverso, quando si tenterà di "riempire" un'icona con questo stesso buffer tramite IONCTRLA_SetImageData, la icon.library andrà a caricare i dati grafici dell'icona PNG indicata dalla stringa, inserendoli nell'icona originale. Si tratta davvero di un trucco subdolo, ma una soluzione migliore per mantenere la compatibilità con RAWBInfo (e programmi dal comportamento analogo) non era possibile! Altra notevole difficoltà è stata la scrittura di una nuova funzione di caricamento GetIconTagList() in grado di risultare al 100% compatibile con quella originale, e di operare tutti i "controlli di coerenza" resi necessari dall'assenza di tipo intrinseco discussa sopra. E' vitale, infatti, che il Workbench riceva una struttura DiskObject di tipo Disk o di tipo Drawer, per esempio, se le icone richieste devono essere utilizzate per un device o per un cassetto, pur mancando informazioni riguardo al tipo all'interno dell'icona PNG caricata da disco. In totale è stato necessario "patchare" le sei principali funzioni della icon.library: GetIconTagList(), DrawIconState(), FreeDiskObject(), DupDiskObject(), IconControlA() e PutIconTagList(). Per la funzione di caricamento di icone PNG ho deciso di non usare la pnglib per ragioni di velocità: avrebbe comportato un overhead inutile. Il parsing PNG e la decodifica dei dati di immagine avviene tramite routine scritte in modo estremamente ottimizzato, basandomi solo sulla funzione uncompress() di libz per la decompressione dei dati IDAT. Questo comporta velocità notevoli anche su Amiga non proprio di ultima generazione. Inoltre, dal momento che PowerIcons NON è un programma di grafica ma il suo compito è quello di caricare icone PNG nel modo più rapido possibile, ho deciso di supportare solamente immagini a 24 bit con o senza Alpha Channel (escludendo quindi i formati palette mapped, grayscale o interlaced, che del resto avrebbero poca utilità nel nostro caso). Alla struttura DiskObject viene quindi collegata una struttura speciale contenente, oltre ad alcuni flags e campi di controllo privati, il buffer di immagine a 32 bit e una cache al file PNG originariamente caricato. Questo ha il compito di velocizzare notevolmente le operazioni di salvataggio in quanto rende superflua la complessa operazione di compressione necessaria, a spese di un consumo di memoria leggermente superiore. Anche le icone standard Amiga a 256 colori vengono convertite in dati a 32 bit in fase di caricamento e gestite in tutto e per tutto, da un punto di vista grafico, alla stregua di icone PNG; l'unica differenza è che, disponendo esse di una semplice trasparenza "tutto o niente", gli 8 bit dell'alpha channel vengono inizializzati a 0 o 255 a seconda del valore della maschera di trasparenza originale. Il secondo, grande problema è relativo al trascinamento di icone PNG: il Workbench usa routine planari interne per fare questo, e non esiste alcun modo (lecito) di intercettarlo. Una soluzione, che del resto molti utenti continuano a richiedere, poteva essere di creare al volo, in sede di caricamento, anche una versione planare dell'icona PNG con pochi colori, per un esclusivo utilizzo da parte del Workbench durante il trascinamento. Molto semplicemente, questa idea non mi è mai piaciuta: rallenterebbe enormemente le operazioni di caricamento delle icone, specialmente su macchine non troppo veloci. Inoltre, una simile immagine approssimata sarebbe davvero orribile a vedersi! Ho quindi preferito fornire un semplice -ma almeno gradevole!- rettangolo bianco delle dimensioni dell'icona, con una simpatica freccina in stile Windows in alto a sinistra... Senza addentrarmi ulteriormente in noiosi dettagli tecnici, posso dire che dopo circa un mese di lavoro il 99% del codice era completato e collaudato. Come ciliegina sulla torta ho deciso di integrare in PowerIcons la possibilità, offerta da altre patch molto diffuse, di migliorare la visualizzazione del testo delle icone tramite effetti di contorno o di ombreggiatura.


Dov' la seconda immagine?

Per adesso, da nessuna parte. Il formato PNG non supporta immagini multiple, e questo è vero anche per Ambient. Pertanto, per simulare l'effetto di selezione di un'icona, proprio come Ambient ho deciso di utilizzare un effetto di luminescenza, le cui caratteristiche cromatiche sono selezionabili dall'utente tramite apposite opzioni della linea di comando.
In teoria si potrebbero inventare mille trucchi per raggirare il problema (ammesso che lo si voglia considerare tale). Un'ipotesi sarebbe quella di utilizzare immagini di altezza doppia, contenenti la prima figura nella metà alta e la seconda nella metà bassa: tramite un apposito tooltype o tag del chunk "icon", la icon.library potrebbe interpretare l'icona come avente una doppia immagine. Un'altra idea, forse ancora più "portabile", sarebbe di utilizzare un chunk PNG personalizzato, simile in tutto e per tutto ad un normale chunk IDAT ma contenente i dati della la seconda immagine. Ancora una volta ho preferito evitare soluzioni troppo fantasiose, almeno per il momento: non mi piace inventare nuovi "standard" e creare ulteriore confusione. Ce n'è già tanta... anche se le richieste che ricevo quotidianamente in tal senso sono così tante da potermi forse indurre, un domani, a cambiare idea... chissà ? ;)


Colli di bottiglia

Disegnare immagini a 32 bit complete di Alpha Channel significa, semplicisticamente, impiegare una routine che, basandosi sui rettangoli di partenza e di destinazione, operi per ogni pixel il seguente calcolo:

pixel = (a*(255-x)+b*x)/255

dove a è un pixel dello sfondo, b un pixel dell'immagine ed x il valore di
Alpha Channel per quel pixel, che può variare da 0 a 255. E' evidente che per x=0 l'espressione assume il valore di a, mentre per x=255 assume il valore di b. Con semplici accorgimenti si può riscrivere questa semplice formula lineare in mille modi al fine di renderla più ottimizzata, ovvero composta dal minor numero di operazioni possibili. Tramite alcuni trucchi è possibile inoltre trasformare la divisione per 255 in una per 256, esprimibile come uno shift di 8 bit verso destra, operazione notoriamente molto più veloce per le CPU. Questo è ciò che fanno le routine di
AlphaBlitting di PowerIcons, che vengono chiamate dalla nuova
DrawIconState() al momento del disegno di ogni icona, basandosi sul contenuto del buffer a 32 bit dei dati di immagine e sul rettangolo nella
RastPort di destinazione. Purtroppo, attualmente, nè Cybergraphics nè
Picasso96 dispongono un'API per gestire tramite accelerazione hardware il tracciamento di blocchi di pixel con alpha channel. Ho scritto tali funzioni in modo estremamente compatto ed ottimizzato, alcune sono lunghe appena 4 righe di codice! Ma purtroppo su macchine lente, come i vecchi Amiga con 040 o 060, i miracoli non si possono fare. Risultato? Se non si dispone di
Amithlon, UAE JIT o MorphOS, lo scrolling di finestre del Workbench risulterà notevolmente rallentato. Sto comunque prendendo in esame alcuni trucchi che mi sono stati suggeriti allo scopo di accelerare lo scrolling delle finestre del Workbench su macchine non velocissime.


Vivere con PowerIcons

Vivere con PowerIcons è semplicemente grandioso. E non lo dico solo io (che, non dimentichiamolo, ho realizzato principalmente PowerIcons per fare un dono ai miei occhi e successivamente ne ho fatto dono alla comunità): questo è quanto mi viene riferito quotidianamente da decine e decine di altri utenti Amiga. Ogni programma moderno, che utilizza in modo "pulito e legittimo" la API della icon.library per caricare, copiare, salvare e visualizzare icone, funzionerà in modo assolutamente trasparente anche con icone di tipo PNG. Lo stesso è vero per programmi come AmiDock, RAWBInfo o per quelli che usano le AppIcons. Certo, se si tenta di usare qualche utility non proprio recente per la manipolazione di icone, editor grafici di icone o (ancora peggio!) patch alla icon.library o altro genere di pesanti patch al sistema, nulla può essere garantito fintanto che il supporto per le icone a 32 bit non sarà parte integrante di AmigaOS: una patch è sempre una patch, e PowerIcons in definitiva questo è. Ma la cosa più divertente, svago da cui non mi sono certo astenuta, è iniziare a disegnare icone a 32 bit personalizzate o intraprendere scatenate ricerche in rete alla volta di qualche simpatico archivio di icone PNG di nostro gradimento, per rimpiazzare progressivamente tutte le nostre icone vecchie. Fate attenzione, però: se un giorno, per qualsivoglia ragione, doveste rimuovere PowerIcons dal vostro sistema, non sarete più in grado di vedere niente ! E' scontato, ma è bene preventivarlo...


Disegnare icone PNG

La creazione di un'icona a 24 bit completa di Alpha Channel non è un lavoro così semplice come potrebbe sembrare a chi si cimentasse nell'impresa per la prima volta. E' necessaria tantissima esperienza, perizia e pazienza e, soprattutto, si deve sapere esattamente ciò che si sta facendo. Purtroppo la nostra piattaforma non dispone di programmi in grado di gestire l'alpha channel in modo così sofisticato come permettono invece nomi famosi del calibro di Photoshop o Gimp. L'unico programma che mi sento di consigliare allo scopo è ImageFX, benchè risenta di diversi bug mai risolti, alcuni dei quali affliggono purtroppo lo stesso caricamento di immagini PNG con Alpha Channel! E' necessario dotarsi di Novalgine e antidepressivi (o a seconda dei casi calmanti...) ma alla fine il vecchio programma di NovaDesign si rivela praticamente l'unico davvero adatto allo scopo. Questo articolo non può e non vuole proporsi come tutorial di grafica, ma posso offrire alcuni semplici esempi e suggerimenti utili a muovere i primi passi nella realizzazione di icone a 32 bit.

Esempio 1: Oggetto dotato di ombra.
Ricordatevi sempre di partire da un'immagine di dimensioni almeno doppie o quadruple rispetto all'icona desiderata. L'immagine principale dovrà contenere la figura dell'oggetto stabilito circondata da uno sfondo perfettamente nero. Quando e se dovete isolare l'immagine dal suo sfondo originale per circondarla con uno sfondo nero, siate molto precisi e fate in modo che tale sfondo risulti leggermente trasbordante verso l'interno dell'oggetto. L'alpha channel dovrà contenere la sagoma dell'oggetto perfettamente bianca e allineata all'immagine originale, e completamente riempita. Con lo strumento aerografo, utilizzando il colore bianco, disegnate la sfumatura dell'ombra sotto o a fianco della sagoma dell'oggetto. Utilizzate un bianco molto tenue, altrimenti l'ombra risulterà troppo scura. A questo scopo potete impostare una percentuale inferiore al
10%. Riscalate con media l'immagine completa di Alpha Channel di un fattore idoneo al fine di ottenere la dimensione finale desiderata. Questo vi permetterà di ottenere un perfetto Anti Aliasing.

Esempio 2: Immagine circondata da ombra o da luce colorata.
Il cavallo di Pegasos incluso in PowerIcons nel cassetto delle icone campione è un ottimo esempio di questo effetto semplice ma incisivo. E' sufficiente operare come nell'esempio precedente, con l'unica differenza che, con lo strumento Aerografo, dovremo ricalcare trasbordando leggermente verso l'esterno la silhouette dell'oggetto bianco nell'Alpha Channel. Un altro metodo può essere quello di applicare un effetto "blur" piuttosto largo, sempre nell'Alpha Channel, sovrapposto alla sagoma bianca originale con una percentuale del 50 o 60%. Se anzichè il bordo ombreggiato desiderate un bordo luminoso simile a un'aureola, semplicemente circondate l'immagine originale di bianco (o di altro colore) anzichè di nero. Le icone "Bulb2" e il volto del nostro Presidente del Consiglio, all'interno del cassetto di esempio, sono state ottenute in questo modo. Effetti di fumo o vapore si ottengono in modo simile, avendo l'accuratezza di disegnare volute di fumo o vapore "credibili" con l'aerografo e circondando l'immagine originale di bianco.

Esempio 3: Testo (o altri elementi grafici monocromatici) con AntiAliasing
Partite da un buffer di dimensioni almeno 4 volte maggiori rispetto all'icona finale. Riempite uniformemente l'immagine principale di un colore a scelta (es. verde). Recatevi nell'Alpha Channel e, tramite lo strumento Testo, lo strumento di disegno a mano libera o altri strumenti grafici, disegnate o scrivete a piacere utilizzando il colore bianco. Riscalate con media al 25% il buffer completo di Alpha Channel. L'icona risultante rappresenterà ciò che avete disegnato nell'Alpha Channel, colorato di verde e con Anti Aliasing nei confronti dello sfondo.

Una volta presa confidenza con l'arte di disegnare a 32 bit riuscirete senza dubbio a pianificare anche progetti decisamente più complessi di quelli descritti, come immagini contenenti sia luci che ombre, riflessi, e molto altro. Ora, grazie a PowerIcons, tutti quanti attendiamo con ansia un proliferare di "icon artists" su Aminet! Una doverosa nota: ricordatevi che utilizzare le icone PNG di MorphOS su Amiga è ritenuto illegale. Se cercate archivi di icone PNG, su Internet ne troverete diversi. Potete provare su
www.kdelook.org o anche su Aminet alla voce pix/icon. Ricordo inoltre che nel pacchetto di PowerIcons, all'interno del cassetto di icone dimostrative, sono presenti alcune utili informazioni su come realizzare icone PNG con il software esistente per Amiga.


E noi utenti di Magellan?

Dovete rassegnarvi: PowerIcons non potrà mai funzionare con Magellan. Questi "workbench-replacement" non usano la icon.library in modo standard per caricare, visualizzare e manipolare le icone, ma si basano su routine private facenti troppe assunzioni sul formato interno delle icone. Quindi nessuna patch potrà mai essere scritta a questo scopo, è triste affermarlo ma si tratta della verità, benchè io abbia studiato a fondo il problema.

Per Scalos invece la situazione è piacevolmente diversa: sono stata ben lieta di fornire i sorgenti sotto licenza di utilizzo esclusivo e non divulgazione agli autori, per l'implementazione del supporto delle icone PNG che ora è una realtà in questo promettente Desktop alternativo!


E noi utenti di AmigaOS 4?

Grazie alla collaborazione e produttiva amicizia con Massimo Tantignone, sviluppatore di AmigaOS4, ora il tanto atteso PowerIcons per AmigaOS4 è finalmente una realtà! Oltre ad essere nativo PowerPC, e perciò estremamente veloce, fa affidamento su nuove funzionalità della icon.library e workbench.library di AmigaOS4, integrandosi meglio nel sistema e in modo più "pulito", e offrendo nuove interessanti caratteristiche. PowerIcons per OS4 sarà presto incluso nel pacchetto standard e può essere scaricato da http://os4depot.net

Note finali

Forse è triste constatare come noi utenti Amiga dobbiamo sempre rincorrere con ingegnosi accrocchi ciò che altri utenti, su altri sistemi operativi, dispongono da parecchi anni. Hanno tutto, o quasi; e forse per questo non lo sanno più apprezzare. O addirittura, abituati come sono ad ogni lusso, non hanno mai apprezzato niente. Noi invece siamo qui a fare i salti di gioia ogni volta che un programmatore un pò masochista ci offre prodotti come VisualPrefs, MCP, PowerIcons... e loro dall'"altra sponda" a guardarci sorridenti come animali strani, coi loro bei desktop avveniristici o acquatici oramai gestiti direttamente dall'hardware 3D... Però anche PowerIcons a qualcosa è servito. Spesso si tende a rimandare al futuro progetti ritenuti di importanza secondaria: ora anche gli sviluppatori di OS4 hanno toccato con mano (se così si può dire...) le icone a 32 bit e si sono resi conto di quanto la cosa sia fattibile, a disdetta delle loro ipotesi iniziali. E di quanto siano belle. Insomma è probabile che un supporto per le icone a 32 bit (PNG o in formato proprietario) verrà prima o poi introdotto a livello di sistema...

Vorrei ringraziare il caro amico Massimo Tantignone per la sua instancabile assistenza e beta testing e per il porting della versione per OS4, e tutti gli utenti Amiga che hanno riportato bugs o semplicemente suggerimenti aiutando PowerIcons a diventare ogni giorno migliore.

PowerIcons è scaricabile da Aminet o dal sito dell'Autrice dove troverete sempre la versione più aggiornata.


Elena Novaretti