構成レイヤー

1. 概要 (Overview)

PDF Note Workspace は、Win32 API と C++17 で実装された高性能・純ローカル・非破壞デスクトップアプリケーションです。

外部のフレームワーク(Qt, Electron, .NET)を使用せず、直接 Windows API とネイティブ描画モジュール(GDI/GDI+)で統合されています。

2. 階層構造 (Layer Hierarchy)

フロー図
Win32 Window (GUI)
[Main Frame / Splitter / Menu / Dialogs]
PDF View Controller
[PDFium / Annot Layer / GDI+]
Win32 Window (GUI)
[Main Frame / Splitter / Menu / Dialogs]
Note Editor Controller
[md4c Parser / Text Canvas]
PDF View Controller
[PDFium / Annot Layer / GDI+]
Core Data & Workspace
[Document Model / Stage / Backup / Undo-Redo]
Note Editor Controller
[md4c Parser / Text Canvas]
Core Data & Workspace
[Document Model / Stage / Backup / Undo-Redo]
Core Data & Workspace
[Document Model / Stage / Backup / Undo-Redo]
Persistence & File I/O
[.clrop (JSON) / .clro (MD) / Atomic Writer]

Main Frame, Panel Splitter, Menu, Dialogs, Theme Manager

pdf_controller, note_controller

PDFium Adapter, Annot Layer, GDI+ Canvas

core_workspace

md4c Parser, GDI Text Canvas

core_workspace

Document Model, Stage, Backup, Undo-Redo, Workspace

persistence

.clrop (JSON), .clro (MD), Atomic Writer, Path Safety

true

レヤーと役割

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)

- メッセージループ、WM_PAINT 描画、ユーザー入力レスポンスはすべてメイン UI スレッドで処理されます。

- 同期ブロック処理(Future.get() やデッドロックを招くロック)はメインスレッドで禁止されています。

- DOCX/PPTX から PDF への変換時(通常版)など重いローカル外部処理のみ、別プロセス(同梱 LibreOffice)へ非同期委託されます。外部通信は発生しません。

4. モジュール間参照ルール