構成レイヤー
1. 概要 (Overview)
PDF Note Workspace は、Win32 API と C++17 で実装された高性能・純ローカル・非破壞デスクトップアプリケーションです。
外部のフレームワーク(Qt, Electron, .NET)を使用せず、直接 Windows API とネイティブ描画モジュール(GDI/GDI+)で統合されています。
2. 階層構造 (Layer Hierarchy)
[Main Frame / Splitter / Menu / Dialogs]PDF View Controller
[PDFium / Annot Layer / GDI+]
[Main Frame / Splitter / Menu / Dialogs]Note Editor Controller
[md4c Parser / Text Canvas]
[PDFium / Annot Layer / GDI+]Core Data & Workspace
[Document Model / Stage / Backup / Undo-Redo]
[md4c Parser / Text Canvas]Core Data & Workspace
[Document Model / Stage / Backup / Undo-Redo]
[Document Model / Stage / Backup / Undo-Redo]Persistence & File I/O
[.clrop (JSON) / .clro (MD) / Atomic Writer]
レヤーと役割
1. Win32 Window / Application Layer (src/main.cpp, src/ui/, src/app/):
- WinMain, メインウィンドウメッセージループ(WndProc)。
- ウィンドウレイアウト splitter(左右分割表示)、テーマ切り替え(Light/Dark)。
- キーボードショートカット・ダイアログ管理。
2. PDF View & Annotation Layer (src/pdf_view/, src/clrop/):
- PDFium ライブラリを用いた PDF ページのレンダリングとズーム・スクロール。
- フリーハンドペン、ハイライト、テキスト、図形注釈のベクター描画 canvas。
- インタラクティブな注釈選択、移動、プロパティ変更、リアルタイム描画。
3. Note Editor Layer (src/note_view/):
- .clro や .md などのテキスト/Markdown ノート編集。
- md4c ライブラリを使用した高速 Markdown パースとリアルタイムリッチ表示。
- 簡易 Mermaid 図表や TeX 数式プレビュー描画。
4. Workspace & Stage Manager (src/workspace/, src/file_output/):
- 開かれている PDF、注釈、ノート、表示位置の一括状態管理。
- 編集途中のデータを安全に一時保管する stage ガード機構。
- 操作の無制限 Undo / Redo スタック。
5. Persistence & Atomic I/O (src/core/atomic_write.h, src/clrop/):
- 注釈の .clrop (JSON) パース・シリアライズ。
- atomic_write::AtomicWriteUtf8 / AtomicWriteBytes による安全な置換処理。
- パスと書込先は各呼び出し元で検証し、失敗時に元ファイルを損なわないことを確認する。
3. スレッドと制御フロー (Threading & Control Flow)
- メイン UI スレッド:
- メッセージループ、WM_PAINT 描画、ユーザー入力レスポンスはすべてメイン UI スレッドで処理されます。
- 同期ブロック処理(Future.get() やデッドロックを招くロック)はメインスレッドで禁止されています。
- ローカルバックグラウンド処理:
- DOCX/PPTX から PDF への変換時(通常版)など重いローカル外部処理のみ、別プロセス(同梱 LibreOffice)へ非同期委託されます。外部通信は発生しません。
4. モジュール間参照ルール
src/storage/などの低層モジュールはsrc/ui/などの GUI モジュールへ依存してはならない。- すべてのデータ書き込み処理は
src/storage/のアトミックライターを経由しなければならない。