terça-feira, 3 de fevereiro de 2009

Usando vários monitores no Windows em aplicativos Flash

Um recurso que usamos constantemente é a distribuição de uma imagem em vários monitores. Com isso podemos, por exemplo, aumentar a área de uma projeção usando várias saídas de vídeo de um computador.

Até o lançamento do Windows Vista isso era simples de se conseguir nos sistemas da Microsoft. Bastava usar uma placa de vídeo com várias saídas, como as mais comuns da nVidia, e, usando o driver do fabricante, extender a área do desktop usando o "span mode", onde o computador via todas as saídas como uma só área de trabalho comprida. Para nosso milagre de extensão da tela bastava que o programa fosse maximizado: ele ocupava todas as saídas de vídeo conectadas.

Com a chegada da versão nova do sistema, esse modo milagroso foi retirado (segundo a nVidia é impossível ativar o modo span devido à estrutura de vídeo do Windows Vista). Temos agora apenas o antigo "modo clone", onde uma mesma imagem é mostrada em todas as saídas, e o modo "extended" em que o desktop é esticado em vários monitores mas o computador os reconhece isoladamente. Pior: devido a essa questão no Vista, a nVidia retirou permanentemente das versões mais novas de seus drivers o modo span, mesmo no Windows XP.

Isso não seria problema caso não houvesse uma grande limitação do windows: uma janela não pode ser maximizada para um tamanho além da resolução do mointor em que ela está. Falando de uma forma prática, caso tenhamos duas saídas de vídeo a 1024x768 cada poderíamos mostrar uma janela de tamanho máximo de 1024x768, e não 2048x768 como precisamos para estender nossa imagem pelas duas saídas.

Vários programas burlam essa limitação, como o próprio Flash, mas para isso é preciso que a janela não esteja maximizada, o que é um problema para instalações, já que seus contornos continuam sendo exibidos. Mais um problema: ainda existe o limite de 2880 pixels como largura máxima de um filme flash, então nada de três ou mais monitores/projeções (caso cada um use resolução de 1024x768 ou maior).


Solucionando com um "truque"

A saída que encontramos não é exatamente "bonita", mas é capaz de estender um filme flash em vários monitores (testamos em 2, 3 e 4 usando duas placas nVidia 9600GT conectadas a um mesmo computador). A solução usa o Mozilla Firefox (que também burla o limite do tamanho de janelas), um de seus complementos e um pouco de javascript. O princípio é simples: importamos o filme Flash em uma página HTML com dimensões definidas como "100%" tanto para largura quanto altura. Abrimos ess página no Firefox e ativamos o modo "tela inteira (F11)" que, com o complemento "Full Fullscreen", não exibe nenhum tipo de barra de informações, navegação, etc. Em seguida, ativamos o código javascript que estenderá a tela do firefox por todos os monitores.

Detalhando um pouco mais...

1. Instale o Mozilla Firefox: www.mozilla.com

2. Instale o complemento Full Fullscreen: addons.mozilla.org/pt-BR/firefox/addon/1568

3. Crie um arquivo HTML contendo seu filme Flash e o código javascript (nesse caso, o javascript é chamado 1 segundo após a página ser carregada para dar tempo de ativarmos o modo "tela inteira (F11)" ANTES que ele seja executado - você não precisa carregar o filme flash usando um javascript externos já que o código não será executado no MS Internet Explorer:

<html><head><title>application container</title>
<style type="text/css">
<!--
body {
background-color: #000000;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style><script type="text/javascript">
var t = setTimeout("resizeWindow()",1000);
function resizeWindow() {
self.moveTo(0,0);
top.resizeTo(2048,768);
}
</script>
</head><body>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="100%" height="100%"><param name="movie" value="flash.swf"><param name="quality" value="high"><embed src="flash.swf" quality="high"
pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="100%" height="100%"></embed>
</object>
</body></html>


4. Abra esse arquivo com o Firefox e pressione F11. Após 1 segundo a imagem ocupará todos os monitores (que já devem estar ligados na resolução correta - nesse caso todos a 1024x768).

O código acima cria um arquivo para ser exibido em duas projeções de 1024x768 pixels cada e funciona tanto no Windows XP quanto no Windows Vista. Para 3 ou mais projeções, lembre-se que o limite de largura de um filme Flash é 2880, então o crie proporcionalmente para que quando seja esticado não perca seu aspecto correto (sim, o Firefox estica o filme Flash para além do limite - usando apenas gráficos vetoriais não se percebe problemas na visualização).

2 comentários:

  1. Outra opção simples é continuar usando o Xp Pro :)

    ResponderExcluir
  2. O problema é que a nvidia tirou o suporte ao "span mode" mesmo dos drivers do xp...

    ResponderExcluir