Portál AbcLinuxu, 3. května 2025 12:17
Pokročilejší konfigurace. Tentokrát o vylepšování vzhledu. Barevné přechody, tlačítka a v menu pozadí, obrázky a ikonky.
I když jsem v předchozím díle našeho seriálu o fvwm psal něco málo o modulech a vy jste jistě zvědaví na dobrodružství modulů FvwmPager, FvwmButtons a jejich přátel, vrátím se dnes k bezmodulové konfiguraci. Budu vám vykládat o barevných obrázcích, přechodech, knoflících a dalších pokročilejších nastaveních.
V předchozích dílech jsme se orientovali spíše na funkční nastavení fvwm, dneska se budeme věnovat především nastavení vzhledu. I když mám fvwm rád a používám tento okenní manažer už dlouho, musím souhlasit s tím, že konfigurace není příliš dobře vyřešená. Zmlsaný postupy obvyklými v HTML a CSS mi přijde nastavení fvwm značně nepřehledné. S tímto způsobem nastavení mě smiřuje pouze tušení, že přilinkovat do fvwm gecko - renderovací jádro mozilly - by nejspíše udělalo z fvwm jeden z nejnenažranějších okenních manažerů.
Barevná pozadí v menu nemají žádný praktický význam, ale je to nejsnazší způsob, jak přizdobit vzhled fvwm. Pro použití barevných přechodů nebo obrázků je samozřejmě vhodná lepší grafická karta a monitor, protože třeba na starším notebooku s 32 tisíci barvami nevypadají obvykle jednobarevné přechody příliš dobře a na obrazovce s 265 barvami nemusí být menu čitelné vůbec.
Nejjednodušším nastavením může být jednobarevná plocha:
MenuStyle * MenuFace Solid lightblue
Trochu složitější je obrázek na pozadí. Obrázek by měl být ve formátu xpm. Aby nevznikaly nehezké přechody, měl by být obrázek dlaždicovatelný. To s sebou může přinést mírné komplikace při jeho tvorbě, ale když už je obrázek hotový, je jeho přidání do menu stejně triviální jako vybarvení menu barvou:
MenuStyle * MenuFace TiledPixmap tykev.xpm
V druhém díle tohoto seriálu jsem uváděl vzorový konfigurační soubor. V konfiguraci byly použité jednoduché barevné přechody:
MenuStyle * MenuFace DGradient 128 1 #bebede 50 #a8a8b8 50 #e0e0ff
Gradienty lze použít na více místech fvwm - v menu, titulcích, v knoflících oken. Fvwm zná několik typů gradientů:
Každý z uvedených typů gradientů lze nakonfigurovat jako lineární či nelineární. U jednoduššího lineárního gradientu se uvádí pouze počet barev v barevném přechodu, počáteční a koncová barva:
DGradient 128 black white
O cosi komplikovanější je nelineární gradient, ve kterém se může uvést libovolný počet barev. Stejně jako lineární gradient začíná definice počtem barev. Následuje počet segmentů, počáteční barva, relativní délka a koncová barva segmentu. Dále může následovat libovolný další počet segmentů (vždy s uvedením relativní délky a barvy):
DGradient 128 2 #bebede 50 #a8a8b8 50 #e0e0ff
V příkladu výše jsou nadefinované dva segmenty, každý zabírá v celém gradientu 50 %. Pokud bychom přidali další segment o délce 50, každý ze segmentů by zabíral třetinu (50 jednotek z celkového součtu všech délek, ze 150).
Jakmile máme menu vyzdobená barevnými gradienty, že až oči přecházejí, můžeme pokračovat ve výzdobě fvwm dále. Jak je zvykem v jiných prostředích, lze i ve fvwm doplnit menu o boční obrázek. Dumal jsem nad vhodným tématem na ukázku - chvíli jsem si hrál s perem a ze všech pokusů se mi nakonec líbil nejvíce styl Mathé, inspirovaný čajovnou na konci trati. Dodatečně jsem zjistil, že se to barevně trochu podobá Windows 98 (a možná i dalším). Obrázek by měl být opět ve formátu xpm.
Pro dosažení kýženého efektu lze postupovat dvěma cestami. Prvou
z nich je nastavení obrázku přímo v definici menu. Vše, co je v
názvu menu příkazu AddToMenu
uzavřeno mezi znaky
@
(zavináč), považuje fvwm za jméno souboru s obrázkem.
Obrázek mathe2.xpm
je sice poměrně vysoký, ale i tak stačí pouze na
kratší menu. Jako obrázek se může použít i malá, jednoduchá ikona.
Pokud chceme mít obrázek na jiném barevném pozadí při jakékoli
velikosti menu, je třeba definovat i barvu pozadí - za její definici
se považuje vše, co je uzavřeno mezi znaky ^
(stříška).
Takto můžeme nastavit vzhled jednoho konkrétního menu:
AddToMenu RootMenu@mathe2.xpm@^#030860^ + " **** Hlavní menu ****" Title + "" Nop + " Terminál" Xterm-local
Pokud máme větší počet menu s jednotným vzhledem, je lepší použít v
konfiguraci příkaz MenuStyle
:
MenuStyle * SideColor #030860
MenuStyle * SidePic mathe2.xpm
Očekával jsem, že fvwm mi porozumí, když doplním do konfigurace
řádek MenuStyle RootMenu SidePic lapsang.xpm
- jenže
fvwm si s tímto zjevně neví rady. Manuál pro případ, kdy chceme použít
různé obrázky pro různá menu, radí použít pro globální nastavení
příkaz MenuStyle
a odchylky definovat přímo v konfiguraci
menu. Pokud chceme mít soustředěné všechny definice vzhledu na jednom
místě, můžeme si pomoci tak, že uvedeme v konfiguraci příkaz
AddToMenu
pro každé menu dvakrát:
MenuStyle * SideColor #030860 MenuStyle * SidePic mathe2.xpm AddToMenu RootMenu@lapsang.xpm@ ....pokračování konfiguračního souboru... AddToMenu RootMenu " Hlavní menu" Title + " Terminál" Xterm + " Programy" Popup Programy
Pokud pro některá menu obrázky nechceme, ale pro všechna ostatní
ano, můžeme použít ještě jiný postup (i když v takovém případě se mi
zdá rozumnější definovat obrázky pro každé menu zvlášť), příkaz
ChangeMenuStyle
. V dalším příkladu se předefinuje vzhled
menu Window-Ops a Window-Ops2. Nešťastné je, že každý styl menu je třeba
definovat zcela samostatně:
MenuStyle * fvwm, \ Font -adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-2 MenuStyle * MenuFace DGradient 128 2 #bebede 50 #a8a8b8 50 #e0e0ff MenuStyle * SidePic mathe2.xpm MenuStyle * SideColor #02075f MenuStyle BezObrazku fvwm, \ Font -adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-2 MenuStyle BezObrazku \ MenuFace DGradient 128 2 #bebede 50 #a8a8b8 50 #e0e0ff ...definice menu... ...a na konci, až jsou menu vytvořená... ChangeMenuStyle BezObrazku Window-Ops Window-Ops2
Pro zájemce nakonec přiložím obrázky použité v příkladech, mathe2.xpm a tykev.xpm.
V menu lze svázat obrázky přímo s jednotlivými položkami v menu. Podobně jako sloužil znak @ pro připojení obrázku k celému menu, slouží znaky * a % k připojení obrázku k jedné položce menu. Procentem se označují ikonky, které jsou vložené přímo v řádku společně s popisem položky v menu. Taková ikonka by měla být dostatečně malá, třeba 16x16 pixelů. Hvězdičkami se označují ikonky, které se v menu zobrazují nad příslušnou položkou:
+ Calculator*xcalc.xpm* Exec exec xcalc
+ Calculator%xcalc.xpm% Exec exec xcalc
Podobně jako menu lze nastavit i titulky oken a knoflíky v titulcích:
TitleStyle LeftJustified TitleStyle ActiveUp DGradient 128 2 #bebede 50 #a8a8b8 50 #e0e0ff TitleStyle ActiveDown DGradient 128 2 #bebede 50 #a8a8b8 50 #e0e0ff TitleStyle InActive HGradient 128 2 #8e8e9e 50 #787888 50 #a8a8b8 ButtonStyle All -- UseTitleStyle
Dekorace oken jsou v příkladu nastavovány podle toho, jestli je okno aktivní nebo ne. Aktivní okna mají v naší ukázkové konfiguraci dekorace a titulek světlejší. Narozdíl od typického chování MS Windows je ve fvwm možné, aby bylo okno aktivní, i když je utopené pod ostatními okny. Vzhled takového okna je možné také nastavit zvlášť. Knoflíky v titulcích okna jsou v příkladu nastavené tak, aby měly stejný styl jako ostatní dekorace okna.
V poslední době se mi podstatným způsobem rozrostla velikost seznamu v ICQ. Protože okno začalo zabírat příliš velkou plochu obrazovky a jednoduchý výchozí styl se mi příliš nelíbíl, nastavil jsem si v Licq skin "Thomas" a pokusil se přizpůsobit styl fvwm obsahu okna Licq.
Style * NoButton 3 AddToDecor icq + TitleStyle LeftJustified + TitleStyle ActiveUp Solid #192050 -- flat + TitleStyle ActiveDown Solid #192050 -- flat + TitleStyle InActive Solid #192050 -- flat + ButtonStyle 3 17 \ 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 \ 60x50@0 80x70@1 80x80@0 70x80@0 50x60@0 30x80@0 \ 20x80@0 20x70@0 40x50@1 20x30@0 20x20@1 + ButtonStyle 3 -- UseTitleStyle Flat Style "Licq (*)" UseDecor icq, NoHandles, BorderWidth 0 Style "Licq (*)" NoButton 1, NoButton 2, Button 3, NoButton 4 Style "Licq (*)" HilightFore #d0d0d0, ForeColor #a0a0a0 Style "LicqWharf" NoTitle, NoHandles, BorderWidth 0 Mouse 0 3 A Close
Příkazem AddToDecor
vytvořím nový styl dekorací a
pojmenuju jej icq
. Parametrem flat
okennímu
manažeru sdělují, že titulek nemá mít stínované okraje, nebude se tedy
jevit plasticky - bude plochý.
Trochu bližší vysvětlení si žádá příkaz ButtonStyle. Ve fvwm se tvoří tlačítka zhruba dvěma způsoby - jednak se dají tlačítka vytvářet jako bitmapy a jednak jako vektorové obrázky. Právě druhý způsob je použitý ve fvwm jako výchozí. Kdysi dávno, když jsem si začínal hrát s fvwm a neměl jsem přístup na internet - a kdoví, jestli vůbec existovala nějaká domácí stránka fvwm - jsem se snažil pochopit vektorovou grafiku fvwm. Dneska si šetřím práci a knoflíky vytvářím metodou cut'n'paste z hotových knoflíků na domácích stránkách fvwm. Pokud by vám přesto nevyhovoval žádný z hotových dostupných knoflíků, najdete popis vektorové grafiky fvwm v manuálové stránce.
Do fvwm lze snadno přidat nové knoflíky tak, že na ně pověsíte
nějakou akci příkazem Mouse
. Knoflíky jsou rozlišené svým
číslem. Knoflík číslo jedna je úplně vlevo, knoflík číslo dva je úplně
vpravo, trojka je opět nalevo (blíže ke středu), čtyřka je napravo a
tak dál. V ukázkové konfiguraci ve druhém díle seriálu jsou použité
pouze knoflíky 1, 2 a 4. Pro Licq jsem vyrobil i knoflík 3, namaloval
do něj křížek a pověsil na něj akci Close
- zavření okna.
Knoflík se chová a vypadá stejně jako zavírací knoflík úplně vpravo v
oknech systému MS Windows. Aby se nový knoflík nezobrazoval v
ostatních oknech, když je na něj pověšena akce Close
, je
nutné ještě před vytvořením stylu Licq zakázat zobrazování knoflíku
číslo tři: Style * NoButton 3
. Podobně jsou zakázané ve
stylu Licq všechny ostatní knoflíky kromě toho našeho.
Výsledek si můžete prohlédnout na obrázku:
Suplovat manuálovou stránku fvwm je nadlidský úkol. Snažím se zde pouze ukázat možnosti fvwm a naznačit cesty, kterými lze postupovat při konfiguraci. Zájemce o podrobnější informace opět musím odkázat na manuálovou stránku a ukázkové konfigurační soubory přibalené k fvwm. Seriál ještě nekončí. Příště zkusím navázat na předchozí díl a říci něco bližšího o virtuálních obrazovkách a o modulech FvwmButtons, FvwmPager a FvwmBacker.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.