Staňte se programátorem: Linuxové efekty levou zadní

Linuxové grafické desktopy se chlubí poutavými efekty, některé z nich lze ale velmi snadno napodobit i na Windows. Dnes si takové efekty napíšeme v programovacím jazyku C#.

V dnešní části si s námi budete moci vytvořit jednoduché animační efekty oken, kterými se chlubí například mnohé „FX“ desktopy z Linuxu včetně oblíbeného a téměř všudypřítomného Compizu – dříve známého jako Beryl.

Konkrétně se zaměříme na tři efekty. První vytvoří „klikací“ miniatury oken a umístí je na plochu. Pokud nad miniaturu najedete myší, miniatura se zvýrazní, a pokud na ni kliknete, zobrazí se odpovídající okno programu. Druhý efekt pro změnu vytvoří animaci, při které se okno zmenší a třetí efekt bude postupně zvětšovat průhlednost okna, dokud zcela nezmizí.

zakladni_okna.png
Zkušební okna se kterými si můžete naše efekty vyzkoušet
Přeložený program najdete na konci článku
Zde je jediným efektem akcelerované prostředí Vista Aero

V dnešním díle se naučíme základy, příště se pak podíváme na kód konkrétních efektů. Efekt seřazených miniatur a postupně se zmenšujících oken vytvoříme pomocí skutečných miniatur formuláře. Efekt průhlednosti pak vytvoříme prostým nastavením vlastnosti okna.

První efekt: seřazení a vytvoření klikacích miniatur

klikaci_miniatury.png
Okna vypadají a chovají se jako ikony

Druhý efekt: zmenšení

zmenseni1.png  zmenseni2.png  zmenseni3.png
Pokud budete postupně zobrazovat menší a menší miniaturu okna, vznikne pěkný efekt

Třetí efekt: zmizení

pruhlednost1.png  pruhlednost2.png  pruhlednost3.png
Pokud budete průhlednost měnit spojitě, ve smyčce nebo pomocí časovače, vznikne pěkný mizící efekt

Základní dovednosti

Před tím, než začneme psát efekty okna, měli bychom se seznámit s několika základními funkcemi a vlastnostmi okna a práce s obrázky:

Pro zobrazení okna použijeme metodu Show:

Form f = new Form();
f.Show();

Pro skrytí okna použijeme metodu Hide:

f.Hide();

Pro nastavení rozměru okna slouží vlastnost Size, které přiřadíme instanci třídy System.Drawing.Size představující nové rozměry okna:

Form f = new Form();
f.Size = new Size(200,400); // šířka 200, výška 400
f.Show();

K nastavení pozice okna slouží vlastnost Location, které je nutné přiřadit instanci struktury System.Drawing.Point představující bod, kam bude umístěn levý horní roh okna.

Form f = new Form();
f.Location = new Point(0,0); // Posune okno do levého horního rohu obrazovky
f.Show();

Nastavení průhlednosti okna

Pro nastavení průhlednosti okna použijeme vlastnost Opacity, které přiřadíme číslo datového typu double v intervalu <0,1> představující stupeň průhlednost okna. Hodnota 0 představuje zcela průhledné okno, zatímco hodnota 1 představuje okno neprůhledné.

Form f = new Form();
f.Show();
f.Opacity = 0.5; // Nastaví poloprůhledné okno

Získání obrazu okna

Pro získání snímku okna je určena metoda DrawToBitmap třídy Form, která jako argument očekává odkaz na instanci třídy System.Drawing.Bitmap představující bitmapu do které bude obsah okna zakreslen. Druhý argument je typu System.Drawing.Rectangle a představuje výseč bitmapy, do které bude obrázek zakreslen.

Form f = new Form();
f.Show();
Bitmap obr = new Bitmap(f.Width, f.Height);
f.DrawToBitmap(obr, new Rectangle(0,0, f.Width,f.Height);
obr.Save(@“C:\obrazek.bmp“);

Pro zobrazení obrázku slouží komponenta PictureBox. K nastavení obrázku, který se v této komponentě zobrazí, slouží vlastnost Image, které je nutné přiřadit odkaz na instanci třídy System.Drawing.Image představující daný obrázek.

Form f = new Form();
PictureBox p = new PictureBox();
f.Controls.Add(p); // Přidá na formulář PictureBox
// Nahraje obrázek do paměti a zobrazí jej v komponentě PictureBox
p.Image = Image.FromFile(@“C:\img.bmp“);
p.Show();

Vytvoření miniatury

Pro získání zmenšeniny obrázku slouží metoda GetThumbnailImage třídy System.Drawing.Image představující obrázek. Metoda jako první dva argumenty očekává novou šířku a výšku obrázku a jako třetí argument je nutné uvést delegát na metodu, která bude zavolána v případě vyvolání chyby při změnách rozměrů obrázku.

bool Chyba()
{
  MessageBox.Show(“Nastala chyba při manipulaci s obrázkem“);
  return false;
}

Image UpravRozmerObrazku(Image i, int vyska, int sirka)
{
  try
  {
    return i.GetThumbnailImage(vyska, sirka,
    new Image.GetThumbnailImageAbort(Chyba), IntPtr.Zero);
  }
  catch
 
{
    return null;
  }
}


Dnes jsme si ukázali tři efekty, které sice na první pohled vypadají velmi jednoduše, v reálném nasazení jsou ale velmi pěkné a s naprostým minimem programování. Nakonec si můžete program jako vždy vyzkoušet. Z Linuxu jsme se vrátili na Windows (ale v Monu program také spustíte, i když efekty pravděpodobně nebudou fungovat, zobrazí se pouze samotná okna), ke spuštění tedy budete potřebovat platformu Microsoft .NET Framework.

Samozřejmě nechybí ani zdrojový kód, který je upravený pro bezplatné vývojové prostředí Microsoft Visual C# 2008 Express Edition.

Diskuze (28) Další článek: Microsoft nabízí čtvrt milionu dolarů za dopadení autora Confickeru

Témata článku: , , , , , , , , , , , , ,