# CEF (Chromium Embedded Framework) Entegrasyonu — Yardım Görüntüleyici

Durum: **✅ ENTEGRE EDİLDİ (2026-07-17) — derleme/link/runtime yeşil, RUNTIME TEST bekliyor.**
`FIKO_CEF=ON` iken `yardimAc()` dokümanı gömülü CEF penceresinde açar; kapalıyken
sistem tarayıcısında (ShellExecute). Çağıran kod (WTEC "📖 Yardım" butonu) değişmez.

## Kurulu yapı
- **SDK:** `D:/__sistem__/ProgramFiles/cef/cef_binary_150.0.11+gb887805+chromium-150.0.7871.115_windows64`
  (CEF 150 stable, standard). sha1 doğrulandı. Python `tarfile` ile açıldı (bsdtar bz2 filtresi yok).
- **Wrapper:** `build_md/libcef_dll_wrapper/libcef_dll_wrapper.lib` — **/MD** ile derlendi
  (`-DCEF_RUNTIME_LIBRARY_FLAG=/MD`, fikocad ile aynı runtime — KRİTİK, /MT olsa link kırılır).
- **Kod:** `uygulama/fikocad/yardim_cef.{hpp,cpp}` (client + init/shutdown/ac), `main.cpp`
  (alt-süreç `CefExecuteProcess` EN BAŞTA + `CefInitialize` MT + `CefShutdown`),
  `yardim.cpp` (`#ifdef FIKO_CEF` yönlendirme). Mimari: **multi_threaded_message_loop=true**
  → CEF kendi UI thread'inde, ana Vulkan render döngüsüne DOKUNULMADI.
- **CMake:** `uygulama/fikocad/CMakeLists.txt` içinde `option(FIKO_CEF)` + link + runtime kopya.
- **Runtime kopya:** libcef.dll, chrome_elf.dll, libEGL/GLESv2, d3dcompiler_47, dxcompiler,
  dxil, v8_context_snapshot.bin, bootstrap*.exe → exe yanına. Resources CefSettings ile
  SDK'dan gösterilir (kopya yok). ⚠️ **`vulkan-1.dll` + `vk_swiftshader*` KOPYALANMAZ** —
  fikocad'ın Vulkan loader'ıyla çakışma riski (CEF Vulkan yerine ANGLE/D3D'ye düşer, doküman için yeter).

## ⏳ RUNTIME TEST (kullanıcı)
`-DFIKO_CEF=ON` ile derle, fikocad'ı aç, WTEC panelde "📖 Yardım" → CEF penceresi açılmalı,
`diagonal-kafa.html` görünmeli. İzle: (1) ana pencere Vulkan'ı bozulmadı mı, (2) CEF penceresi
render ediyor mu, (3) kapanışta temiz mi (CefShutdown). Sorun olursa `fikocad.log`.

## 1) SDK indir (bir kez)
- Kaynak: https://cef-builds.spotifycdn.com/index.html → **Windows 64-bit · Standard Distribution**
- **Ücretsiz codec** yeterli (yardım dokümanları WebM/VP9 + Opus kullanır → varsayılan
  build zaten oynatır; "proprietary_codecs" build'ine GEREK YOK).
- Aç: `D:/__sistem__/ProgramFiles/cef/` (örnek `CEF_ROOT`).

## 2) libcef_dll_wrapper'ı derle
CEF SDK içinde CMake ile:
```
cmake -S %CEF_ROOT% -B %CEF_ROOT%\build -G Ninja
cmake --build %CEF_ROOT%\build --target libcef_dll_wrapper --config Release
```

## 3) CMake seçeneği (fikatia-local/CMakeLists.txt köküne)
```cmake
option(FIKO_CEF "Yardım için gömülü CEF görüntüleyici" OFF)
if(FIKO_CEF)
  set(CEF_ROOT "D:/__sistem__/ProgramFiles/cef" CACHE PATH "CEF SDK kökü")
  target_compile_definitions(fikocad PRIVATE FIKO_CEF)
  target_include_directories(fikocad PRIVATE ${CEF_ROOT})
  target_link_libraries(fikocad PRIVATE
    ${CEF_ROOT}/Release/libcef.lib
    ${CEF_ROOT}/build/libcef_dll_wrapper/Release/libcef_dll_wrapper.lib)
endif()
```
Derleme: `cmake -S . -B insa\Release -DFIKO_CEF=ON` sonra normal build.

## 4) Alt-süreç (tek-exe)
`main()`'in EN BAŞINDA (pencere/Vulkan'dan ÖNCE):
```cpp
#ifdef FIKO_CEF
  CefMainArgs args(GetModuleHandle(nullptr));
  int kod = CefExecuteProcess(args, nullptr, nullptr);
  if (kod >= 0) return kod;   // alt-süreç → burada biter
#endif
```
Ardından `CefInitialize` (multi_threaded_message_loop=false), her karede
`CefDoMessageLoopWork()`, kapanışta `CefShutdown()`.

## 5) yardim.cpp — CEF gövdesi (SDK gelince FIKO_CEF arkasına)
`yardimAc()` içindeki ShellExecute çağrısını şuna sar:
```cpp
#ifdef FIKO_CEF
  yardimAcCef(tam.wstring());   // windowed top-level CefBrowser, file:/// yükler
#else
  ShellExecuteW(nullptr, L"open", tam.wstring().c_str(), nullptr, nullptr, SW_SHOWNORMAL);
#endif
```
`yardimAcCef`: `CefWindowInfo` top-level → `CefBrowserHost::CreateBrowser(info, client,
"file:///" + yol, settings, ...)`. Basit `CefClient` + `CefLifeSpanHandler` yeter.
Panel-içi (gömülü) istenirse `SetAsWindowless` + `CefRenderHandler::OnPaint` → Vulkan
texture → `ImGui::Image` (WTEC kafa `ViewportHedef` kalıbı).

## 6) Dağıtım (runtime yanına kopyala)
`libcef.dll`, `chrome_elf.dll`, `*.bin`, `icudtl.dat`, `Resources/`, `locales/`,
`v8_context_snapshot.bin` → `fikocad.exe` yanına. Ayrıca Chromium lisans/atıf
metinlerini (`about:credits`) `licenses.txt` olarak pakete koy.

## Lisans (özet)
CEF = BSD-3; Chromium karışık permissive/LGPL/MPL → ticari/kapalı üründe sorun yok.
Şart: DLL'i dinamik bırak (CEF zaten öyle) + lisans metinlerini paketle. WebM/VP9 +
Opus patentsiz → codec royalty yok. H.264/AAC KULLANMA (patentli).
