これはいったい何か?
- Macintosh Classic の "Toolbox" API の多くを再現したライブラリで、完全実装ではないが、いくつかのシンプルなアプリケーションを作るには十分。
- MII Apple //e エミュレータに追加される機能で、機能追加の観点で世界記録に挑戦しているプロジェクトの 1 つ。
なぜ?
- MII 向けの UI ライブラリが必要で、依存関係が少なく、"ゲームっぽい" スタイルではないものを求めていた。
- Nuklear の即時モード UI から始めたが、非常に制限が多く、カスタマイズが必要なときに扱いづらいと感じた。
- UI レイアウトエンジンに満足できず、状態を保持するという触れ込みにもかかわらず、実際にはハッシュ値ベースで状態を保持していた。
- 昔の UI は職人的に作られていたが、今ではデザインや使いやすさの感覚なしに決められることが多い。
- すでに持っていたさまざまな部品を活用して、自前のライブラリを作り始めた。
このライブラリは何ができるのか?
- Macintosh Toolbox の "マネージャ" のいくつかを備えており、モダンなシステムのように動作する。
- ARGB バッファに "画面" を描画するよう設計されており、必要な場所にコピーできる。
- ライブラリは "無効" 領域を追跡し、必要な部分だけを再描画することでオーバードローを最小化する。
オリジナルとどう違うのか?
- 見た目は MacOS 8/9 から出発しているが、すべてのグレースケールを取り除いている。
- API の面では完全に非同期で、オリジナルのように必要なときにウィンドウや GrafPort に描画することはできない。
- すべては mui_window または mui_control で構成される。
ウィンドウマネージャ
- ウィンドウを作成して描画できる。
- 最大 15 個の "レイヤー" を持ち、クリッピングなどを行える。
メニューマネージャ
- System 7/8 や GS/OS のように見えるメニューバー、メニュー、チェックマーク、キーボードショートカットなどを提供する。
コントロールマネージャ
- ボタン、チェックボックス、ラジオボタン、スクロールバー(縦)、テキストボックスなどを提供する。
リストマネージャ
- ファイル名を表示するために設計されており、矢印キー、Page Up/Down、スクロールホイールなどを処理できる。
アラート
- "キャンセル" と "OK" ボタンのある典型的なアラートを提供する。
標準ファイル
リソースマネージャ
依存関係は何か?
- 外部依存関係は 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 のようなフレームワークがあり、これらはより幅広い機能とサポートを提供する。
まだコメントはありません。