import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:window_manager/window_manager.dart'; import '../services/catia_provider.dart'; import '../services/window_tray_service.dart'; import '../theme/app_theme.dart'; import 'mini_pill.dart'; /// Pencere çerçevesiz olduÄŸu için sürüklenebilir kendi title bar'ımızı /// çiziyoruz: uygulama adı + minimize/kapat (tray'e küçültme). class WindowChrome extends StatelessWidget implements PreferredSizeWidget { const WindowChrome({super.key}); @override Size get preferredSize => const Size.fromHeight(30); @override Widget build(BuildContext context) { return DragToMoveArea( child: Container( height: 30, padding: const EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration( color: AppColors.surface, border: Border(bottom: BorderSide(color: AppColors.border)), ), child: Row( children: [ Icon(Icons.precision_manufacturing, size: 13, color: AppColors.accent), const SizedBox(width: 6), Text( 'FikoCATIA', style: TextStyle( color: AppColors.textPrimary, fontWeight: FontWeight.w700, fontSize: 11, ), ), const Spacer(), // 🧰 Palet (D9 (4)): ayrı, ODAK ÇALMAYAN alt pencereyi aç/kapat. // Açıkken vurgulu çizilir (turuncu deÄŸil: tema accent rengi). Builder(builder: (context) { final provider = context.watch(); return _ChromeButton( emoji: '🧰', tooltip: provider.paletteVisible ? 'Paleti gizle' : 'Komut paletini göster', color: provider.paletteVisible ? AppColors.accent : null, onTap: provider.togglePalette, ); }), ValueListenableBuilder( valueListenable: WindowTrayService.pinned, builder: (context, pinned, _) => _ChromeButton( icon: pinned ? Icons.push_pin : Icons.push_pin_outlined, tooltip: pinned ? 'Sabit: açık kalır (tıkla, çöz)' : 'Sabitle: sürekli açık kal', color: pinned ? AppColors.accent : null, onTap: () => WindowTrayService.setPinned(!pinned), ), ), _ChromeButton( icon: Icons.remove, tooltip: 'Gizle', onTap: windowManager.hide, ), ], ), ), ); } } class _ChromeButton extends StatelessWidget { final IconData? icon; /// Dolu ise [icon] yerine emoji çizilir (🧰 palet düğmesi). final String? emoji; final VoidCallback onTap; final String? tooltip; final Color? color; const _ChromeButton({ required this.onTap, this.icon, this.emoji, this.tooltip, this.color, }); @override Widget build(BuildContext context) { final button = InkWell( onTap: onTap, borderRadius: BorderRadius.circular(6), child: Padding( padding: const EdgeInsets.all(4), child: emoji != null ? FittedBox( fit: BoxFit.scaleDown, child: Text( emoji!, style: TextStyle( fontSize: 13, // `height` verilmiyor: emoji fontu ~1.4 em yükseklik // ister; `height: 1.0` glifi kirpiyordu. `FittedBox` // 30px basliga sigdirir ama orantili kuculttugu icin // glif butun kalir (ne tasma ne kirpma). color: color, fontFamilyFallback: kEmojiFontFallback, ), ), ) : Icon(icon, size: 13, color: color ?? AppColors.textSecondary), ), ); return tooltip == null ? button : Tooltip( message: tooltip!, waitDuration: const Duration(milliseconds: 500), child: button, ); } }