이게 대체 무엇인가?
- Macintosh Classic "Toolbox" API의 많은 부분을 복제하는 라이브러리로, 완전한 구현은 아니지만 몇 가지 간단한 애플리케이션을 만들기에 충분함.
- MII Apple //e 에뮬레이터에 추가되는 기능으로, 기능 추가 측면에서 세계 기록에 도전하는 프로젝트 중 하나임.
왜?
- MII를 위한 UI 라이브러리가 필요했으며, 의존성이 많지 않고 '게임 같은' 스타일을 원하지 않았음.
- Nuklear 즉시 모드 UI로 시작했지만, 매우 제한적이고 사용자 정의가 필요할 때 불편함을 느낌.
- UI 레이아웃 엔진이 불만족스러웠고, 상태를 유지하는 것에 대한 약속과 달리 실제로는 해시 값에 기반한 상태를 유지함.
- 과거에는 UI가 장인정신으로 만들어졌지만, 현재는 디자인이나 사용성에 대한 감각 없이 결정되는 경우가 많음.
- 이미 가지고 있는 여러 부분을 활용하여 자체 라이브러리를 만들기 시작함.
이 라이브러리는 무엇을 할 수 있는가?
- Macintosh Toolbox의 '매니저'들 중 몇 가지를 가지고 있으며, 현대 시스템처럼 동작함.
- ARGB 버퍼로 '화면'에 그리도록 설계되었으며, 필요한 곳에 복사할 수 있음.
- 라이브러리는 '무효' 영역을 추적하고 필요한 부분만 다시 그림으로써 오버드로우를 최소화함.
원본과 어떻게 다른가?
- 외관상 MacOS 8/9에서 시작했지만 모든 회색조를 제거함.
- API 측면에서는 완전히 비동기적이며, 원본처럼 필요할 때마다 창이나 GrafPort에 그릴 수 없음.
- 모든 것이 mui_window 또는 _mui_control_로 구성됨.
윈도우 매니저
- 창을 생성하고 그릴 수 있음.
- 최대 15개의 '레이어'를 가지고 있으며, 클리핑 등을 수행할 수 있음.
메뉴 매니저
- 시스템 7/8 또는 GS/OS처럼 보이는 메뉴바, 메뉴, 체크마크, 키보드 단축키 등을 제공함.
컨트롤 매니저
- 버튼, 체크박스, 라디오 버튼, 스크롤바(수직), 텍스트 박스 등을 제공함.
리스트 매니저
- 파일 이름을 표시하기 위해 설계되었으며, 화살표 키, 페이지 업/다운, 스크롤 휠 등을 처리할 수 있음.
알림
- '취소'와 '확인' 버튼이 있는 전형적인 알림을 제공함.
표준 파일
리소스 매니저
의존성은 무엇인가?
- 외부 의존성은 libpixman 뿐임.
- libpixman, libcg, stb_truetype.h, stb_ttc.h 등을 사용함.
빌드 방법은?
- 간단한 Makefile을 사용하여 루트 디렉토리에서 'make' 명령어로 라이브러리와 테스트/데모/샘플을 빌드할 수 있음.
사용 방법은?
- _mui_shell.c_와 _mui_widgets_demo.c_를 수정하여 사용하는 것이 가장 좋음.
- mui_widgets_demo.so를 플러그인으로 로드하고 변경 사항이 감지되면 자동으로 다시 로드함.
FAQ!
- 다크 모드, 테마, 투명 창, 큐브 효과, 메뉴의 스티키, 최신 트렌디한 도구나 프레임워크, 새로운 언어 바인딩, Wayland 지원 등은 제공하지 않음.
GN⁺의 의견
- 이 라이브러리는 고전적인 Macintosh UI를 현대적인 시스템에 맞게 재창조하는 흥미로운 프로젝트임. 개발자들에게 과거의 UI 디자인에 대한 향수를 불러일으킬 수 있음.
- 비동기적인 UI 라이브러리는 현대적인 애플리케이션 개발에 더 적합하며, 이 라이브러리는 그러한 현대적인 접근 방식을 취하고 있음.
- 이 라이브러리는 특히 리소스 효율성을 중시하는 개발자에게 유용할 수 있음. 오버드로우를 최소화하고 필요한 부분만 다시 그리는 기능은 성능 최적화에 도움이 될 수 있음.
- 그러나 이 라이브러리는 다크 모드나 테마 지원과 같은 현대적인 기능을 제공하지 않기 때문에, 모든 개발자의 요구를 충족시키지는 못할 수 있음.
- 유사한 기능을 제공하는 현대적인 UI 라이브러리로는 Qt, GTK, 혹은 Electron과 같은 프레임워크가 있으며, 이들은 더 넓은 기능과 지원을 제공함.