Arquitetura das APIs StylusInput
As APIs StylusInput permitem que você interaja com o fluxo de dados da caneta tablet. Para interagir com o fluxo de dados, adicione um objeto RealTimeStylus ao aplicativo e adicione plug-ins ao objeto RealTimeStylus .
Dois plug-ins são fornecidos nas APIs StylusInput. O objeto DynamicRenderer implementa a interface IStylusSyncPlugin . O objeto DynamicRenderer renderiza a tinta em tempo real, pois ela está sendo desenhada. O objeto GestureRecognizer implementa as interfaces IStylusSyncPlugin e IStylusAsyncPlugin . O objeto GestureRecognizer reconhece gestos de aplicativo.
Definições
Os termos a seguir são usados nas seções que descrevem as APIs StylusInput:
Plug-in síncrono
Uma classe que implementa a interface IStylusSyncPlugin . Plug-ins síncronos geralmente são chamados diretamente pelo objeto RealTimeStylus .
Plug-in assíncrono
Uma classe que implementa a interface IStylusAsyncPlugin . Plug-ins assíncronos geralmente são chamados no thread da interface do usuário do aplicativo.
Coleção de plug-ins síncrona
Uma coleção StylusSyncPluginCollection , que é uma coleção ordenada de objetos IStylusSyncPlugin . Uma coleção de plug-ins 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íncrona.
Coleção de plug-ins assíncrona
Uma coleção StylusAsyncPluginCollection , que é uma coleção ordenada de objetos IStylusAsyncPlugin . Uma coleção de plug-ins 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íncrona.
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 tablet. Crie ou use plug-ins síncronos para tarefas que exigem acesso em tempo real ao fluxo de dados e não gerenciam computacionalmente, 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ços em um objeto InkDisp .
Determinadas tarefas podem ser computacionalmente exigentes, mas exigem acesso em tempo real ao fluxo de dados, como o reconhecimento de gestos multistroke. Para atender a essas necessidades, as APIs StylusInput fornecem um modelo RealTimeStylus em cascata que permite usar dois objetos RealTimeStylus , cada um em execução em seu próprio thread. Para obter mais informações sobre o modelo 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 caneta tablet
O objeto RealTimeStylus tem duas filas internas que carregam os dados da caneta tablet, 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 tablet:
O objeto RealTimeStylus verifica se há objetos de dados de plug-in primeiro em sua fila de entrada e depois no fluxo de dados da caneta tablet.
O objeto RealTimeStylus envia um objeto de dados de plug-in para os objetos em sua coleção de plug-ins 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-ins síncrona, o objeto de dados do plug-in será colocado na fila de saída do objeto RealTimeStylus .
O objeto RealTimeStylus verifica o próximo objeto de dados de plug-in a ser processado.
Embora a fila de saída do objeto RealTimeStylus contenha dados, o objeto RealTimeStylus envia um objeto de dados plug-in de sua fila de saída para os objetos em sua coleção de plug-ins 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 da caneta atual 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 de caneta tablet por meio do objeto RealTimeStylus e suas coleções de plug-ins.
Neste diagrama, os círculos rotulados como "A" e "B" representam dados de caneta tablet 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íncrona. O círculo rotulado como "C" representa os dados da caneta tablet que o objeto RealTimeStylus está processando no momento. Ele é enviado para a coleção de plug-in síncrono e colocado na fila de saída. O círculo vazio representa a posição na fila de saída em que os dados futuros da caneta tablet 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 nos namespaces Microsoft.StylusInput e 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 .
Tópicos relacionados