10.2. Modifiche Avanzate sui Temi

La maggior parte di questa sessione è presa, o largamente influenzata, dalla pagina del man di Fluxbox 0.1.13. Normalmente, la pagina del man è l'autorità definitiva su queste cose, ma questo documento potrebbe essere maggiormente chiarificatore per un novello autore di stili.

Per capire come funziona il meccanismo degli stili, è utile conoscere un'po a proposito di come funziona X11.

Una risorsa di X11 consiste in una chiave ed in un valore. La chiave è costituita da molte altre chiavi più piccole (a volte denominate figli), delimitate da un punto (.). Le chiavi possono inoltre contenere un asterisco (*) che serve come wildcard, cioè significa che una linea di testo digitata influirà su diverse chiavi. Quuesto è utile per gli stili che sono basati su uno o due colori.

Fluxbox ti permette di configurarne i suoi tre componenti principali: la toolbar, il menu e le decorazioni delle finestre. La slit automaticamente incorpora il suo stile dalla toolbar ma può avere uno stile differente se necessario. La piccola finestra che visualizza la posizione x-y trascinando una finestra, trae il proprio stile dalla barra del titolo.

Qui ci sono alcuni esempi veloci per illustrare la sintassi base:

Example 10-1. Toolbar Clock style

    toolbar.clock.color:  green

Questo setta l'orologio della toolbar di colore green. Un altro esempio:

Example 10-2. Menu style

    menu*color: rgb:3/4/5

Questo setta il colore del menu e tutti i suoi figli a rgb:3/4/5. Per una descrizione dei nomi dei colori, guarda la pagina del man di X11. E questo inoltre si applica a menu.title.color e menu.frame.color. E con questo:

Example 10-3. Font style

    *font: -b&h-lucida-medium-r-normal-*-*-140-*

setti il font per tutti i tasti Per informazioni riguardo i fonts installati nel sistema puoi usare un programma come xfontsel, gfontsel, o xlsfonts.

Ora, cio che rende Fluxbox così spettacolare è la sua abilità di renderizzare le texture al volo. La descrizioni di una texture sono specificate direttamente alla chiave a cui si riferiscono:

Example 10-4. Texture style

    toolbar.clock:   Raised Gradient Diagonal Bevel1
    toolbar.clock.color: rgb:8/6/4
    toolbar.clock.colorTo: rgb:4/3/2

Non ti preoccupare, spiegeremo come funzionano queste direttive. La descrizzione di una texture consiste in più di cinque campi, che sono i seguenti:

Table 10-1. Texture directives

DirettiveDescrizione
Flat / Raised / Sunken / Tiled

conferisce al componente un apparenza piana (flat), in rilievo (raised), .... (Sunken) o ... (Tiled).

Tiled si applica solo alle pixmaps e non influisce sulla dimensione.

Gradient / Soliddisegna un colore solido o una texture con gradiente.
Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / PyramidScegliere uno di questi tipi di texture. Funzionano solo quando è specificato anche il gradiente.
Interlacedinterlaccia la texture (darken ogni altra linea). Questa opzione è usata molto frequentemente con gradient textures ma da Blacbox 0.60.3 (e in tutte le versioni di Fluxbox) funziona anche con texture solide.
Bevel1 / Bevel2tipo di Bevel da utilizzare. Bevel1 è quello di default. L'ombreggiatura è piazzata sul bordo dell'immagine. Bevel2 è un'alternativa. L'ombra è piazzata a un pixel di di stanza dal bordo dell'immagine.

A differenza della descrizone delle texture, è anche disponibile l'opzione ParentRelative, che permette ai componenti di apparire come parte del proprio genitore.

Tutte le texture col gradiente sono composte da due valori di colore: l' attributo color e colorTo. Quando Interlaced è usata in modalità Solid, la risorsa colorTo è utilizzata per cercare l'interlacing color.

La lista completa dei componenti e dei tipi di valore che possono contenere può essere trovata nella sezione Appendix C.

Ora, questa sembra una lista molto lunga, ma ricorda, quando crei il tuo stile personale, puoi facilmente impostare molti valori con un singolo comando, per esempio:

Example 10-5. Tipiche dichiarazioni corte:

    *color:             slategrey
    *colorTo:           darkslategrey
    *unfocus.color:     darkslategrey
    *unfocus.colorTo:   black
    *textColor:         white
    *unfocus.textColor: lightgrey
    *font:              lucidasans-10