Fixes for GTK - still wrong

This commit is contained in:
2026-01-24 06:13:13 +00:00
parent 38c48fc99f
commit f1e3630d1b
11 changed files with 845 additions and 41 deletions

View File

@@ -63,8 +63,10 @@ public static class LinuxDialogService
public static void DrawDialogsOnly(SKCanvas canvas, SKRect bounds)
{
Console.WriteLine($"[LinuxDialogService] DrawDialogsOnly: {_activeDialogs.Count} dialogs, IsDarkMode={SkiaTheme.IsDarkMode}");
foreach (var dialog in _activeDialogs)
{
Console.WriteLine($"[LinuxDialogService] Drawing dialog: IsVisible={dialog.IsVisible}, Opacity={dialog.Opacity}");
dialog.Measure(new Size(bounds.Width, bounds.Height));
dialog.Arrange(new Rect(bounds.Left, bounds.Top, bounds.Width, bounds.Height));
dialog.Draw(canvas);

View File

@@ -22,17 +22,17 @@ public class SkiaAlertDialog : SkiaView
private bool _cancelHovered;
private bool _acceptHovered;
// Dialog styling - using SkiaTheme for MAUI-compliant theming
private static readonly SKColor OverlayColor = SkiaTheme.Overlay50SK;
private static readonly SKColor DialogBackground = SkiaTheme.BackgroundWhiteSK;
private static readonly SKColor TitleColor = SkiaTheme.TextPrimarySK;
private static readonly SKColor MessageColor = SkiaTheme.TextSecondarySK;
private static readonly SKColor ButtonColor = SkiaTheme.PrimarySK;
private static readonly SKColor ButtonHoverColor = SkiaTheme.PrimaryDarkSK;
private static readonly SKColor ButtonTextColor = SkiaTheme.BackgroundWhiteSK;
private static readonly SKColor CancelButtonColor = SkiaTheme.ButtonCancelSK;
private static readonly SKColor CancelButtonHoverColor = SkiaTheme.ButtonCancelHoverSK;
private static readonly SKColor BorderColor = SkiaTheme.BorderLightSK;
// Dialog styling - theme-aware colors (evaluated at draw time)
private static SKColor OverlayColor => SkiaTheme.Overlay50SK;
private static SKColor DialogBackground => SkiaTheme.CurrentSurfaceSK;
private static SKColor TitleColor => SkiaTheme.CurrentTextSK;
private static SKColor MessageColor => SkiaTheme.IsDarkMode ? SkiaTheme.Gray400SK : SkiaTheme.TextSecondarySK;
private static SKColor ButtonColor => SkiaTheme.PrimarySK;
private static SKColor ButtonHoverColor => SkiaTheme.PrimaryDarkSK;
private static SKColor ButtonTextColor => SKColors.White;
private static SKColor CancelButtonColor => SkiaTheme.IsDarkMode ? SkiaTheme.Gray600SK : SkiaTheme.ButtonCancelSK;
private static SKColor CancelButtonHoverColor => SkiaTheme.IsDarkMode ? SkiaTheme.Gray700SK : SkiaTheme.ButtonCancelHoverSK;
private static SKColor BorderColor => SkiaTheme.CurrentBorderSK;
private const float DialogWidth = 400;
private const float DialogPadding = 24;
@@ -61,6 +61,9 @@ public class SkiaAlertDialog : SkiaView
protected override void OnDraw(SKCanvas canvas, SKRect bounds)
{
var app = Application.Current;
Console.WriteLine($"[SkiaAlertDialog] OnDraw: app={app != null}, UserAppTheme={app?.UserAppTheme}, RequestedTheme={app?.RequestedTheme}, IsDarkMode={SkiaTheme.IsDarkMode}, DialogBg={DialogBackground}");
// Draw semi-transparent overlay covering entire screen
using var overlayPaint = new SKPaint
{

View File

@@ -12,15 +12,13 @@ public class SkiaContextMenu : SkiaView
private int _hoveredIndex = -1;
private SKRect[] _itemBounds = Array.Empty<SKRect>();
private static readonly SKColor MenuBackground = SkiaTheme.BackgroundWhiteSK;
private static readonly SKColor MenuBackgroundDark = SkiaTheme.DarkBackgroundSK;
private static readonly SKColor ItemHoverBackground = SkiaTheme.PrimarySelectionSK;
private static readonly SKColor ItemHoverBackgroundDark = SkiaTheme.DarkHoverSK;
private static readonly SKColor ItemTextColor = SkiaTheme.TextPrimarySK;
private static readonly SKColor ItemTextColorDark = SkiaTheme.DarkTextSK;
private static readonly SKColor DisabledTextColor = SkiaTheme.TextDisabledSK;
private static readonly SKColor SeparatorColor = SkiaTheme.Gray300SK;
private static readonly SKColor ShadowColor = SkiaTheme.Shadow25SK;
// Theme-aware colors (evaluated at draw time)
private static SKColor MenuBackground => SkiaTheme.CurrentSurfaceSK;
private static SKColor ItemHoverBackground => SkiaTheme.IsDarkMode ? SkiaTheme.DarkHoverSK : SkiaTheme.PrimarySelectionSK;
private static SKColor ItemTextColor => SkiaTheme.CurrentTextSK;
private static SKColor DisabledTextColor => SkiaTheme.TextDisabledSK;
private static SKColor SeparatorColor => SkiaTheme.IsDarkMode ? SkiaTheme.Gray600SK : SkiaTheme.Gray300SK;
private static SKColor ShadowColor => SkiaTheme.Shadow25SK;
private const float MenuPadding = 4f;
private const float ItemHeight = 32f;
@@ -29,14 +27,12 @@ public class SkiaContextMenu : SkiaView
private const float CornerRadius = 4f;
private const float MinWidth = 120f;
private bool _isDarkTheme;
public SkiaContextMenu(float x, float y, List<ContextMenuItem> items, bool isDarkTheme = false)
{
_x = x;
_y = y;
_items = items;
_isDarkTheme = isDarkTheme;
// isDarkTheme parameter kept for API compatibility but ignored - we use SkiaTheme.IsDarkMode instead
IsFocusable = true;
}
@@ -73,7 +69,7 @@ public class SkiaContextMenu : SkiaView
// Draw background
using (var bgPaint = new SKPaint
{
Color = _isDarkTheme ? MenuBackgroundDark : MenuBackground,
Color = MenuBackground,
IsAntialias = true
})
{
@@ -120,7 +116,7 @@ public class SkiaContextMenu : SkiaView
{
using (var hoverPaint = new SKPaint
{
Color = _isDarkTheme ? ItemHoverBackgroundDark : ItemHoverBackground,
Color = ItemHoverBackground,
IsAntialias = true
})
{
@@ -131,7 +127,7 @@ public class SkiaContextMenu : SkiaView
// Draw text
using (var textPaint = new SKPaint
{
Color = !item.IsEnabled ? DisabledTextColor : (_isDarkTheme ? ItemTextColorDark : ItemTextColor),
Color = !item.IsEnabled ? DisabledTextColor : ItemTextColor,
TextSize = 14f,
IsAntialias = true,
Typeface = SKTypeface.Default

View File

@@ -322,8 +322,23 @@ public static class SkiaTheme
/// <summary>
/// Returns true if dark mode is currently active.
/// Checks UserAppTheme first, falls back to system RequestedTheme.
/// </summary>
public static bool IsDarkMode => Application.Current?.UserAppTheme == AppTheme.Dark;
public static bool IsDarkMode
{
get
{
var app = Application.Current;
if (app == null) return false;
// If user explicitly set a theme, use that
if (app.UserAppTheme != AppTheme.Unspecified)
return app.UserAppTheme == AppTheme.Dark;
// Otherwise use system theme
return app.RequestedTheme == AppTheme.Dark;
}
}
/// <summary>
/// Gets the appropriate button background color for the current theme.