Sdílet prostřednictvím


Model rukopisných vláken

Jednou z výhod psaní rukou na Tablet PC je, že to připomíná psaní obyčejným perem a papírem. K tomu pero pro tablet shromažďuje vstupní data mnohem vyšší rychlostí než myš a vykresluje rukopis při zápisu uživatele. Vlákno uživatelského rozhraní aplikace nestačí ke shromažďování dat pera a vykreslování rukopisu, protože se může zablokovat. K vyřešení tohoto problému aplikace WPF používá dvě další vlákna, když uživatel píše inkoustem.

Následující seznam popisuje vlákna, která se podílejí na shromažďování a vykreslování digitálního inkoustu.

  • Vlákno pera - vlákno, které přebírá vstup z dotykového pera. (Ve skutečnosti se jedná o fond vláken, ale toto téma se na něj odkazuje jako na vlákno pera.)

  • Vlákno uživatelského rozhraní aplikace – vlákno, které řídí uživatelské rozhraní aplikace.

  • Vlákno dynamického vykreslování – vlákno, které vykresluje inkoust, zatímco uživatel nakreslí tah. Vlákno dynamického vykreslování se liší od vlákna, které vykresluje další prvky uživatelského rozhraní pro aplikaci, jak je uvedeno v modelu vláken Windows Presentation Foundation.

Model rukopisu je stejný bez ohledu na to, jestli aplikace používá InkCanvas nebo vlastní ovládací prvek podobný ovládacího prvku při vytváření vstupního ovládacího prvku rukopisu. I když toto téma popisuje vlákna z hlediska InkCanvas, stejné koncepty platí při vytváření vlastního ovládacího prvku.

Přehled vláken

Následující diagram znázorňuje, jaký je model vláken, když uživatel nakreslí tah.

Model vláken při kreslení inkoustového tahu

  1. Akce, ke kterým dochází, když uživatel nakreslí tah

    1. Když uživatel nakreslí tah, přijdou body pera na vlákně pera. Stylusové plug-in moduly, včetně DynamicRenderer, přijímají stylyské body na vláknu stylusu a mají šanci je upravit, než je přijme InkCanvas.

    2. Vykreslí DynamicRenderer body pera ve vlákně dynamického vykreslování. K tomu dochází současně s předchozím krokem.

    3. Vlákno uživatelského rozhraní přijímá body pera přes InkCanvas.

  2. Akce, ke kterým dochází po ukončení tahu uživatelem

    1. Když uživatel dokončí kreslení tahu, InkCanvas vytvoří Stroke objekt a přidá ho do objektu InkPresenter, který ho staticky vykresluje.

    2. Vlákno uživatelského rozhraní upozorní DynamicRenderer na statické vykreslení tahu, takže DynamicRenderer odebere vizuální znázornění tahu.

Kolekce inkoustu a pluginy pro stylus

Každý UIElementStylusPlugInCollection. Objekty StylusPlugIn v StylusPlugInCollection přijímají a mohou měnit body stylusu ve vlákně pera. Objekty StylusPlugIn obdrží pera body podle jejich pořadí v objektu StylusPlugInCollection.

Následující diagram znázorňuje hypotetickou situaci, kdy StylusPlugIns kolekce UIElement obsahuje stylusPlugin1, a DynamicRenderer, stylusPlugin2v tomto pořadí.

Pořadí zásuvných modulů pro stylus ovlivňuje výstup.

V předchozím diagramu probíhá následující chování:

  1. StylusPlugin1 upraví hodnoty pro x a y.

  2. DynamicRenderer přijímá upravené body stylusu a vykresluje je na vlákně dynamického vykreslování.

  3. StylusPlugin2 obdrží změněné body stylusu a dále upraví hodnoty pro x a y.

  4. Aplikace shromažďuje body pera a když uživatel dokončí tah, staticky vykreslí tah.

Předpokládejme, že stylusPlugin1 omezuje styčové body stylusu na obdélník a stylusPlugin2 posune styčové body stylusu doprava. V předchozím scénáři DynamicRenderer obdrží omezené body dotykového pera, ale nikoli přeložené body dotykového pera. Když uživatel tah nakreslí, tah se vykreslí v mezích obdélníku, ale tah se zdá být přeložen, dokud uživatel pero nezvedne.

Provádění operací pomocí modulu plug-in Stylus ve vlákně uživatelského rozhraní

Vzhledem k tomu, že na vláknu stylusu nelze provést přesné testování, mohou některé prvky občas přijímat vstup perem určený pro jiné prvky. Pokud potřebujete ověřit, že byl vstup správně směrován před provedením operace, přihlaste se k odběru a operaci proveďte v metodě OnStylusDownProcessed, OnStylusMoveProcessed nebo OnStylusUpProcessed. Tyto metody jsou vyvolány vláknem aplikace po provedení přesného testování hit-testing. Chcete-li se přihlásit k odběru těchto metod, zavolejte metodu NotifyWhenProcessed v rámci metody, která se provádí ve vlákně pera.

Následující diagram znázorňuje vztah mezi vláknem pera a vláknem uživatelského rozhraní s ohledem na události stylusu StylusPlugIn.

Modely vláken rukopisu (uživatelské rozhraní a pero)

Vykreslování inkoustu

Když uživatel nakreslí tah, DynamicRenderer vykreslí na samostatném vlákně inkoust, takže inkoust z pera vypadá, že "proudí", i když je vlákno uživatelského rozhraní zaneprázdněné. Staví DynamicRenderer vizuální strom na dynamickém vlákně vykreslování během shromažďování polohových bodů stylusu. Když uživatel dokončí tah, DynamicRenderer požádá o upozornění, když aplikace provede další vykreslení. Po dokončení dalšího průchodu vykreslování aplikace DynamicRenderer vyčistí jeho vizuální strom. Tento proces znázorňuje následující diagram.

Diagram závitkového inkoustu

  1. Uživatel zahájí tah.

    1. DynamicRenderer vytváří strom vizuálu.
  2. Uživatel tah nakreslel.

    1. Vytváří DynamicRenderer vizuální strom.
  3. Uživatel ukončí tah.

    1. Komponenta InkPresenter přidává tah do svého vizuálního stromu.

    2. Vrstva integrace médií (MIL) staticky vykresluje kresby.

    3. Vylepšuje vizuály DynamicRenderer.