using System; using RGB.NET.Core; using RGB.NET.Devices.Logitech.Native; namespace RGB.NET.Devices.Logitech; /// /// Represents the update-queue performing updates for logitech zone devices. /// public sealed class LogitechZoneUpdateQueue : UpdateQueue { #region Properties & Fields private readonly LogitechDeviceType _deviceType; #endregion #region Constructors /// /// Initializes a new instance of the class. /// /// The update trigger used by this queue. /// The tpye of the device this queue is updating. public LogitechZoneUpdateQueue(IDeviceUpdateTrigger updateTrigger, LogitechDeviceType deviceType) : base(updateTrigger) { this._deviceType = deviceType; } #endregion #region Methods /// protected override bool Update(ReadOnlySpan<(object key, Color color)> dataSet) { try { _LogitechGSDK.LogiLedSetTargetDevice(LogitechDeviceCaps.All); foreach ((object key, Color color) in dataSet) { int zone = (int)key; _LogitechGSDK.LogiLedSetLightingForTargetZone(_deviceType, zone, (int)MathF.Round(color.R * 100), (int)MathF.Round(color.G * 100), (int)MathF.Round(color.B * 100)); } return true; } catch (Exception ex) { LogitechDeviceProvider.Instance.Throw(ex); } return false; } #endregion }