Merge pull request #911 from Denny09310/develop

feat: updated 'TitleBarOverlay' property to be passed as object
This commit is contained in:
Florian Rappl
2025-11-08 16:54:35 +01:00
committed by GitHub
8 changed files with 80 additions and 8 deletions

View File

@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using ElectronNET.Converter;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel;
@@ -216,10 +217,16 @@ namespace ElectronNET.API.Entities
public TitleBarStyle TitleBarStyle { get; set; }
/// <summary>
/// When using a frameless window this can be used to indicate if the
/// standard control buttons should be shown. Default is false.
/// Configures the window's title bar overlay when using a frameless window.
/// Can be either:
/// - false: No title bar overlay.
/// - true: Enables the default title bar overlay.
/// - An object defining custom overlay options (such as height, color, etc.).
///
/// Default is false.
/// </summary>
public bool TitleBarOverlay { get; set; }
[JsonConverter(typeof(TitleBarOverlayConverter))]
public TitleBarOverlay TitleBarOverlay { get; set; }
/// <summary>
/// Shows the title in the tile bar in full screen mode on macOS for all

View File

@@ -0,0 +1,22 @@
namespace ElectronNET.API.Entities;
public class TitleBarOverlay
{
private readonly bool? _value;
public TitleBarOverlay()
{
}
private TitleBarOverlay(bool value) : this() => _value = value;
public string Color { get; set; }
public double Height { get; set; }
public string SymbolColor { get; set; }
public static implicit operator bool?(TitleBarOverlay titleBarOverlay) => titleBarOverlay?._value;
public static implicit operator TitleBarOverlay(bool value) => new(value);
}

View File

@@ -0,0 +1,43 @@
using ElectronNET.API.Entities;
using Newtonsoft.Json;
using System;
namespace ElectronNET.Converter;
public class TitleBarOverlayConverter : JsonConverter<TitleBarOverlay>
{
public override TitleBarOverlay ReadJson(JsonReader reader, Type objectType, TitleBarOverlay existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Boolean)
{
return (bool)reader.Value;
}
else if (reader.TokenType == JsonToken.StartObject)
{
return serializer.Deserialize<TitleBarOverlay>(reader);
}
else
{
throw new JsonSerializationException("Invalid value for TitleBarOverlay. Expected true, false, or an object.");
}
}
public override void WriteJson(JsonWriter writer, TitleBarOverlay value, JsonSerializer serializer)
{
if (value is null)
{
writer.WriteUndefined();
return;
}
var @bool = (bool?)value;
if (@bool.HasValue)
{
writer.WriteValue(@bool.Value);
}
else
{
serializer.Serialize(writer, value);
}
}
}