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

54
Slide 1 Implementando LWUIT para TV Digital (Ginga- J) Bruno Ghisi Bruno Herrera

description

 

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

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

Slide 1

Implementando LWUIT para TV Digital (Ginga-J)

Bruno GhisiBruno Herrera

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

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. 

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

Agenda

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

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

Agenda

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

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

Ginga

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

Ginga-J

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

Java DTV

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

LWUIT

Page 9: Implementando LWUIT para TV Digital (Ginga-J) - JavaOne 2011
Page 10: Implementando LWUIT para TV Digital (Ginga-J) - JavaOne 2011

Agenda

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

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

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

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

Agenda

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

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

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)

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

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)

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

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!

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

Agenda

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

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

Pacotes LWUIT

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

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

Pacotes LWUIT

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

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

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;

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

Ciclo de pintura AWT

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

Ciclo de pintura AWT

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

Ciclo de pintura AWT

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

Ciclo de pintura AWT

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

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;

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

Ciclo de pintura LWUIT

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

Ciclo de pintura LWUIT

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

Ciclo de pintura LWUIT

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

Ciclo de pintura LWUIT

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

Ciclo de pintura LWUIT

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

Ciclo de pintura LWUIT

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

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

 

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

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

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

Ciclo de pintura LWUIT/AWT

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

Integrando Ciclo de Pintura com AWT

• z-order 

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

• Translate (coordenadas transladadas)

Integrando Ciclo de Pintura com AWT

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

• 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

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

Pacotes LWUIT

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

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

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;

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

Pacotes LWUIT

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

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

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;

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

Pacotes LWUIT

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

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

Pacotes LWUIT

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

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

Layouts

• AWT o BorderLayout o FlowLayout

  • Implementar

o BoxLayout     o GroupLayout 

 o CoordinateLayout o GridLayout    

new GridLayout(7, 2);

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

Pacotes LWUIT

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

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

Pacotes LWUIT

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

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

Pacotes LWUIT

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

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

Plaf

• Styleo fgColor, bgColor, bgSelectionColor, fgSelectionColor,

transparency, margin, padding, image, scaleImage, border

• UIManagero Determina o estilo o Instala temas 

• Look and Feel

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

Pacotes LWUIT

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

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

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

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

Agenda

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

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

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

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

Agenda

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

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

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

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

Obrigado!Bruno Ghisi: weblogs.java.net/blog/brunogh / [email protected] / [email protected] Bruno Herrera: [email protected] / [email protected] 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