lunes, 16 de mayo de 2016

IMGUI

Este es un ejemplo de una GUI tradicional:
Button *btn = new Button("hola", width, height);
btn->addClickCallback(onBtnClick);
window->addButton(btn, x, y);

void onBtnClick(Button *btn)
{
}
En resumen, primero se crea un botón, después se agrega un callback, que va a ser ejecutado cuando el botón es presionado, y luego se lo agrega a una ventana, la cual va a dibujar todos sus hijos en la posición correcta.

Entra Modo inmediato

if (Button(State, "hola", X, Y, Width, Height))
{
 ...
}
Si, eso solo.

Ademas de la simpleza del uso (nada le gana a una llamada a una función) el API no retiene ningún puntero, no hay peligro de dangling pointers o contadores de referencia que no se limpiaron correctamente.

Otra ventaja de usar solo una función es el menor uso de memoria. Solo necesitamos guardar el estado del objeto que esta siendo utilizado en un momento dado, ya que solo se puede interactuar con un objeto a la vez.

En una GUI tradicional también se podría hacer esto último, pero como esta atado a un diseño orientado a objetos, seguramente el estado va a estar guardado en cada elemento.

Falacia del ejemplo trivial

Hacer un botón y un campo de texto es muy sencillo y todavía no tuve la oportunidad de hacer algo mas complejo, como una lista de objetos desplazables, por ejemplo.


Quizás, cuando llegue ese momento pueda comparar una GUI en modo inmediato vs una en modo "retenido".

No hay comentarios.:

Publicar un comentario