Implementando LWUIT para TV Digital (Ginga-J) - JavaOne 2011

Post on 07-Sep-2014

916 views 2 download

Tags:

description

 

Transcript of Implementando LWUIT para TV Digital (Ginga-J) - JavaOne 2011

Slide 1

Implementando LWUIT para TV Digital (Ginga-J)

Bruno GhisiBruno Herrera

Objetivo

Mostrar os testes realizados e um estudo de caso sobre a experiência de implementar o LWUIT para Java DTV.  Profissionais interessados em TV Digital, bibliotecas gráficas e design patterns. 

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Ginga

Ginga-J

Java DTV

LWUIT

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

LWUIT (Ginga-J)

• Inspirado no LWUIT celular (Java ME/MIDP)o Biblioteca X Especificaçãoo MIDP Canvas x AWT ou

implementação nativa  • Não é compatível 

o com.sun.dtv.lwuito Pacotes/Classes/Métodos foram

removidos e adicionados

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Implementando LWUITPorting Reuso Linguagem Velocidade Dependência

AWT JVM Ciclo de pintura, eventos, etc

Java Maior overhead

Incluso na stack Ginga-J (CDC/FP/PBP)

Nativo Dependência da Plataforma

Baixo C/C++ bind Menor overhead

Toolkit gráfico da plataforma (DirectFB, qt, Nano-X, etc)

Implementando LWUITPorting Reuso Linguagem Velocidade Dependência

AWT JVM Ciclo de pintura, eventos, etc

Java Maior overhead

Incluso na stack Ginga-J (CDC/FP/PBP)

Nativo Dependência da Plataforma

Baixo C/C++ bind Menor overhead

Toolkit gráfico da plataforma (DirectFB, qt, Nano-X, etc)

Especificação Java DTV/LWUIT

• Falta clareza Component - public void setUIID(String uiid) - Sets unique identifier for a component, as it is retrieved using getUIID.  DefaultLookAndFeel - public void drawLabel(Graphics g, Label l) - Invoked for drawing a label widget. ...

• Ainda não existe uma implementação de referência concluída e nem TCK (Technology Compatibility Kit)

Inúmeras decisões de projeto baseadas no LWUIT celular e bom senso!

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Ciclo de pintura AWT

• Single Threaded (EDT)o Chamadas serializadas;o Evita concorrencia na pintura; o paint() é feito via "callbacks";

• System Triggered;o Tamanhno;o Posição;

• Application Trigerred;o repaint();

discarte de eventos duplicados;

Ciclo de pintura AWT

Ciclo de pintura AWT

Ciclo de pintura AWT

Ciclo de pintura AWT

Ciclo de pintura LWUIT

• Ciclo de pintura muito parecido com AWT• Single Threaded (EDT)

o Chamadas serializadas;o Evita concorrencia na pintura/acesso ao Graphics; o paint() é feito via "callbacks";

• Limpa o background do componente antes de pintar;• Translada o Graphics para cooderdenadas do container pai;

Ciclo de pintura LWUIT

Ciclo de pintura LWUIT

Ciclo de pintura LWUIT

Ciclo de pintura LWUIT

Ciclo de pintura LWUIT

Ciclo de pintura LWUIT

AWTDelegateComponent

• Componentes LWUIT não são compatíveis com AWT como as do Swingo Extende java.awt.Container

• Componentes LWUIT contém um AWTDelegateComponent

 

AWTDelegateComponent

• Métodos Internal (ex: paintInternal(), setSizeInternal())  1.Internamente é utilizado o xxxInternal() para evitar

sobrescrita no Componente LWUIT• Se o programador sobrescrever, é por conta e risco

Ciclo de pintura LWUIT/AWT

Integrando Ciclo de Pintura com AWT

• z-order 

• Translate (coordenadas transladadas)

Integrando Ciclo de Pintura com AWT

• Reuso AWT Font o For usage of LWUIT within the DTV specification, a

Font object always wraps an instance of java.awt.Font.

Integrando Ciclo de Pintura com AWT

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Animação

• Trecho Guia Operacional "Pode perder quadro"• Sincronismo thread EDT e Animação• Animation x Animated

o Todos componentes herdam das duas interfaces;o Apenas com.sun.dtv.lwuit.Component podem ser

adicionados;

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Transformando eventos AWT em eventos LWUIT

o AWTDelegateComponent gerencia as instâncias de bridge (add/remove);

o Bridge faz a cola com o recebimento do evento AWT e delega para o LWUIT;

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom: Dimension, Point, Rectangle• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Layouts

• AWT o BorderLayout o FlowLayout

  • Implementar

o BoxLayout     o GroupLayout 

 o CoordinateLayout o GridLayout    

new GridLayout(7, 2);

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Plaf

• Styleo fgColor, bgColor, bgSelectionColor, fgSelectionColor,

transparency, margin, padding, image, scaleImage, border

• UIManagero Determina o estilo o Instala temas 

• Look and Feel

Pacotes LWUIT

• lwuit • lwuit.animations• lwuit.events• lwuit.geom• lwuit.layouts• lwuit.list• lwuit.painter• lwuit.plaf• lwuit.util

Util

• Resourceso Arquivo de recursos binário (.res)

Borda Cores e imagens Font Margin e padding 

 o Diferença no protocolo

Label.sel#bgColor, Button.press#fgColor, etc constante que representa determinado tipo de borda 

BORDER_TYPE_LINE = 1 e 2

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Demonstração

LWUIT on TV: https://javatv-developers.dev.java.net

Runtime - phoneME Advanced (CDC/FP/PBP): https://phoneme.dev.java.net

** Implementação no CLASSPATH

Agenda

• Ginga• LWUIT• Questões envolvendo implementação• Estudo de caso: Implementando LWUIT em AWT• Demonstração• Conclusão

Conclusão

1. Java DTV precisa ainda ser clarificada, hoje também não é uma JSR.o Pontos obscuros podem trazer comportamentos não

esperados em diversas implementações do LWUIT– A abordagem de reuso da AWT trouxe agilidade no

desenvolvimentoo Coisas visíveis rapidamente

– "Good Painting Code Is the Key to App Performance" – A falta de ferramentas e material público traz atrasos na

evolução da comunidade Ginga-J

Obrigado!Bruno Ghisi: weblogs.java.net/blog/brunogh / bcg@certi.org.br / brunogh@gmail.com Bruno Herrera: bhm@certi.org.br / bruherrera@gmail.com www.certi.org.br/ccd

Projetos Open Source CERTI:certiopensource.googlecode.com

• www.forumsbtvd.org.br• Java DTV: www.forumsbtvd.org.br/materias.asp?id=200• http://java.sun.com/products/jfc/tsc/articles/painting/• https://lwuit.dev.java.net/files/documents/8797/95067/file_95067.da

t/LWUIT%20Developer_Guide.pdf