utilizan una sciter renderizar renderizado que progresivo programacion pagina navegadores los funcionan funcionamiento como c++ html user-interface embedded rendering

c++ - una - renderizar html



Usa un renderizador html en un entorno incrustado (3)

Estoy trabajando en un proyecto en el que diseñaré una GUI para un dispositivo integrado y me encantaría usar HTML para esto. Espero que puedan ayudarme a encontrar un motor de renderizado que se adapte a mis necesidades.

Requisitos:

  • La página web debe convertirse en un búfer de memoria. Luego transferiré el búfer de memoria a la pantalla.

  • Debo recibir una notificación a través de una devolución de llamada o un evento de que el motor de renderización necesita recuperar un nuevo elemento. Página HTML, imagen, etc. La razón para esto es que debo buscar el recurso y alimentarlo al motor de renderizado (la razón es que el dispositivo no tiene TCP / IP en todas las configuraciones y luego tendrá que recuperar el elemento) línea serie, y también para seguridad, necesito validar que la solicitud está permitida).

  • Debo poder inyectar eventos de mouse y teclado en el motor de renderizado.

  • Solo C y / o C ++

  • Debe ser fácilmente portátil y carecer de dependencias para las bibliotecas que solo existen para win / linux / mac. El dispositivo que tengo ejecuta un sistema operativo personalizado ...

  • Con poco espacio y consumo de memoria, probablemente pueda escaparse con una huella de 10MB y 5-10 MB de memoria asignada durante el procesamiento. Pero no mucho más.

  • Tanto la fuente abierta como las soluciones comerciales son bienvenidas

  • NO necesito soporte completo de HTML5 y CSS3, quiero decir que si puedo usar "HTML básico y algo de CSS", estoy más que feliz.

He visto algunos WebKit, cromo, gecko, berkelium y awesomium, pero no he encontrado realmente que se ajusten a mis necesidades.

¿Hay algo por ahí que se acerque a lo que necesito? ¿O debería abandonar esta idea y construir la GUI de alguna otra manera? ¡Agradezco cualquier ayuda!


¡Buena pregunta! Resulta que hay algunas opciones dentro de este espacio, y como supondremos, muchas de ellas se basan en Webkit. Algunos de ellos no son , sin embargo, y esos son los que creo que le interesan más.

Campo de golf

El navegador más simple de nivel 0 que satisfará tus necesidades es la versión gráfica del navegador web Links . Es adecuadamente multiplataforma (sin duda, necesitará algunas de las bibliotecas de Cygwin para entornos Windows), de código abierto, tiene una huella de memoria pequeña y, en algunas de sus encarnaciones bifurcadas o mejoradas (por ejemplo, Elinks ), tiene una funcionalidad mejorada como el soporte de Javascript, la funcionalidad completa del mouse y las campanas y silbatos que deseas en tu declaración del problema.

Por supuesto, está escrito en C.

Konqueror / Embedded

Al explorar algunas de las otras opciones dentro de este espacio, Konqueror/Embedded es algo a considerar y mirar en el futuro. Sí, está basado en Qt / Embedded y Webkit ( murmullo entre dientes ), pero apuntan a proporcionar una versión reducida tanto de su navegador como de su biblioteca para cumplir con esta necesidad específicamente. Una vez más, Windows va a ser el niño extraño aquí, pero es viable.

Fennec

Una última opción multiplataforma para explorar es la versión delgada de Mozilla Firefox, Fennec . Si bien proporciona una base de códigos mucho más grande, Mozilla está trabajando en su versión incorporada de forma muy agresiva, y cualquier ayuda que pueda proporcionar aquí sería muy apreciada. Por lo que entiendo, la versión adelgazada sigue siendo pre-alfa ( Fennec, sin embargo, sigue vivo ), pero debería convertirse en una opción viable en el futuro.

Y un grupo de otros para explorar

Además de la gama de navegadores web que compiten actualmente en este espacio , las opciones propietarias como ANT Galio también pueden satisfacer sus necesidades. Parece que hay muchas otras soluciones patentadas, pero la mayoría de ellas (por ejemplo, Internet Explorer Mobile , Mobile Safari ) solo da servicio a un pequeño número de plataformas. Las buenas soluciones propietarias multiplataforma que no se basan en Webkit parecen ser bastante raras.

SpliFF también ofreció una excelente sugerencia en su respuesta : prueba libRocket . Como recomienda, es liviano, multiplataforma, actual y activamente mantenido, fácil de conectar, y proporciona los casos de automatización que usted busca . En este caso, está programado en C ++, con enlaces de Python para mayor conveniencia.

En conclusión, según sus necesidades, igual deberá evaluar las fortalezas, debilidades y especificaciones API para las opciones enumeradas anteriormente.

Recomiendo comenzar con Links, porque es la opción más rica en funciones y más robusta, mientras que optimiza en una huella de memoria muy pequeña y una base de código. Su mayor fortaleza es que este fue un objetivo de diseño desde el principio, y todo el árbol de códigos se construye con esta filosofía de diseño en mente.

Háganos saber a qué se dirige. Esta es una necesidad común en la comunidad y estoy seguro de que otros se beneficiarán de su experiencia.


Eche un vistazo a libRocket de libRocket . Cumple con los requisitos de ser HTML + CSS, peso ligero, manejo de eventos y procesamiento en un búfer. Miré un montón de proyectos recientemente buscando básicamente lo que me pediste y este fue el partido que encontré.

libRocket es el paquete middleware de interfaz de usuario C ++ basado en los estándares HTML y CSS. Está diseñado como una solución completa para las necesidades de interfaz de cualquier proyecto.

libRocket utiliza los estándares abiertos comprobados XHTML1.0 y CSS2.0 (al tiempo que toma prestadas funciones de HTML5 y CSS3) y los amplía con características adecuadas para aplicaciones en tiempo real. Debido a esto, no es necesario que aprenda una nueva tecnología patentada como otros paquetes en este espacio de middleware.

* Cross platform architecture (Windows, Mac, Linux, iPhone, ...). * Dynamic layout system. * Efficient application-wide styling, with a custom-built templating engine. * Fully featured user control set: buttons, sliders, drop-downs, etc. * Runtime visual debugging suite. * Easily integrated and extensible with Python scripting. * Abstracted interfaces for plugging in to any game engine (samples for OpenGL, DirectX and Ogre3d). * Decorator engine allowing custom application-specific effects that can be applied to any element. * Generic event system that binds seamlessly into existing projects.


Eche un vistazo a DS Organize , un navegador hogareño de DS y también ES Operating System de Google (para un SO desarrollado originalmente por Nintendo).

He sugerido mirar DS Organize ya que la Nintendo DS tiene solo 4MB de RAM (8MB con la extensión de memoria que usan la mayoría de los navegadores DS). Y también podrá salirse con la representación directamente en VRAM, ahorrándole unos 100kb, dependiendo de su modelo de memoria y de cuánta libertad tiene con VRAM escribe fuera de VBlank.