View
918
Download
2
Category
Tags:
Preview:
DESCRIPTION
Citation preview
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
Recommended