Acesso Direto à Tela (DSA)
Dados do artigo
Artigo
Contents |
Introdução
Acesso direto à tela (do Inglês DSA - Direct Screen Access) é uma maneira de se desenhar na tela sem utilizar o servidor de janelas. Essa alternativa é mais eficiente pois evita a comunicação com o servidor, sendo recomendada para aplicações que lidam com vídeo, e jogos. Entretanto, a comunicação com o servidor de janelas é necessária em alguns momentos para se evitar acessos inválidos a dados de outras aplicações. A classe que implementa o acesso direto à tela (CDirectScreenAccess) é implementada como um objeto ativo:
class CDirectScreenAccess : public CActive;
A seguir, alguns dos membros definidos nessa classe.
DrawingRegion()
Retorna qual é a área da tela onde as operações de desenho devem ser feitas.
inline RRegion *DrawingRegion();
Gc()
Retorna o contexto gráfico que será usado para se desenhar na tela. Esse contexto é criado pela classe ao se iniciar o acesso direto através de StartL(). As partes da tela onde serão feitos os desenhos devem ser especificadas como coordenadas da janela, e a área permitida para desenho é determinada pelo objeto RRegion obtido por DrawingRegion().
inline CFbsBitGc *Gc();
NewL()
Cria uma instância da classe de acesso direto à tela, e a adiciona ao escalonador ativo atual.
static CDirectScreenAccess *NewL (RWsSession &aWs, CWsScreenDevice
&aScreenDevice, RWindowBase &aWin, MDirectScreenAccess &aAbort);
ScreenDevice()
Recupera a tela onde as operações de desenho serão realizadas.
inline CFbsScreenDevice *&ScreenDevice();
StartL()
Informa o servidor de janelas que o acesso direto à tela será iniciado, de modo que um contexto gráfico será criado para que seja possível desenhar na tela.
void StartL();
Observações
A interface MDirectScreenAccess deve ser usada para reiniciar o acesso direto à tela, quando for necessário.
virtual void Restart (RDirectScreenAccess::TTerminationReasons aReason)=0;
Essa função é chamada pelo servidor de janelas para indicar que o acesso direto pode ser reiniciado.
Essa função deve chamar o método StartL() da classe CDirectScreenAccess. É importante observar que esse método pode gerar um abandono ("leave"), que deve ser capturado. Caso um abandono seja gerado, significa que o acesso direto não pode ser reiniciado. Quando o método StartL() for executado, a área permitida para desenho será recalculada. Isso significa que se o acesso foi interrompido porque outra janela foi sobreposta à janela que estava sendo desenhada, essa janela sobreposta não será sobrescrita quando o acesso direto for reiniciado.


(no comments yet)