2 ポイント 投稿者 GN⁺ 2024-04-02 | まだコメントはありません。 | WhatsAppで共有

これはいったい何か?

  • 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.cmui_widgets_demo.c を修正して使うのが最もよい。
  • mui_widgets_demo.so をプラグインとして読み込み、変更が検出されると自動で再読み込みする。

FAQ!

  • ダークモード、テーマ、透明ウィンドウ、キューブ効果、メニューのスティッキー、最新のトレンディなツールやフレームワーク、新しい言語バインディング、Wayland サポートなどは提供しない。

GN⁺の意見

  • このライブラリは、古典的な Macintosh UI を現代的なシステム向けに再創造する興味深いプロジェクト。開発者に過去の UI デザインへの郷愁を呼び起こすかもしれない。
  • 非同期 UI ライブラリは現代的なアプリケーション開発により適しており、このライブラリはそうしたモダンなアプローチを採っている。
  • このライブラリは、特にリソース効率を重視する開発者にとって有用かもしれない。オーバードローを最小化し、必要な部分だけを再描画する機能は、性能最適化に役立つ可能性がある。
  • ただし、このライブラリはダークモードやテーマ対応のような現代的機能を提供しないため、すべての開発者の要件を満たすわけではないかもしれない。
  • 類似の機能を提供するモダンな UI ライブラリとしては、Qt、GTK、あるいは Electron のようなフレームワークがあり、これらはより幅広い機能とサポートを提供する。

まだコメントはありません。

まだコメントはありません。