#include "fiko/ui/web_skin.hpp" namespace fiko::ui { // Renk/ölçü değerleri CAM Simülasyon penceresinden BİREBİR taşındı (görünüm aynı // kalsın; web rgba(0,127,127,.7) + cyan glow eşleniği). void webSkinKromBasla() { ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.42f, 0.42f, 0.86f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.50f, 1.0f, 1.0f, 0.30f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.94f, 1.0f, 1.0f, 1.0f)); // PopupBg'yi de burada sabitle: aksi halde açılır kutular (combo/popup) // AKTİF TEMANIN rengini kullanır (tema().arka) — "Açık" temada bu açık // renktir ve yukarıdaki sabit neredeyse-beyaz Text ile birleşince metin // görünmez olur (açık zemin + açık yazı). Koyu teal zemin, her temada // WebCam kimliğiyle tutarlı ve okunur kalır. ImGui::PushStyleColor(ImGuiCol_PopupBg, ImVec4(0.02f, 0.16f, 0.17f, 0.97f)); } void webSkinKromBitir() { ImGui::PopStyleColor(4); } namespace { float g_gridAdim = 5.0f; // merkezî ızgara adımı (px) — Ayarlar → Pencere bool g_gridGoster = true; // merkezî ızgara görünürlüğü // Grid renk - varsayılan cyan (150, 255, 255) u8 g_gridRenkR = 150; // kırmızı u8 g_gridRenkG = 255; // yeşil u8 g_gridRenkB = 255; // mavi } // namespace void webSkinGridAdimAyarla(float px) { g_gridAdim = px; } float webSkinGridAdim() { return g_gridAdim; } void webSkinGridGosterAyarla(bool goster) { g_gridGoster = goster; } bool webSkinGridGoster() { return g_gridGoster; } // Grid renk ayarları void webSkinGridRenkAyarla(u8 r, u8 g, u8 b) { g_gridRenkR = r; g_gridRenkG = g; g_gridRenkB = b; } u8 webSkinGridR() { return g_gridRenkR; } u8 webSkinGridG() { return g_gridRenkG; } u8 webSkinGridB() { return g_gridRenkB; } void webSkinGridCiz(ImDrawList* dl, ImVec2 gmin, ImVec2 gmax, float alfaCarpan, float adimIstek) { const float adim = adimIstek > 0.0f ? adimIstek : g_gridAdim; if (!dl || !g_gridGoster || adim <= 1.0f) return; const float ac = alfaCarpan < 0.0f ? 0.0f : (alfaCarpan > 1.0f ? 1.0f : alfaCarpan); const int alfa = (int)(16.0f * ac); if (alfa <= 0) return; // Renk ayarından gelen değerler kullanılsın const ImU32 renk = IM_COL32(g_gridRenkR, g_gridRenkG, g_gridRenkB, alfa); dl->PushClipRect(gmin, gmax, true); for (float x = gmin.x; x < gmax.x; x += adim) dl->AddLine({x, gmin.y}, {x, gmax.y}, renk); for (float y = gmin.y; y < gmax.y; y += adim) dl->AddLine({gmin.x, y}, {gmax.x, y}, renk); dl->PopClipRect(); } void webSkinGovdeBasla(float gridAdim) { // 0/negatif = "ayar verilmedi" → merkezî değer. Pencereler alanı hiç doldurmaz. { // arka plan grid: saf görsel (WindowBg üstü / widget altı) const ImVec2 wp = ImGui::GetWindowPos(); const ImVec2 ws = ImGui::GetWindowSize(); const ImVec2 gmin{wp.x + 1.0f, ImGui::GetCursorScreenPos().y}; // başlık altı const ImVec2 gmax{wp.x + ws.x - 1.0f, wp.y + ws.y - 1.0f}; webSkinGridCiz(ImGui::GetWindowDrawList(), gmin, gmax, 1.0f, gridAdim); } // Web slider/giriş stili: ince pill track + yuvarlak cyan grab. ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 8.0f); ImGui::PushStyleVar(ImGuiStyleVar_GrabRounding, 8.0f); ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 14.0f); ImGui::PushStyleColor(ImGuiCol_FrameBg, IM_COL32(0, 44, 50, 150)); ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, IM_COL32(0, 66, 74, 180)); ImGui::PushStyleColor(ImGuiCol_FrameBgActive, IM_COL32(0, 80, 90, 200)); ImGui::PushStyleColor(ImGuiCol_SliderGrab, IM_COL32(46, 220, 255, 255)); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, IM_COL32(130, 240, 255, 255)); // Widget ailesi: cam teal zeminde okunur cyan buton/sekme/baslik/tik. Pencere // ICINDE push edilir → chrome etkilenmez, tum WebCam pencereleri AYNI kimlikte. ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.18f, 0.86f, 1.00f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.00f, 0.35f, 0.42f, 0.55f)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.00f, 0.55f, 0.66f, 0.75f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.10f, 0.72f, 0.86f, 0.90f)); ImGui::PushStyleColor(ImGuiCol_Tab, ImVec4(0.00f, 0.26f, 0.30f, 0.80f)); ImGui::PushStyleColor(ImGuiCol_TabHovered, ImVec4(0.10f, 0.62f, 0.72f, 0.90f)); ImGui::PushStyleColor(ImGuiCol_TabSelected, ImVec4(0.00f, 0.50f, 0.58f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.38f, 0.44f, 0.65f)); ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.05f, 0.55f, 0.65f, 0.85f)); ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.15f, 0.70f, 0.82f, 0.95f)); } void webSkinGovdeBitir() { ImGui::PopStyleColor(15); // 5 frame/slider + 10 widget ailesi ImGui::PopStyleVar(3); } } // namespace fiko::ui