<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="magic-mirror.vala" xml:lang="cs">

  <info>
  <title type="text">Magické zrcadlo (Vala)</title>
    <link type="guide" xref="vala#examples"/>

    <desc>Jak použít svoji webovou kameru jako zrcadlo pomocí základního rámce GStreamer a GTK+.</desc>

    <revision pkgversion="0.1" version="0.1" date="2011-03-19" status="review"/>
    <credit type="author">
      <name>Daniel G. Siegel</name>
      <email its:translate="no">dgsiegel@gnome.org</email>
    </credit>
    <credit type="author">
      <name>Johannes Schmid</name>
      <email its:translate="no">jhs@gnome.org</email>
    </credit>
    <credit type="editor">
      <name>Marta Maria Casetti</name>
      <email its:translate="no">mmcasetti@gmail.com</email>
      <years>2013</years>
    </credit>
  </info>

<title>Magické zrcadlo</title>

<synopsis>
  <p><em>Spadlo vám ze zdi zrcadlo a rozbilo se na tisíc kousků a vy se zrovna nutně potřebujete oholit nebo si udělat make-up! A máte jen 15 minut, než vám pojede autobus do práce. Co teď?</em></p>
  <p>V této lekci napíšeme program, který vám umožní používat webovou kameru jako zrcadlo. Naučíte se tyto věci:</p>
  <list>
    <item><p>Vytvořit aplikaci GTK+</p></item>
    <item><p>Přistupovat k webové kameře pomocí knihovny GStreamer a výsledek vložit do okna</p></item>
    <item><p>Pořídit fotografie vaší webovou kamerou</p></item>
  </list>
  <p>Abyste mohli pokračovat v této lekci, budete potřebovat následující:</p>
  <list>
    <item><p>Nainstalovanou kopii <link xref="getting-ready">IDE Anjuta</link></p></item>
    <item><p>Nainstalované kopie knihoven GTK a Gstreamer a kompilátoru jazyka Vala</p></item>
    <item><p>Základní znalosti o objektově orientovaných programovacích jazycích</p></item>
  </list>
</synopsis>

<media type="image" mime="image/png" src="media/magic-mirror.png"/>

<section id="anjuta">
  <title>Vytvoření projektu ve studiu Anjuta</title>
  <p>Než začnete s kódováním, musíte ve studiu Anjuta vytvořit nový projekt. Tím se vytvoří všechny soubory, které budete později potřebovat k sestavení a spuštění kódu. Je to také užitečné kvůli udržení všeho pohromadě.</p>
  <steps>
    <item>
    <p>Spusťte IDE Anjuta a klikněte na <guiseq><gui>Soubor</gui> <gui>Nový</gui> <gui>Projekt</gui></guiseq>, aby se otevřel průvodce projektem.</p>
    </item>
    <item>
    <p>Na kartě <gui>Vala</gui> zvolte <gui>GTK+ (jednoduchý)</gui>. Klikněte na <gui>Pokračovat</gui> a na několika následujících stránkách vyplňte své údaje. Jako název projektu a složky použijte <file>maginc-mirror</file>.</p>
   	</item>
   	<item>
    <p>Ujistěte se, že <gui>Použít GtkBuilder k tvorbě uživatelského rozhraní</gui> je vypnuto, protože jej chceme v této lekci vytvořit ručně. Na použití návrháře uživatelského rozhraní se podívejte do lekce <link xref="guitar-tuner.vala">Kytarová ladička</link>.</p>
    </item>
    <item>
    <p>Ujistěte se, že <gui>Konfigurovat externí balíčky</gui> je zapnuto. Na následující stránce vyberte v seznamu <em>gstreamer-0.10</em>, aby se knihovna GStreamer zahrnula do vašeho projektu.</p>
    </item>
    <item>
    <p>Klikněte na <gui>Použít</gui> a vytvoří se vám projekt. Otevřete <file>src/magic_mirror.vala</file> na kartě <gui>Projekt</gui> nebo <gui>Soubor</gui>. Měli byste vidět kód, který začíná řádky:</p>
    <code mime="text/x-csharp">
using GLib;
using Gtk;</code>
    </item>
  </steps>
</section>

<section id="build">
  <title>Prvotní sestavení kódu</title>
  <p>Kód načte (prázdné) okno ze souboru s popisem uživatelského rozhraní a zobrazí jej. Dále to podrobněji rozebereme. Pokud jste již pochopili základy, tak tento seznam můžete přeskočit:</p>
  <list>
  <item>
    <p>Dva řádky <code>using</code> importují jmenné prostory, takže je nebudeme muset výslovně uvádět.</p>
   </item>
   <item>
    <p>Konstruktor třídy <code>Main</code> vytvoří nové okno a nastaví jeho název pro záhlaví. Potom je okno zobrazeno a je napojen signál, který ukončí aplikaci, když je okno zavřeno. Více o signálech si řekneme později.</p>
   </item>
   <item>
    <p>Statická funkce <code>main</code> se spustí jako výchozí, když spustíte aplikaci napsanou v jazyce Vala. Volá pár funkcí, které vytvoří třídu <code>Main</code> a nastaví a spustí aplikaci. Funkce <code>Gtk.main</code> spustí hlavní smyčku GTK, která spustí uživatelské rozhraní a začne naslouchat událostem (jako je kliknutí nebo zmáčknutí klávesy).</p>
   </item>
  </list>

  <p>Kód je připravený k použití, takže jej můžete zkompilovat kliknutím na <guiseq><gui>Sestavit</gui> <gui>Sestavit projekt</gui></guiseq> (nebo zmáčknutím <keyseq><key>Shift</key> <key>F7</key></keyseq>).</p>
  <p>Změňte <gui>Konfiguraci</gui> na <gui>Výchozí</gui> a klikněte na <gui>Spustit</gui>, aby se nakonfigurovala složka, ve které se provádí sestavení. Stačí to udělat jen jednou, pro první sestavení.</p>
</section>

<section id="webcam">
 <title>Přístup pomocí GStreamer k vysílání videa z webové kamery</title>
 <p>Základní multimediální konstrukce GStreamer umí zpracovávat video z webových kamer. Pojďme přidat GStreamer do naší aplikace a můžeme pak přistupovat k videovysílání.</p>

<code mime="text/x-csharp" style="numbered">
using GLib;
using Gtk;

public class Main : Object
{
	private Gst.Element camerabin;

	public Main () {
		this.camerabin = Gst.ElementFactory.make ("camerabin", "camera");
		this.camerabin.set_state (Gst.State.PLAYING);
	}

	static int main (string[] args) {
		Gtk.init (ref args);
		Gst.init (ref args);
		var app = new Main ();

		Gtk.main ();

		return 0;
	}
}
</code>
 <steps>
 <item><p>Nejprve odstraníme okno, které jsem před tím vytvořili, protože GStreamer se o zobrazení obrázku na obrazovce postará.</p>
 </item>
  <item>
  <p>Nyní vytvoříme prvek GStreamer, který zajistí přístup k webové kameře. Použijeme prvek Camerabin, což je prvek „vše v jednom“ – umí pořizovat fotky, videonahrávky, na vše nasadit efekty a mnoho dalšího. Pro naše použití přímo ideální. Pomocí <code>this.camerabin.set_state (Gst.State.PLAYING)</code> řekneme rouře, že to co jsme právě vytvořili, má začít s přehráváním. Snadné ne?</p>
  <p>Mohli bychom samozřejmě video integrovat těsněji s dalšími okny, ale to je již pokročilé téma zahrnující podrobnosti o systému X Window, do čehož se zde pouštět nebudeme.</p>
  <p>Kód znovu přeložte a spusťte. Měli byste skončit se dvěma okny. V dalším kroku začleníme video do okna GTK+.</p>
  </item>
 </steps>
</section>

<section id="impl">
 <title>Ukázková implementace</title>
 <p>Pokud v této lekci narazíte na nějaké problémy, porovnejte si svůj kód s tímto <link href="magic-mirror/magic-mirror.vala">ukázkovým kódem</link>. Je zde i <link href="magic-mirror/magic-mirror-advanced.vala">rozsáhlejší realizace</link>, která vkládá okno do běžného Gtk.Windows, což zahrnuje některé pokročilé techniky a přidává tlačítka pro spuštění/zastavení obrázků.</p>
</section>

<section id="further">
<title>Co dalšího si přečíst</title>
<p>Jestli si chcete o programování v jazyce Vala najít něco více, můžete se podívat na <link href="http://live.gnome.org/Vala/Tutorial">výuku jazyka Vala</link>.</p>
</section>

<section id="conclusion">
<title>Závěr</title>
  <p>A je to, podařilo se vám vytvořit plně funkční aplikaci s webovou kamerou během 15 minut. Nyní se můžete oholit a udělat si make-up na svoji krásnou tvář před tím, něž strávíte hezký den ve své práci, kde můžete oslnit své přátele a kolegy úžasnou aplikací, kterou jste právě za 15 minut stvořili.</p>

</section>

</page>
