#pragma once // CEF yardım görüntüleyici — OSR (windowless): CEF pencere AÇMAZ, pikselleri OnPaint ile // verir; yardim_penceresi bunu Vulkan dokusuna basıp ImGui penceresi İÇİNDE çizer. // YALNIZ FIKO_CEF derlemesinde derlenir. CEF tipleri buraya SIZMAZ (yalın imza). // // İş modeli: multi_threaded_message_loop=FALSE + her kare yardimCefPompa(). // Böylece OnPaint ve fare olayları ANA THREAD'de koşar → mutex/PostTask YOK, dokuyu // doğrudan yükleyebiliriz (CefBrowserHost metotları UI thread'i ister). #include #include #include namespace fiko { // GPU-hızlandırma (shared texture / OnAcceleratedPaint): CefInitialize'DAN ÖNCE // ayarlanmalı — command-line switch'leri (GPU compositing) init'te sabitlenir, sonradan // değiştirmek CEF yeniden başlatma ister. yardimCefBaslat okur. void yardimCefGpuHizliAyarla(bool acik); bool yardimCefGpuHizli(); // Accelerated OSR köprüsü: OnAcceleratedPaint bu kancayı ÇAĞIRIR (D3D11 shared HANDLE + // boyut). Kanca İÇİNDE (handle geçerliyken, keyed-mutex yok) GPU-GPU kopya yapılmalı; // true dönerse kopya başarılı. Uygulama katmanı (yardim_penceresi) DinamikDoku'ya köprüler. void yardimCefPaylasimKanca(std::function fn); // Alt-süreç kancası: CefExecuteProcess. >=0 → CEF alt-süreci, çağıran o kodu döndürüp çıkar. int yardimCefAltSurec(HINSTANCE hInst); void yardimCefBaslat(HINSTANCE hInst); // CefInitialize (ana süreçte bir kez) void yardimCefBitir(); // CefShutdown void yardimCefPompa(); // her kare: CefDoMessageLoopWork // Dokümanı OSR tarayıcıda aç (mutlak dosya yolu) + paneli görünür yap. void yardimCefAc(const std::string& dosyaYolu); bool yardimCefAcikMi(); // panel görünür mü void yardimCefKapat(); // paneli gizle (tarayıcı yaşar) bool* yardimCefAcikBayrak(); // ImGui pencere kapatma düğmesi için // Panel boyutu bildir (değişirse CEF'e WasResized). void yardimCefBoyut(int g, int y); // CEF'i yeniden paint'e zorla (GPU-hızlı yolda kaçan ilk paint kurtarma). void yardimCefYenile(); // Teşhis: hangi paint yolu kaç kez çağrıldı (accel = OnAcceleratedPaint, paint = OnPaint // software, kopyaOk = başarılı GPU kopya). Panel boşken hangi yolun çalıştığını gösterir. void yardimCefTeshis(int* accel, int* paint, int* kopyaOk); // GPU-hızlı yol çalışmadıysa (bu CEF/makinede shared texture yok) SOFTWARE'e düş: browser'ı // software OSR olarak yeniden açar. GPU modda paint gelmeyince otomatik çağrılır. void yardimCefSoftwareGec(); // Yeni kare var mı? Varsa rgba/g/y doldurulur ve bayrak temizlenir (panel yükler). bool yardimCefKareAl(const unsigned char** rgba, int* g, int* y); // Fare/tuş durumu → CefMouseEvent.modifiers. KRİTİK: sürükleme (scrollbar/seçim) için // hareket olaylarında basılı düğme bayrağı ŞART; yoksa CEF "basılı değil" sanar ve // scrollbar tutulup sürüklenemez (07-17 bulundu). CEF tipleri header'a sızmasın diye POD. struct YardimFareDurum { bool sol = false, sag = false, orta = false; bool shift = false, ctrl = false, alt = false; }; // Fare olaylarını CEF'e ilet (panel-yerel piksel koordinatı). void yardimCefFareHareket(int x, int y, bool ayrildi, const YardimFareDurum& d); void yardimCefFareTik(int x, int y, bool sagMi, bool birakildi, int tikSayi, const YardimFareDurum& d); void yardimCefFareTeker(int x, int y, int deltaX, int deltaY, const YardimFareDurum& d); void yardimCefOdak(bool odakli); } // namespace fiko