O que é isso afinal?
- Uma biblioteca que replica grande parte da API "Toolbox" do Macintosh Classic; não é uma implementação completa, mas é suficiente para criar alguns aplicativos simples.
- Um recurso adicionado ao emulador MII Apple //e, um dos projetos que parecem estar tentando bater um recorde mundial em quantidade de funcionalidades adicionadas.
Por quê?
- Eu precisava de uma biblioteca de UI para o MII e não queria muitas dependências nem um estilo "parecido com jogo".
- Comecei com a UI de modo imediato do Nuklear, mas a achei muito limitada e incômoda quando era necessário personalizar.
- Fiquei insatisfeito com o mecanismo de layout da UI e, apesar da promessa de manter estado, na prática ele mantinha estado com base em valores de hash.
- No passado, as UIs eram feitas com capricho artesanal, mas hoje muitas decisões parecem ser tomadas sem senso de design ou usabilidade.
- Então comecei a criar minha própria biblioteca aproveitando várias partes que eu já tinha.
O que esta biblioteca pode fazer?
- Ela inclui alguns dos "managers" do Macintosh Toolbox, mas funcionando como em sistemas modernos.
- Foi projetada para desenhar em uma "tela" com buffer ARGB, que depois pode ser copiada para onde for necessário.
- A biblioteca rastreia áreas "inválidas" e minimiza overdraw ao redesenhar apenas as partes necessárias.
Como ela difere do original?
- Visualmente, começou a partir do MacOS 8/9, mas removeu todos os tons de cinza.
- Em termos de API, é totalmente assíncrona, e não é possível desenhar em uma janela ou GrafPort sempre que quiser, como no original.
- Tudo é composto por mui_window ou mui_control.
Gerenciador de janelas
- Pode criar e desenhar janelas.
- Tem até 15 "camadas" e pode fazer clipping e afins.
Gerenciador de menus
- Oferece barra de menus, menus, marcas de seleção, atalhos de teclado etc., com aparência semelhante ao System 7/8 ou GS/OS.
Gerenciador de controles
- Oferece botões, caixas de seleção, botões de opção, barras de rolagem (verticais), caixas de texto etc.
Gerenciador de listas
- Foi projetado para exibir nomes de arquivos e pode lidar com teclas de seta, Page Up/Down, roda do mouse etc.
Alertas
- Oferece alertas típicos com botões "Cancelar" e "OK".
Arquivo padrão
- Oferece uma caixa de diálogo para abrir arquivos.
Gerenciador de recursos
- Não fornece um gerenciador de recursos.
Quais são as dependências?
- A única dependência externa é libpixman.
- Usa libpixman, libcg, stb_truetype.h, stb_ttc.h etc.
Como compilar?
- Com um Makefile simples, é possível compilar a biblioteca e os testes/demos/exemplos a partir do diretório raiz com o comando
make.
Como usar?
- O melhor caminho é usar modificando mui_shell.c e mui_widgets_demo.c.
- Ele carrega
mui_widgets_demo.so como plugin e recarrega automaticamente quando detecta alterações.
FAQ!
- Não oferece modo escuro, temas, janelas transparentes, efeito cubo, menus "sticky", ferramentas ou frameworks modernos da moda, novos bindings de linguagem, suporte a Wayland etc.
Opinião do GN⁺
- Esta biblioteca é um projeto interessante que recria a UI clássica do Macintosh para sistemas modernos. Pode despertar nostalgia pelo design de interfaces do passado entre desenvolvedores.
- Uma biblioteca de UI assíncrona é mais adequada ao desenvolvimento moderno de aplicações, e esta biblioteca adota essa abordagem contemporânea.
- Ela pode ser especialmente útil para desenvolvedores que valorizam eficiência de recursos. Minimizar overdraw e redesenhar apenas as partes necessárias pode ajudar na otimização de desempenho.
- No entanto, como não oferece recursos modernos como modo escuro ou suporte a temas, talvez não atenda às necessidades de todos os desenvolvedores.
- Bibliotecas de UI modernas com funcionalidades semelhantes incluem frameworks como Qt, GTK ou Electron, que oferecem uma gama mais ampla de recursos e suporte.
Ainda não há comentários.