Partilhar via


Arquitetura das APIs StylusInput

As APIs StylusInput permitem que você interaja com o fluxo de dados da caneta eletrônica. Para interagir com o fluxo de dados, adicione um objeto RealTimeStylus ao seu aplicativo e adicione plug-ins ao objeto RealTimeStylus.

Dois plug-ins são fornecidos nas APIs StylusInput. O objetoDynamicRenderer implementa a interfaceIStylusSyncPlugin. O objeto DynamicRenderer renderiza a tinta em tempo real, à medida que ela está sendo desenhada. O objeto GestureRecognizer implementa o IStylusSyncPlugin e interfaces de IStylusAsyncPlugin. O objeto GestureRecognizer reconhece gestos de aplicativo.

Definições

Os seguintes termos são usados nas seções que descrevem as APIs StylusInput:

Plug-in síncrono

Uma classe que implementa o IStylusSyncPlugin interface. Os plug-ins síncronos geralmente são chamados diretamente pelo objeto RealTimeStylus.

Plug-in assíncrono

Uma classe que implementa o IStylusAsyncPlugin interface. Os plug-ins assíncronos geralmente são chamados no thread da interface do usuário (UI) do aplicativo.

Coleção de plug-in síncrona

A coleção de StylusSyncPluginCollection, que é uma coleção ordenada de objetos IStylusSyncPlugin. Uma coleção de plug-in síncrona geralmente se refere à coleção atribuída à propriedade SyncPluginCollection de um objeto RealTimeStylus. Somente plug-ins síncronos podem ser adicionados a uma coleção de plug-ins síncronos.

Coleção assíncrona de plug-ins

A coleção de StylusAsyncPluginCollection, que é uma coleção ordenada de objetos IStylusAsyncPlugin. Uma coleção de plug-in assíncrona geralmente se refere à coleção atribuída à propriedade AsyncPluginCollection de um objeto RealTimeStylus. Somente plug-ins assíncronos podem ser adicionados a uma coleção de plug-ins assíncronos.

Plug-ins síncronos e assíncronos

O objeto RealTimeStylus foi projetado para fornecer acesso em tempo real ao fluxo de dados de uma caneta eletrônica. Crie ou use plug-ins síncronos para tarefas que exigem acesso em tempo real ao fluxo de dados e são computacionalmente pouco exigentes, como para filtragem de pacotes. Crie ou use plug-ins assíncronos para tarefas que não exigem acesso em tempo real ao fluxo de dados, como para criar e armazenar traçados em um objetoInkDisp.

Certas tarefas podem ser computacionalmente exigentes, mas requerem acesso em tempo real ao fluxo de dados, como o reconhecimento de gestos com vários cursos. Para atender a essas necessidades, as APIs StylusInput fornecem um modelo deRealTimeStylusem cascata que permite usar dois objetos RealTimeStylus, cada um executando em seu próprio thread. Para obter mais informações sobre o modelo de RealTimeStylus em cascata, consulte The Cascaded RealTimeStylus Model.

Para obter mais informações sobre como usar e criar plug-ins, consulte Trabalhando com as APIs StylusInput.

O fluxo de dados da Tablet Pen

O objeto RealTimeStylus tem duas filas internas que carregam os dados da caneta eletrônica, a fila de entrada e a fila de saída. Os dados da caneta são convertidos em instâncias das classes no namespace Microsoft.StylusInput.PluginData. A lista a seguir descreve como o objeto RealTimeStylus manipula os dados da caneta eletrônica:

O objeto RealTimeStylus verifica se há objetos de dados de plug-in primeiro em sua fila de entrada e, em seguida, a partir do fluxo de dados da caneta eletrônica.

O objeto RealTimeStylus envia um objeto de dados de plug-in para os objetos em sua coleção de plug-in síncrona. Cada plug-in síncrono pode adicionar dados à fila de entrada ou saída.

Depois que o objeto de dados do plug-in tiver sido enviado a todos os membros da coleção de plug-in síncrona, o objeto de dados do plug-in será colocado na fila de saída do objeto RealTimeStylus.

O objeto RealTimeStylus verifica se há o próximo objeto de dados de plug-in a ser processado.

Enquanto a fila de saída do objeto RealTimeStylus contém dados, o objeto RealTimeStylus envia um objeto de dados de plug-in de sua fila de saída para os objetos em sua coleção de plug-in assíncrona. Cada plug-in assíncrono pode adicionar dados à fila de entrada ou saída. No entanto, como os plug-ins assíncronos são executados no thread da interface do usuário, os dados são adicionados à fila em relação aos dados atuais da caneta que o objeto RealTimeStylus está processando, e não em relação aos dados que o plug-in assíncrono está processando.

O diagrama a seguir ilustra o fluxo de dados da caneta eletrônica através do objeto RealTimeStylus e suas coleções de plug-in.

fluxo de dados da caneta eletrônica através do objeto RealTimeStylus e suas coleções de plug-in

Neste diagrama, os círculos rotulados como "A" e "B" representam dados da caneta eletrônica que já foram adicionados à fila de saída do objeto RealTimeStylus e que ainda não foram enviados para a coleção de plug-ins assíncronos. O círculo rotulado como "C" representa os dados da caneta eletrônica que o objeto RealTimeStylus está processando no momento. Ele é enviado para a coleção de plug-in síncrona e colocado na fila de saída. O círculo vazio representa a posição na fila de saída onde os dados futuros da caneta eletrônica são adicionados.

Para obter mais informações sobre como dados específicos são adicionados à fila e processados, consulte dados de plug-in e a classe RealTimeStylus.

As APIs StylusInput

As APIs StylusInput residem principalmente no Microsoft.StylusInput e namespaces de Microsoft.StylusInput.PluginData. No entanto, as APIs StylusInput também fazem referência a algumas classes no namespace Microsoft.Ink, como a classe Tablet, a coleção TabletPropertyDescriptionCollection e as enumerações ApplicationGesture e SystemGesture.

DynamicRenderer

GestureRecognizer

RealTimeStylus

IStylusAsyncPlugin

IStylusSyncPlugin

Trabalhando com as APIs StylusInput

O modelo RealTimeStylus em cascata