Skip to content

Latest commit

 

History

History
35 lines (26 loc) · 2.8 KB

File metadata and controls

35 lines (26 loc) · 2.8 KB

GPUI to GoGPU Porting Patterns

本ドキュメントは github.com/longbridge/gpui-component (Rust/GPUI) を github.com/gogpu/gogpu (Go/gogpu/gg) に移植する際の確立済みのパターンを記録する正典(Source of Truth)です。

基本方針

  1. APIの1:1対応: 公開関数名・型名・メソッドシグネチャは、Goの命名規則の範囲内でRust版と1:1に対応させます。
  2. 挙動の一致: hover, focus, click, disabled, open-close などの状態遷移を一致させます。
  3. デザインの一致: shadcn/ui由来のデザイン(マージン、パディング、色、角丸など)を一致させます。

アーキテクチャの差異と対応

GPUIはRustベースのUIフレームワークであり、gogpu/ggはGoベースのイミディエイトモード(Immediate Mode)GUIです。このパラダイムの違いに注意して移植を行います。

1. 状態管理 (State Management)

  • Rust (GPUI): ViewContext, Model, Entity などのリアクティブな状態管理を持ちます。
  • Go (gogpu/gg): イミディエイトモードのため、状態は外部またはコンポーネント構造体内部に保持し、毎フレーム Render() やレイアウト関数内で評価します。

2. イベントハンドリング (Event Handling)

  • Rust: cx.on_mouse_down, cx.on_click 等でコールバックを登録。
  • Go: 毎フレームのウィジェット描画時に gg.Event(...)gg.Clicked() 等をチェックして状態を更新します。

3. オーバーレイと座標計算 (Overlays & Coordinates)

【重要】(AGENTS.md ルール4) オーバーレイ(ドロップダウン、ポップオーバー、ツールチップ)の座標計算において、「開いた瞬間の座標を1度だけ計算してキャッシュする」実装は禁止されています。 アン欠となるウィジェットの現在のレイアウト位置を 毎フレーム再計算 してから描画してください。これがスクロール追従バグを防ぐための必須要件です。

コンポーネントの実装パターン

(※ここに各コンポーネントごとの具体的な実装パターンを随時追記していきます)

基本コンポーネント (Button, Input など)

  • gogpu/gg の標準のボタンスタイルや入力フィールドをラップし、shadcn/ui のテーマ情報を適用します。
  • カスタム描画が必要な場合は gg.Draw... を用いてピクセルパーフェクトに再現します。

テスト要件

  • ゴールデン画像diffテスト: 見た目が完全に一致するかを画像単位で検証。
  • 合成入力イベントテスト: hover, focus, click 等の状態遷移を単体テストで担保します。