Fixes for GTK - still wrong
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user