From 5f43ccd9266d6b4fbc29beb9e197f0283a90d8c2 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 12 Aug 2023 23:56:50 +0300 Subject: [PATCH 01/18] Flatpak - Change build script executable permission --- flatpak/build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 flatpak/build.sh diff --git a/flatpak/build.sh b/flatpak/build.sh old mode 100644 new mode 100755 From b95b4c8ce03501cc72d9eace64c274cda23c0612 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Sat, 12 Aug 2023 23:57:10 +0300 Subject: [PATCH 02/18] All - Bump version --- NickvisionCavalier.GNOME/Program.cs | 9 +-------- .../Controllers/MainWindowController.cs | 2 +- .../org.nickvision.cavalier.metainfo.xml.in | 11 ++--------- 3 files changed, 4 insertions(+), 18 deletions(-) diff --git a/NickvisionCavalier.GNOME/Program.cs b/NickvisionCavalier.GNOME/Program.cs index 9134c18..3c00646 100644 --- a/NickvisionCavalier.GNOME/Program.cs +++ b/NickvisionCavalier.GNOME/Program.cs @@ -34,14 +34,7 @@ public Program(string[] args) _mainWindow = null; _mainWindowController = new MainWindowController(args); _mainWindowController.AppInfo.Changelog = - @"* Added Cairo backend that can be used in case of problems with OpenGL. To activate, run the program with environment variable CAVALIER_RENDERER=cairo - * All drawing modes except Splitter now have Circle variants - * Added an easter egg (run the program with --help to find how to activate it) - * Added welcome screen that is shown on start until any sound gets detected - * Fixed an issue where the app wasn't drawing correctly with >100% display scaling - * CAVA updated to 0.9.0 - * Pipewire is now used as default input method, you can still change back to Pulse Audio using environment variable CAVALIER_INPUT_METHOD=pulse - * Updated translations (Thanks everyone on Weblate!)"; + @"* Updated translations (Thanks everyone on Weblate!)"; _application.OnActivate += OnActivate; if (File.Exists(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "/org.nickvision.cavalier.gresource")) { diff --git a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs index 75b535d..fe2b5c2 100644 --- a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs +++ b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs @@ -60,7 +60,7 @@ public MainWindowController(string[] args) { Aura = new Aura("org.nickvision.cavalier", "Nickvision Cavalier", _("Cavalier"), _("Visualize audio with CAVA")); Aura.Active.SetConfig("config"); - AppInfo.Version = "2023.8.1-rc1"; + AppInfo.Version = "2023.8.2-next"; AppInfo.SourceRepo = new Uri("https://github.com/NickvisionApps/Cavalier"); AppInfo.IssueTracker = new Uri("https://github.com/NickvisionApps/Cavalier/issues/new"); AppInfo.SupportUrl = new Uri("https://github.com/NickvisionApps/Cavalier/discussions"); diff --git a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in index b05a345..a77a6ec 100644 --- a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in +++ b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in @@ -41,17 +41,10 @@ - + -

Changes compared to 2023.8.0:

+

Changes compared to 2023.8.1:

    -
  • Added Cairo backend that can be used in case of problems with OpenGL. To activate, run the program with environment variable CAVALIER_RENDERER=cairo
  • -
  • All drawing modes except Splitter now have Circle variants
  • -
  • Added an easter egg (run the program with --help to find how to activate it)
  • -
  • Added welcome screen that is shown on start until any sound gets detected
  • -
  • Fixed an issue where the app wasn't drawing correctly with >100% display scaling
  • -
  • CAVA updated to 0.9.0
  • -
  • Pipewire is now used as default input method, you can still change back to Pulse Audio using environment variable CAVALIER_INPUT_METHOD=pulse
  • Updated translations (Thanks everyone on Weblate!)
From c7c6273fa00936b8fcc22414332df2d2401a6743 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Tue, 15 Aug 2023 00:03:43 +0300 Subject: [PATCH 03/18] Shared - Rework renderer --- NickvisionCavalier.Shared/Models/Renderer.cs | 311 ++++++++++--------- 1 file changed, 172 insertions(+), 139 deletions(-) diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index ff1e2b3..3b1c375 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -12,11 +12,16 @@ namespace NickvisionCavalier.Shared.Models; /// public class Renderer { + private enum GradientType + { + Background = 0, + Foreground + } + private delegate void DrawFunc(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint); - private DrawFunc? _drawFunc; - private int _imageIndex; - private SKBitmap? _imageBitmap; - private SKBitmap? _targetBitmap; + private int _bgImageIndex; + private SKBitmap? _bgImageBitmap; + private SKBitmap? _bgTargetBitmap; private float _oldWidth; private float _oldHeight; private float _oldScale; @@ -32,10 +37,10 @@ public class Renderer public Renderer() { Canvas = null; - _imageIndex = -1; + _bgImageIndex = -1; _oldWidth = 0; _oldHeight = 0; - _oldScale = 0.0f; + _oldScale = 0f; } /// @@ -60,7 +65,7 @@ public void Draw(float[] sample, float width, float height) }; if (profile.BgColors.Count > 1) { - bgPaint.Shader = CreateGradient(profile.BgColors, width, height); + bgPaint.Shader = CreateGradient(GradientType.Background, profile.BgColors, width, height); } else { @@ -68,10 +73,10 @@ public void Draw(float[] sample, float width, float height) } Canvas.DrawRect(0, 0, width, height, bgPaint); // Draw image - if (_imageIndex != Configuration.Current.ImageIndex) + if (_bgImageIndex != Configuration.Current.ImageIndex) { - _imageBitmap?.Dispose(); - _targetBitmap?.Dispose(); + _bgImageBitmap?.Dispose(); + _bgTargetBitmap?.Dispose(); if (Configuration.Current.ImageIndex != -1) { var images = new List(); @@ -85,7 +90,7 @@ public void Draw(float[] sample, float width, float height) images.Sort(); if (Configuration.Current.ImageIndex < images.Count) { - _imageBitmap = SKBitmap.Decode(images[Configuration.Current.ImageIndex]); + _bgImageBitmap = SKBitmap.Decode(images[Configuration.Current.ImageIndex]); _oldScale = 0.0f; // To enforce redraw } else @@ -93,22 +98,22 @@ public void Draw(float[] sample, float width, float height) Configuration.Current.ImageIndex = -1; } } - _imageIndex = Configuration.Current.ImageIndex; + _bgImageIndex = Configuration.Current.ImageIndex; } - if (_imageIndex != -1) + if (_bgImageIndex != -1) { if (_oldWidth != width || _oldHeight != height || Math.Abs(_oldScale - Configuration.Current.ImageScale) > 0.01f) { _oldWidth = width; _oldHeight = height; _oldScale = Configuration.Current.ImageScale; - var scale = Math.Max(width / _imageBitmap!.Width, height / _imageBitmap.Height); - var rect = new SKRect(0, 0, _imageBitmap.Width * scale, _imageBitmap.Height * scale); - _targetBitmap?.Dispose(); - _targetBitmap = new SKBitmap((int)(rect.Width * Configuration.Current.ImageScale), (int)(rect.Height * Configuration.Current.ImageScale)); - _imageBitmap.ScalePixels(_targetBitmap, SKFilterQuality.Medium); + var scale = Math.Max(width / _bgImageBitmap!.Width, height / _bgImageBitmap.Height); + var rect = new SKRect(0, 0, _bgImageBitmap.Width * scale, _bgImageBitmap.Height * scale); + _bgTargetBitmap?.Dispose(); + _bgTargetBitmap = new SKBitmap((int)(rect.Width * Configuration.Current.ImageScale), (int)(rect.Height * Configuration.Current.ImageScale)); + _bgImageBitmap.ScalePixels(_bgTargetBitmap, SKFilterQuality.Medium); } - Canvas.DrawBitmap(_targetBitmap, width / 2 - _targetBitmap!.Width / 2f, height / 2 - _targetBitmap.Height / 2f); + Canvas.DrawBitmap(_bgTargetBitmap, width / 2 - _bgTargetBitmap!.Width / 2f, height / 2 - _bgTargetBitmap.Height / 2f); } // Draw foreground width -= Configuration.Current.AreaMargin * 2; @@ -119,15 +124,15 @@ public void Draw(float[] sample, float width, float height) StrokeWidth = Configuration.Current.LinesThickness, IsAntialias = true }; - if (profile.FgColors.Count > 1 && Configuration.Current.Mode != DrawingMode.SpineBox && Configuration.Current.Mode != DrawingMode.SpineCircle && Configuration.Current.Mode != DrawingMode.WaveCircle) + if (profile.FgColors.Count > 1 && Configuration.Current.Mode != DrawingMode.SpineBox && Configuration.Current.Mode != DrawingMode.SpineCircle) { - fgPaint.Shader = CreateGradient(profile.FgColors, width, height, true, Configuration.Current.AreaMargin); + fgPaint.Shader = CreateGradient(GradientType.Foreground, profile.FgColors, width, height, Configuration.Current.AreaMargin); } else { fgPaint.Color = SKColor.Parse(profile.FgColors[0]); } - _drawFunc = Configuration.Current.Mode switch + DrawFunc drawFunc = Configuration.Current.Mode switch { DrawingMode.LevelsBox => DrawLevelsBox, DrawingMode.ParticlesBox => DrawParticlesBox, @@ -143,12 +148,12 @@ public void Draw(float[] sample, float width, float height) }; if (Configuration.Current.Mirror == Mirror.Full) { - _drawFunc(sample, Configuration.Current.Direction, + drawFunc(sample, Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, GetMirrorWidth(width), GetMirrorHeight(height), Configuration.Current.Rotation, fgPaint); - _drawFunc(Configuration.Current.ReverseMirror ? sample.Reverse().ToArray() : sample, GetMirrorDirection(), + drawFunc(Configuration.Current.ReverseMirror ? sample.Reverse().ToArray() : sample, GetMirrorDirection(), (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + GetMirrorX(width), (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + GetMirrorY(height), GetMirrorWidth(width), GetMirrorHeight(height), @@ -156,12 +161,12 @@ public void Draw(float[] sample, float width, float height) } else if (Configuration.Current.Mirror == Mirror.SplitChannels) { - _drawFunc(sample.Take(sample.Length / 2).ToArray(), Configuration.Current.Direction, + drawFunc(sample.Take(sample.Length / 2).ToArray(), Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, GetMirrorWidth(width), GetMirrorHeight(height), Configuration.Current.Rotation, fgPaint); - _drawFunc(Configuration.Current.ReverseMirror ? sample.Skip(sample.Length / 2).ToArray() : sample.Skip(sample.Length / 2).Reverse().ToArray(), GetMirrorDirection(), + drawFunc(Configuration.Current.ReverseMirror ? sample.Skip(sample.Length / 2).ToArray() : sample.Skip(sample.Length / 2).Reverse().ToArray(), GetMirrorDirection(), (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + GetMirrorX(width), (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + GetMirrorY(height), GetMirrorWidth(width), GetMirrorHeight(height), @@ -169,7 +174,7 @@ public void Draw(float[] sample, float width, float height) } else { - _drawFunc(sample, Configuration.Current.Direction, + drawFunc(sample, Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, width, height, @@ -181,16 +186,45 @@ public void Draw(float[] sample, float width, float height) /// /// Create gradient shader /// + /// Gradient type (foreground or background) /// List of colors as strings /// Canvas width /// Canvas height - /// Whether to create gradient for foreground, there's a difference for Circle modes /// Area margin /// Skia Shader - private SKShader CreateGradient(List colorStrings, float width, float height, bool foreground = false, uint margin = 0) + private SKShader CreateGradient(GradientType type, List colorStrings, float width, float height, uint margin = 0) { var colors = colorStrings.Select(c => SKColor.Parse(c)).Reverse().ToArray(); - if (Configuration.Current.Mirror != Mirror.Off && !(foreground && Configuration.Current.Mode > DrawingMode.WaveCircle)) + if (type == GradientType.Foreground) + { + if (Configuration.Current.Mode == DrawingMode.WaveCircle) + { + if (Configuration.Current.Mirror > Mirror.Off) + { + width = GetMirrorWidth(width); + height = GetMirrorHeight(height); + } + var fullRadius = Math.Min(width, height) / 2; + var innerRadius = fullRadius * Configuration.Current.InnerRadius; + var positions = new float[colors.Length]; + for (int i = 0; i < colors.Length; i++) + { + positions[i] = (i + (colors.Length - 1 - i) * innerRadius / fullRadius) / (colors.Length - 1); + } + return SKShader.CreateRadialGradient(new SKPoint(width / 2, height / 2), + fullRadius, colors, positions, SKShaderTileMode.Clamp); + } + if (Configuration.Current.Mode > DrawingMode.WaveCircle) + { + if (Configuration.Current.Mirror > Mirror.Off) + { + width = GetMirrorWidth(width); + height = GetMirrorHeight(height); + } + return SKShader.CreateLinearGradient(new SKPoint(margin, Math.Min(width, height) * Configuration.Current.InnerRadius / 2), new SKPoint(margin, Math.Min(width, height) / 2), colors, SKShaderTileMode.Clamp); + } + } + if (Configuration.Current.Mirror != Mirror.Off) { var mirrorColors = new SKColor[colors.Length * 2]; if (Configuration.Current.Direction == DrawingDirection.BottomTop || Configuration.Current.Direction == DrawingDirection.RightLeft) @@ -202,21 +236,12 @@ private SKShader CreateGradient(List colorStrings, float width, float he colors.CopyTo(mirrorColors, colors.Length); colors = mirrorColors; } - if (Configuration.Current.Mode > DrawingMode.WaveCircle && foreground) - { - if (Configuration.Current.Mirror > Mirror.Off) - { - width = GetMirrorWidth(width); - height = GetMirrorHeight(height); - } - return SKShader.CreateLinearGradient(new SKPoint(margin, Math.Min(width, height) * Configuration.Current.InnerRadius / 2), new SKPoint(margin, Math.Min(width, height) / 2), colors, SKShaderTileMode.Clamp); - } return Configuration.Current.Direction switch { - DrawingDirection.TopBottom => SKShader.CreateLinearGradient(new SKPoint(margin, margin), new SKPoint(margin, height), colors, SKShaderTileMode.Clamp), - DrawingDirection.BottomTop => SKShader.CreateLinearGradient(new SKPoint(margin, height), new SKPoint(margin, margin), colors, SKShaderTileMode.Clamp), - DrawingDirection.LeftRight => SKShader.CreateLinearGradient(new SKPoint(margin, margin), new SKPoint(width, margin), colors, SKShaderTileMode.Clamp), - _ => SKShader.CreateLinearGradient(new SKPoint(width, margin), new SKPoint(margin, margin), colors, SKShaderTileMode.Clamp) + DrawingDirection.TopBottom => SKShader.CreateLinearGradient(new SKPoint(margin, margin + height * Configuration.Current.AreaOffsetY), new SKPoint(margin, height * (1 + Configuration.Current.AreaOffsetY)), colors, SKShaderTileMode.Clamp), + DrawingDirection.BottomTop => SKShader.CreateLinearGradient(new SKPoint(margin, height * (1 + Configuration.Current.AreaOffsetY)), new SKPoint(margin, margin + height * Configuration.Current.AreaOffsetY), colors, SKShaderTileMode.Clamp), + DrawingDirection.LeftRight => SKShader.CreateLinearGradient(new SKPoint(margin + width * Configuration.Current.AreaOffsetX, margin), new SKPoint(width * (1 + Configuration.Current.AreaOffsetX), margin), colors, SKShaderTileMode.Clamp), + _ => SKShader.CreateLinearGradient(new SKPoint(width * (1 + Configuration.Current.AreaOffsetX), margin), new SKPoint(margin + width * Configuration.Current.AreaOffsetX, margin), colors, SKShaderTileMode.Clamp) }; } @@ -243,7 +268,7 @@ private float GetMirrorX(float width) { if (Configuration.Current.Direction == DrawingDirection.LeftRight || Configuration.Current.Direction == DrawingDirection.RightLeft) { - return width / 2.0f + Configuration.Current.AreaMargin; + return width / 2f + Configuration.Current.AreaMargin; } return Configuration.Current.AreaMargin; } @@ -256,7 +281,7 @@ private float GetMirrorY(float height) { if (Configuration.Current.Direction == DrawingDirection.TopBottom || Configuration.Current.Direction == DrawingDirection.BottomTop) { - return height / 2.0f + Configuration.Current.AreaMargin; + return height / 2f + Configuration.Current.AreaMargin; } return Configuration.Current.AreaMargin; } @@ -269,7 +294,7 @@ private float GetMirrorWidth(float width) { if (Configuration.Current.Direction == DrawingDirection.LeftRight || Configuration.Current.Direction == DrawingDirection.RightLeft) { - return width / 2.0f; + return width / 2f; } return width; } @@ -282,7 +307,7 @@ private float GetMirrorHeight(float height) { if (Configuration.Current.Direction == DrawingDirection.TopBottom || Configuration.Current.Direction == DrawingDirection.BottomTop) { - return height / 2.0f; + return height / 2f; } return height; } @@ -398,6 +423,7 @@ private void DrawLevelsBox(float[] sample, DrawingDirection direction, float x, var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var itemWidth = (direction < DrawingDirection.LeftRight ? step : width / 10) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); var itemHeight = (direction < DrawingDirection.LeftRight ? height / 10 : step) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); + using var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { for (var j = 0; j < Math.Floor(sample[i] * 10); j++) @@ -405,40 +431,49 @@ private void DrawLevelsBox(float[] sample, DrawingDirection direction, float x, switch (direction) { case DrawingDirection.TopBottom: - Canvas.DrawRoundRect( - x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + height / 10 * j + height / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + height / 10 * j + height / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + step * (i + Configuration.Current.ItemsOffset) + itemWidth, + y + height / 10 * j + height / 10 * Configuration.Current.ItemsOffset + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.BottomTop: - Canvas.DrawRoundRect( - x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + height / 10 * (9 - j) + height / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + height / 10 * (9 - j) + height / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + step * (i + Configuration.Current.ItemsOffset) + itemWidth, + y + height / 10 * (9 - j) + height / 10 * Configuration.Current.ItemsOffset + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.LeftRight: - Canvas.DrawRoundRect( - x + width / 10 * j + width / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + width / 10 * j + width / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + width / 10 * j + width / 10 * Configuration.Current.ItemsOffset + itemWidth, + y + step * (i + Configuration.Current.ItemsOffset) + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.RightLeft: - Canvas.DrawRoundRect( - x + width / 10 * (9 - j) + width / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + width / 10 * (9 - j) + width / 10 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + width / 10 * (9 - j) + width / 10 * Configuration.Current.ItemsOffset + itemWidth, + y + step * (i + Configuration.Current.ItemsOffset) + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; } } } + Canvas.DrawPath(path, paint); } /// @@ -456,44 +491,54 @@ private void DrawParticlesBox(float[] sample, DrawingDirection direction, float var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var itemWidth = (direction < DrawingDirection.LeftRight ? step : width / 11) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); var itemHeight = (direction < DrawingDirection.LeftRight ? height / 11 : step) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); + using var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { switch (direction) { case DrawingDirection.TopBottom: - Canvas.DrawRoundRect( - x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + height / 11 * 10 * sample[i] + height / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + height / 11 * 10 * sample[i] + height / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + step * (i + Configuration.Current.ItemsOffset) + itemWidth, + y + height / 11 * 10 * sample[i] + height / 11 * Configuration.Current.ItemsOffset + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.BottomTop: - Canvas.DrawRoundRect( - x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + height / 11 * 10 * (1 - sample[i]) + height / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + height / 11 * 10 * (1 - sample[i]) + height / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + step * (i + Configuration.Current.ItemsOffset) + itemWidth, + y + height / 11 * 10 * (1 - sample[i]) + height / 11 * Configuration.Current.ItemsOffset + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.LeftRight: - Canvas.DrawRoundRect( - x + width / 11 * 10 * sample[i] + width / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + width / 11 * 10 * sample[i] + width / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + width / 11 * 10 * sample[i] + width / 11 * Configuration.Current.ItemsOffset + itemWidth, + y + step * (i + Configuration.Current.ItemsOffset) + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; case DrawingDirection.RightLeft: - Canvas.DrawRoundRect( - x + width / 11 * 10 * (1 - sample[i]) + width / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - itemWidth, itemHeight, - itemWidth / 2 * Configuration.Current.ItemsRoundness, itemHeight / 2 * Configuration.Current.ItemsRoundness, - paint); + path.AddRoundRect( + new SKRect( + x + width / 11 * 10 * (1 - sample[i]) + width / 11 * Configuration.Current.ItemsOffset + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), + x + width / 11 * 10 * (1 - sample[i]) + width / 11 * Configuration.Current.ItemsOffset + itemWidth, + y + step * (i + Configuration.Current.ItemsOffset) + itemHeight), + itemWidth / 2 * Configuration.Current.ItemsRoundness, + itemHeight / 2 * Configuration.Current.ItemsRoundness); break; } } + Canvas.DrawPath(path, paint); } /// @@ -509,6 +554,7 @@ private void DrawParticlesBox(float[] sample, DrawingDirection direction, float private void DrawBarsBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; + using var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { if (sample[i] == 0) @@ -518,39 +564,36 @@ private void DrawBarsBox(float[] sample, DrawingDirection direction, float x, fl switch (direction) { case DrawingDirection.TopBottom: - Canvas.DrawRect( + path.AddRect(new SKRect( x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), (Configuration.Current.Filling ? y : y + Configuration.Current.LinesThickness / 2) - 1, - step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - height * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness) + 1, - paint); + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2) + step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), + y + height * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness) + 1)); break; case DrawingDirection.BottomTop: - Canvas.DrawRect( + path.AddRect(new SKRect( x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), y + height * (1 - sample[i]) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - height * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness) + 1, - paint); + x + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2) + step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), + y + height - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness) + 1)); break; case DrawingDirection.LeftRight: - Canvas.DrawRect( + path.AddRect(new SKRect( Configuration.Current.Filling ? x : x + Configuration.Current.LinesThickness / 2, y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - width * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - paint); + x + width * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2) + step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness))); break; case DrawingDirection.RightLeft: - Canvas.DrawRect( + path.AddRect(new SKRect( x + width * (1 - sample[i]) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - width * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), - paint); + x + width * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), + y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2) + step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness))); break; }; } + Canvas.DrawPath(path, paint); } /// @@ -775,52 +818,42 @@ private void DrawWaveCircle(float[] sample, DrawingDirection direction, float x, var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; var radius = fullRadius - innerRadius; - // Modify paint (this mode requires specific paint configuration) + Canvas.Save(); + Canvas.Translate(x, y); paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = Configuration.Current.Filling ? fullRadius - innerRadius : Configuration.Current.LinesThickness; - var colors = Configuration.Current.ColorProfiles[Configuration.Current.ActiveProfile].FgColors.Select(c => SKColor.Parse(c)).Reverse().ToArray(); - var positions = new float[Configuration.Current.ColorProfiles[Configuration.Current.ActiveProfile].FgColors.Count]; - for (int i = 0; i < colors.Length; i++) - { - positions[i] = (i + (colors.Length - 1 - i) * innerRadius / fullRadius) / (colors.Length - 1); - } - paint.Shader = SKShader.CreateRadialGradient(new SKPoint(x + width / 2, y + height / 2), - fullRadius, colors, positions, SKShaderTileMode.Clamp); - // Create path using var path = new SKPath(); path.MoveTo( - x + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + rotation), - y + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + rotation)); + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + rotation), + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + rotation)); for (var i = 0; i < sample.Length - 1; i++) { path.CubicTo( - x + width / 2 + (innerRadius + radius * sample[i]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), - y + height / 2 + (innerRadius + radius * sample[i]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), - x + width / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), - y + height / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), - x + width / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 1) / sample.Length + rotation), - y + height / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 1) / sample.Length + rotation)); + width / 2 + (innerRadius + radius * sample[i]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), + height / 2 + (innerRadius + radius * sample[i]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), + width / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), + height / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 0.5f) / sample.Length + rotation), + width / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (i + 1) / sample.Length + rotation), + height / 2 + (innerRadius + radius * sample[i+1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (i + 1) / sample.Length + rotation)); } path.CubicTo( - x + width / 2 + (innerRadius + radius * sample[^1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), - y + height / 2 + (innerRadius + radius * sample[^1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), - x + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), - y + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), - x + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + rotation), - y + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + rotation)); + width / 2 + (innerRadius + radius * sample[^1]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), + height / 2 + (innerRadius + radius * sample[^1]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * (sample.Length - 0.5f) / sample.Length + rotation), + width / 2 + (innerRadius + radius * sample[0]) * (float)Math.Cos(Math.PI / 2 + rotation), + height / 2 + (innerRadius + radius * sample[0]) * (float)Math.Sin(Math.PI / 2 + rotation)); path.Close(); - // Draw if (Configuration.Current.Filling) { - Canvas.Save(); Canvas.ClipPath(path, SKClipOperation.Intersect, true); - Canvas.DrawCircle(new SKPoint(x + width / 2, y + height / 2), innerRadius + (fullRadius - innerRadius)/ 2, paint); - Canvas.Restore(); + Canvas.DrawCircle(new SKPoint(width / 2, height / 2), innerRadius + (fullRadius - innerRadius)/ 2, paint); } else { Canvas.DrawPath(path, paint); } + Canvas.Restore(); } /// From 7512370cffcf2d400fe54667fb05f7dc85705028 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Wed, 16 Aug 2023 01:02:18 -0400 Subject: [PATCH 04/18] Update CAVA --- flatpak/org.nickvision.cavalier.json | 4 ++-- snap/snapcraft.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flatpak/org.nickvision.cavalier.json b/flatpak/org.nickvision.cavalier.json index 83204fd..87392ad 100644 --- a/flatpak/org.nickvision.cavalier.json +++ b/flatpak/org.nickvision.cavalier.json @@ -52,8 +52,8 @@ { "type" : "git", "url" : "https://github.com/karlstav/cava.git", - "tag" : "0.9.0", - "commit" : "83b4cda8177c780c7895ae67384c2679e84cc0d9" + "tag" : "0.9.1", + "commit" : "81211e9e16302312ee4322a99840c110bce0e13d" } ] }, diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 33b8df4..282a85b 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -18,7 +18,7 @@ parts: cava: #after: [ fftw3f ] source: https://github.com/karlstav/cava.git - source-tag: '0.9.0' + source-tag: '0.9.1' source-depth: 1 build-environment: - CFLAGS: -I/snap/gnome-42-2204-sdk/current/usr/include From 719a6d9f55ef9f07cc576aec45ada23a03ccd3ee Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 28 Aug 2023 14:56:15 -0400 Subject: [PATCH 05/18] Update org.nickvision.cavalier.in --- NickvisionCavalier.Shared/org.nickvision.cavalier.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NickvisionCavalier.Shared/org.nickvision.cavalier.in b/NickvisionCavalier.Shared/org.nickvision.cavalier.in index 07d7503..8066ceb 100644 --- a/NickvisionCavalier.Shared/org.nickvision.cavalier.in +++ b/NickvisionCavalier.Shared/org.nickvision.cavalier.in @@ -5,4 +5,4 @@ then CAVALIER_INPUT_METHOD=${CAVALIER_INPUT_METHOD:-pulse} fi -exec @EXEC@ $@ \ No newline at end of file +exec @EXEC@ "$@" From b9e2942a7e79b54923ae5abbfdef56f5f10ebe23 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Wed, 30 Aug 2023 14:13:45 -0400 Subject: [PATCH 06/18] Update org.nickvision.cavalier.json --- flatpak/org.nickvision.cavalier.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/flatpak/org.nickvision.cavalier.json b/flatpak/org.nickvision.cavalier.json index 87392ad..7eb3a54 100644 --- a/flatpak/org.nickvision.cavalier.json +++ b/flatpak/org.nickvision.cavalier.json @@ -60,7 +60,9 @@ { "name": "blueprint-compiler", "buildsystem": "meson", - "cleanup": [ "*" ], + "cleanup": [ + "*" + ], "sources": [ { "type": "git", From 024089f6daa2dea5fbbff5e1ac1f0d0e4782daf7 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:02:08 +0300 Subject: [PATCH 07/18] All - Foreground image + transparency setting --- .../Blueprints/preferences_dialog.blp | 95 +++++-- .../Blueprints/shortcuts_dialog.blp | 26 +- .../Views/PreferencesDialog.cs | 194 +++++++++++--- .../Controllers/PreferencesViewController.cs | 87 +++++- .../Models/CmdOptions.cs | 28 +- .../Models/Configuration.cs | 28 +- NickvisionCavalier.Shared/Models/Renderer.cs | 252 ++++++++++++++---- 7 files changed, 578 insertions(+), 132 deletions(-) diff --git a/NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp b/NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp index d15ba97..bd86402 100644 --- a/NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp +++ b/NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp @@ -528,6 +528,7 @@ Adw.PreferencesWindow _root { Gtk.Button _addFgColorButton { icon-name: "list-add-symbolic"; + tooltip-text: _("Add foreground color"); styles [ "circular" ] } @@ -549,6 +550,7 @@ Adw.PreferencesWindow _root { Gtk.Button _addBgColorButton { icon-name: "list-add-symbolic"; + tooltip-text: _("Add background color"); styles [ "circular" ] } @@ -562,62 +564,109 @@ Adw.PreferencesWindow _root { } Adw.PreferencesPage { - title: _("Image"); + title: _("Images"); icon-name: "image-x-generic-symbolic"; Gtk.Box { orientation: vertical; + margin-top: 12; + margin-start: 12; + margin-end: 12; + margin-bottom: 12; + spacing: 12; Gtk.Box { - spacing: 6; + Gtk.Box { + Gtk.ToggleButton _bgImgButton { + label: _("Background"); + active: true; + } - Gtk.Button _addImageButton { - halign: start; - margin-top: 12; - margin-start: 12; - margin-end: 12; - margin-bottom: 6; + Gtk.ToggleButton { + label: _("Foreground"); + active: bind _bgImgButton.active bidirectional inverted; + } + + styles ["linked"] + } + Gtk.Separator { + hexpand: true; + + styles ["spacer"] + } + + Gtk.Button _addImageButton { Adw.ButtonContent { label: _("Add Image"); icon-name: "list-add-symbolic"; } } + } - Gtk.Separator { - styles [ "spacer" ] + Gtk.Box { + Gtk.Label { + hexpand: true; + halign: start; + margin-start: 12; + label: _("Scale"); } - Gtk.Label { + Gtk.SpinButton _imgScaleSpin { + valign: center; margin-top: 6; - label: _("Scale"); + margin-start: 6; + margin-end: 6; + margin-bottom: 6; + digits: 2; + adjustment: Gtk.Adjustment { + lower: 0.1; + upper: 1.0; + step-increment: 0.05; + }; } - Gtk.Scale _imageScale { + Gtk.Separator {} + + Gtk.Label { hexpand: true; + halign: start; + margin-start: 12; + label: _("Alpha"); + } + + Gtk.SpinButton _imgAlphaSpin { + valign: center; margin-top: 6; + margin-start: 6; margin-end: 6; + margin-bottom: 6; + digits: 2; adjustment: Gtk.Adjustment { - lower: 0.10; + lower: 0.1; upper: 1.0; step-increment: 0.05; }; } + + styles ["card"] + } + + Gtk.Label { + label: _("Foreground image is only shown with Box drawing modes."); + visible: bind _bgImgButton.active inverted; + + styles ["warning"] } Gtk.Stack _imagesStack { - margin-top: 6; - margin-start: 12; - margin-end: 12; - margin-bottom: 12; - Gtk.StackPage { name: "empty"; child: Adw.StatusPage { vexpand: true; - title: "No Images"; - description: "Add an image to use it in Cavalier."; + title: _("No Images"); + description: _("Add an image to use it in Cavalier."); icon-name: "image-x-generic-symbolic"; }; } @@ -630,10 +679,6 @@ Adw.PreferencesWindow _root { Gtk.FlowBox _imagesFlowBox { valign: start; - margin-top: 6; - margin-start: 6; - margin-end: 6; - margin-bottom: 6; homogeneous: true; min-children-per-line: 3; diff --git a/NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp b/NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp index e58ae39..75bb775 100644 --- a/NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp +++ b/NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp @@ -117,12 +117,32 @@ Gtk.ShortcutsWindow _shortcuts { Gtk.ShortcutsShortcut { title: _("Change Background Image"); - accelerator: "I I"; + accelerator: "1 1"; } Gtk.ShortcutsShortcut { - title: _("Change Image Scale"); - accelerator: "A A"; + title: _("Change Background Image Scale"); + accelerator: "2 2"; + } + + Gtk.ShortcutsShortcut { + title: _("Change Background Image Alpha"); + accelerator: "3 3"; + } + + Gtk.ShortcutsShortcut { + title: _("Change Foreground Image"); + accelerator: "4 4"; + } + + Gtk.ShortcutsShortcut { + title: _("Change Foreground Image Scale"); + accelerator: "5 5"; + } + + Gtk.ShortcutsShortcut { + title: _("Change Foreground Image Alpha"); + accelerator: "6 6"; } } diff --git a/NickvisionCavalier.GNOME/Views/PreferencesDialog.cs b/NickvisionCavalier.GNOME/Views/PreferencesDialog.cs index e735772..9d12d5c 100644 --- a/NickvisionCavalier.GNOME/Views/PreferencesDialog.cs +++ b/NickvisionCavalier.GNOME/Views/PreferencesDialog.cs @@ -14,7 +14,7 @@ namespace NickvisionCavalier.GNOME.Views; /// /// The PreferencesDialog for the application /// -public partial class PreferencesDialog : Adw.PreferencesWindow +public class PreferencesDialog : Adw.PreferencesWindow { private bool _avoidCAVAReload; private bool _removingImages; @@ -65,8 +65,10 @@ public partial class PreferencesDialog : Adw.PreferencesWindow [Gtk.Connect] private readonly Gtk.Grid _colorsGrid; [Gtk.Connect] private readonly Gtk.Button _addFgColorButton; [Gtk.Connect] private readonly Gtk.Button _addBgColorButton; + [Gtk.Connect] private readonly Gtk.ToggleButton _bgImgButton; [Gtk.Connect] private readonly Gtk.Button _addImageButton; - [Gtk.Connect] private readonly Gtk.Scale _imageScale; + [Gtk.Connect] private readonly Gtk.SpinButton _imgScaleSpin; + [Gtk.Connect] private readonly Gtk.SpinButton _imgAlphaSpin; [Gtk.Connect] private readonly Gtk.Stack _imagesStack; [Gtk.Connect] private readonly Gtk.FlowBox _imagesFlowBox; @@ -441,32 +443,114 @@ private PreferencesDialog(Gtk.Builder builder, PreferencesViewController control }; application.AddAction(actPrevProfile); application.SetAccelsForAction("app.prev-profile", new string[] { "p" }); - //Next Image Action - var actNextImage = Gio.SimpleAction.New("next-image", null); - actNextImage.OnActivate += (sender, e) => - { - _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.ImageIndex < _controller.ImagesList.Count - 1 ? _controller.ImageIndex + 2 : 0)); - }; - application.AddAction(actNextImage); - application.SetAccelsForAction("app.next-image", new string[] { "i" }); - //Previous Image Action - var actPrevImage = Gio.SimpleAction.New("prev-image", null); - actPrevImage.OnActivate += (sender, e) => - { - _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.ImageIndex > -1 ? _controller.ImageIndex : _controller.ImagesList.Count)); - }; - application.AddAction(actPrevImage); - application.SetAccelsForAction("app.prev-image", new string[] { "i" }); - // Increase Image Scale - var actIncImgScale = Gio.SimpleAction.New("inc-img-scale", null); - actIncImgScale.OnActivate += (sender, e) => _imageScale.SetValue(_imageScale.GetValue() + 0.1f); - application.AddAction(actIncImgScale); - application.SetAccelsForAction("app.inc-img-scale", new string[] { "a" }); - // Decrease Image Scale - var actDecImgScale = Gio.SimpleAction.New("dec-img-scale", null); - actDecImgScale.OnActivate += (sender, e) => _imageScale.SetValue(_imageScale.GetValue() - 0.1f); - application.AddAction(actDecImgScale); - application.SetAccelsForAction("app.dec-img-scale", new string[] { "a" }); + //Next Background Image Action + var actNextBgImage = Gio.SimpleAction.New("next-bg-image", null); + actNextBgImage.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.BgImageIndex < _controller.ImagesList.Count - 1 ? _controller.BgImageIndex + 2 : 0)); + }; + application.AddAction(actNextBgImage); + application.SetAccelsForAction("app.next-bg-image", new string[] { "1" }); + //Previous Background Image Action + var actPrevBgImage = Gio.SimpleAction.New("prev-bg-image", null); + actPrevBgImage.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.BgImageIndex > -1 ? _controller.BgImageIndex : _controller.ImagesList.Count)!); + }; + application.AddAction(actPrevBgImage); + application.SetAccelsForAction("app.prev-bg-image", new string[] { "exclam" }); + // Increase Background Image Scale + var actIncBgImgScale = Gio.SimpleAction.New("inc-bg-img-scale", null); + actIncBgImgScale.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imgScaleSpin.SetValue(_imgScaleSpin.GetValue() + 0.05f); + }; + application.AddAction(actIncBgImgScale); + application.SetAccelsForAction("app.inc-bg-img-scale", new string[] { "2" }); + // Decrease Background Image Scale + var actDecBgImgScale = Gio.SimpleAction.New("dec-bg-img-scale", null); + actDecBgImgScale.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imgScaleSpin.SetValue(_imgScaleSpin.GetValue() - 0.05f); + }; + application.AddAction(actDecBgImgScale); + application.SetAccelsForAction("app.dec-bg-img-scale", new string[] { "at" }); + // Increase Background Image Alpha + var actIncBgImgAlpha = Gio.SimpleAction.New("inc-bg-img-alpha", null); + actIncBgImgAlpha.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imgAlphaSpin.SetValue(_imgAlphaSpin.GetValue() + 0.05f); + }; + application.AddAction(actIncBgImgAlpha); + application.SetAccelsForAction("app.inc-bg-img-alpha", new string[] { "3" }); + // Decrease Background Image Alpha + var actDecBgImgAlpha = Gio.SimpleAction.New("dec-bg-img-alpha", null); + actDecBgImgAlpha.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(true); + _imgAlphaSpin.SetValue(_imgAlphaSpin.GetValue() - 0.05f); + }; + application.AddAction(actDecBgImgAlpha); + application.SetAccelsForAction("app.dec-bg-img-alpha", new string[] { "numbersign" }); + //Next Foreground Image Action + var actNextFgImage = Gio.SimpleAction.New("next-fg-image", null); + actNextFgImage.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.FgImageIndex < _controller.ImagesList.Count - 1 ? _controller.FgImageIndex + 2 : 0)); + }; + application.AddAction(actNextFgImage); + application.SetAccelsForAction("app.next-fg-image", new string[] { "4" }); + //Previous Background Image Action + var actPrevFgImage = Gio.SimpleAction.New("prev-fg-image", null); + actPrevFgImage.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.FgImageIndex > -1 ? _controller.FgImageIndex : _controller.ImagesList.Count)!); + }; + application.AddAction(actPrevFgImage); + application.SetAccelsForAction("app.prev-fg-image", new string[] { "dollar" }); + // Increase Background Image Scale + var actIncFgImgScale = Gio.SimpleAction.New("inc-fg-img-scale", null); + actIncFgImgScale.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imgScaleSpin.SetValue(_imgScaleSpin.GetValue() + 0.05f); + }; + application.AddAction(actIncFgImgScale); + application.SetAccelsForAction("app.inc-fg-img-scale", new string[] { "5" }); + // Decrease Background Image Scale + var actDecFgImgScale = Gio.SimpleAction.New("dec-fg-img-scale", null); + actDecFgImgScale.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imgScaleSpin.SetValue(_imgScaleSpin.GetValue() - 0.05f); + }; + application.AddAction(actDecFgImgScale); + application.SetAccelsForAction("app.dec-fg-img-scale", new string[] { "percent" }); + // Increase Background Image Alpha + var actIncFgImgAlpha = Gio.SimpleAction.New("inc-fg-img-alpha", null); + actIncFgImgAlpha.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imgAlphaSpin.SetValue(_imgAlphaSpin.GetValue() + 0.05f); + }; + application.AddAction(actIncFgImgAlpha); + application.SetAccelsForAction("app.inc-fg-img-alpha", new string[] { "6" }); + // Decrease Background Image Alpha + var actDecFgImgAlpha = Gio.SimpleAction.New("dec-fg-img-alpha", null); + actDecFgImgAlpha.OnActivate += (sender, e) => + { + _bgImgButton.SetActive(false); + _imgAlphaSpin.SetValue(_imgAlphaSpin.GetValue() - 0.05f); + }; + application.AddAction(actDecFgImgAlpha); + application.SetAccelsForAction("app.dec-fg-img-alpha", new string[] { "asciicircum" }); //Build UI builder.Connect(this); OnCloseRequest += (sender, e) => @@ -785,12 +869,46 @@ private PreferencesDialog(Gtk.Builder builder, PreferencesViewController control _addBgColorButton.OnClicked += async (sender, e) => await AddColorAsync(ColorType.Background); UpdateColorsGrid(); _addImageButton.OnClicked += async (sender, e) => await AddImageAsync(); - _imageScale.OnValueChanged += (sender, e) => _controller.ImageScale = (float)_imageScale.GetValue(); + _bgImgButton.OnToggled += (sender, e) => + { + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex((_bgImgButton.GetActive() ? _controller.BgImageIndex : _controller.FgImageIndex) + 1) ?? _imagesFlowBox.GetChildAtIndex(0)!); + _imgScaleSpin.SetValue(_bgImgButton.GetActive() ? _controller.BgImageScale : _controller.FgImageScale); + _imgAlphaSpin.SetValue(_bgImgButton.GetActive() ? _controller.BgImageAlpha : _controller.FgImageAlpha); + }; + _imgScaleSpin.OnValueChanged += (sender, e) => + { + if (_bgImgButton.GetActive()) + { + _controller.BgImageScale = (float)_imgScaleSpin.GetValue(); + } + else + { + _controller.FgImageScale = (float)_imgScaleSpin.GetValue(); + } + }; + _imgAlphaSpin.OnValueChanged += (sender, e) => + { + if (_bgImgButton.GetActive()) + { + _controller.BgImageAlpha = (float)_imgAlphaSpin.GetValue(); + } + else + { + _controller.FgImageAlpha = (float)_imgAlphaSpin.GetValue(); + } + }; _imagesFlowBox.OnSelectedChildrenChanged += (sender, e) => { if (!_removingImages) { - _controller.ImageIndex = _imagesFlowBox.GetSelectedChildrenIndices()[0] - 1; + if (_bgImgButton.GetActive()) + { + _controller.BgImageIndex = _imagesFlowBox.GetSelectedChildrenIndices()[0] - 1; + } + else + { + _controller.FgImageIndex = _imagesFlowBox.GetSelectedChildrenIndices()[0] - 1; + } } }; // Update view when controller has changed by cmd options @@ -871,8 +989,9 @@ public bool LoadInstantSettings() _autohideHeaderSwitch.SetActive(_controller.AutohideHeader); _reverseSwitch.SetActive(_controller.ReverseOrder); UpdateColorProfiles(); - _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.ImageIndex + 1) ?? _imagesFlowBox.GetChildAtIndex(0)!); - _imageScale.SetValue(_controller.ImageScale); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex((_bgImgButton.GetActive() ? _controller.BgImageIndex : _controller.FgImageIndex) + 1) ?? _imagesFlowBox.GetChildAtIndex(0)!); + _imgScaleSpin.SetValue(_bgImgButton.GetActive() ? _controller.BgImageScale : _controller.FgImageScale); + _imgAlphaSpin.SetValue(_bgImgButton.GetActive() ? _controller.BgImageAlpha : _controller.FgImageAlpha); if (_controller.Hearts) { _spineRow.SetTitle(_("Hearts")); @@ -1060,10 +1179,10 @@ public void UpdateImagesList() if (paths.Count == 0) { _imagesStack.SetVisibleChildName("empty"); - _imageScale.SetSensitive(false); + _imgScaleSpin.SetSensitive(false); return; } - _imageScale.SetSensitive(true); + _imgScaleSpin.SetSensitive(true); _imagesStack.SetVisibleChildName("images"); _removingImages = true; while (_imagesFlowBox.GetChildAtIndex(1) != null) @@ -1078,7 +1197,7 @@ public void UpdateImagesList() image.OnRemoveImage += RemoveImage; _imagesFlowBox.Append(image); } - _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex(_controller.ImageIndex + 1) ?? _imagesFlowBox.GetChildAtIndex(0)!); + _imagesFlowBox.SelectChild(_imagesFlowBox.GetChildAtIndex((_bgImgButton.GetActive() ? _controller.BgImageIndex : _controller.FgImageIndex) + 1) ?? _imagesFlowBox.GetChildAtIndex(0)!); } /// @@ -1102,6 +1221,8 @@ public async Task AddImageAsync() { var file = await dialog.OpenAsync(this); _controller.AddImage(file.GetPath()); + _controller.BgImageIndex = -1; + _controller.FgImageIndex = -1; UpdateImagesList(); } catch { } @@ -1113,7 +1234,8 @@ public async Task AddImageAsync() /// Index of image to remove public void RemoveImage(int index) { - _controller.ImageIndex = -1; + _controller.BgImageIndex = -1; + _controller.FgImageIndex = -1; File.Delete(_controller.ImagesList[index]); UpdateImagesList(); } diff --git a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs index 333018e..1dc02bc 100644 --- a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs @@ -349,21 +349,61 @@ public int ActiveProfile /// /// Index of a background image to load (-1 to not load anything) /// - public int ImageIndex + public int BgImageIndex { - get => Configuration.Current.ImageIndex; + get => Configuration.Current.BgImageIndex; - set => Configuration.Current.ImageIndex = value; + set => Configuration.Current.BgImageIndex = value; } /// /// Background image scale (0.1-1.0, 1.0 - fill the window) /// - public float ImageScale + public float BgImageScale { - get => Configuration.Current.ImageScale; - - set => Configuration.Current.ImageScale = value; + get => Configuration.Current.BgImageScale; + + set => Configuration.Current.BgImageScale = value; + } + + /// + /// Background image transparency (0.1-1.0, 1.0 - fully opaque) + /// + public float BgImageAlpha + { + get => Configuration.Current.BgImageAlpha; + + set => Configuration.Current.BgImageAlpha = value; + } + + /// + /// Index of a foreground image to load (-1 to not load anything) + /// + public int FgImageIndex + { + get => Configuration.Current.FgImageIndex; + + set => Configuration.Current.FgImageIndex = value; + } + + /// + /// Foreground image scale (0.1-1.0, 1.0 - fill the window) + /// + public float FgImageScale + { + get => Configuration.Current.FgImageScale; + + set => Configuration.Current.FgImageScale = value; + } + + /// + /// Foreground image transparency (0.1-1.0, 1.0 - fully opaque) + /// + public float FgImageAlpha + { + get => Configuration.Current.FgImageAlpha; + + set => Configuration.Current.FgImageAlpha = value; } /// @@ -490,17 +530,40 @@ public void HandleCommandLine(object? sender, string[] args) updateCavalier = true; } } - if (o.ImageIndex.HasValue) + if (o.BgImageIndex.HasValue) + { + if (o.BgImageIndex.Value > -1 && o.BgImageIndex.Value <= ImagesList.Count) + { + BgImageIndex = o.BgImageIndex.Value - 1; + updateCavalier = true; + } + } + if (o.BgImageScale.HasValue) + { + BgImageScale = Math.Max(0.1f, Math.Min(o.BgImageScale.Value / 100f, 1f)); + updateCavalier = true; + } + if (o.BgImageAlpha.HasValue) + { + BgImageAlpha = Math.Max(0.1f, Math.Min(o.BgImageAlpha.Value / 100f, 1f)); + updateCavalier = true; + } + if (o.FgImageIndex.HasValue) { - if (o.ImageIndex.Value > -1 && o.ImageIndex.Value <= ImagesList.Count) + if (o.FgImageIndex.Value > -1 && o.FgImageIndex.Value <= ImagesList.Count) { - ImageIndex = o.ImageIndex.Value - 1; + FgImageIndex = o.FgImageIndex.Value - 1; updateCavalier = true; } } - if (o.ImageScale.HasValue) + if (o.FgImageScale.HasValue) + { + FgImageScale = Math.Max(0.1f, Math.Min(o.FgImageScale.Value / 100f, 1f)); + updateCavalier = true; + } + if (o.FgImageAlpha.HasValue) { - ImageScale = Math.Max(0.1f, Math.Min(o.ImageScale.Value / 100f, 1f)); + FgImageAlpha = Math.Max(0.1f, Math.Min(o.FgImageAlpha.Value / 100f, 1f)); updateCavalier = true; } if (o.Hearts) diff --git a/NickvisionCavalier.Shared/Models/CmdOptions.cs b/NickvisionCavalier.Shared/Models/CmdOptions.cs index 12dac28..39b9edf 100644 --- a/NickvisionCavalier.Shared/Models/CmdOptions.cs +++ b/NickvisionCavalier.Shared/Models/CmdOptions.cs @@ -104,13 +104,33 @@ public class CmdOptions { /// /// Index of a background image to load (0 to not load anything) /// - [Option('i', "image-index", Required = false, HelpText = "Index of image to draw (0 for no image)")] - public int? ImageIndex { get; set; } + [Option("bg-index", Required = false, HelpText = "Index of background image to draw (0 for no image)")] + public int? BgImageIndex { get; set; } /// /// Background image scale (10-100, 100 - fill the window) /// - [Option('a', "image-scale", Required = false, HelpText = "Background image scale in percent (10-100)")] - public uint? ImageScale { get; set; } + [Option("bg-scale", Required = false, HelpText = "Background image scale in percent (10-100)")] + public uint? BgImageScale { get; set; } + /// + /// Background image transparency (10-100, 100 - fully opaque) + /// + [Option("bg-alpha", Required = false, HelpText = "Background image alpha in percent (10-100)")] + public uint? BgImageAlpha { get; set; } + /// + /// Index of a background image to load (0 to not load anything) + /// + [Option("fg-index", Required = false, HelpText = "Index of foreground image to draw (0 for no image)")] + public int? FgImageIndex { get; set; } + /// + /// Background image scale (10-100, 100 - fill the window) + /// + [Option("fg-scale", Required = false, HelpText = "Background image scale in percent (10-100)")] + public uint? FgImageScale { get; set; } + /// + /// Foreground image transparency (10-100, 100 - fully opaque) + /// + [Option("fg-alpha", Required = false, HelpText = "Foreground image alpha in percent (10-100)")] + public uint? FgImageAlpha { get; set; } /// /// Whether to replace Spine mode with Hearts mode (easter egg) /// diff --git a/NickvisionCavalier.Shared/Models/Configuration.cs b/NickvisionCavalier.Shared/Models/Configuration.cs index 32e7748..fdd2556 100644 --- a/NickvisionCavalier.Shared/Models/Configuration.cs +++ b/NickvisionCavalier.Shared/Models/Configuration.cs @@ -132,11 +132,27 @@ public class Configuration : ConfigurationBase /// /// Index of a background image to load (-1 to not load anything) /// - public int ImageIndex { get; set; } + public int BgImageIndex { get; set; } /// /// Background image scale (0.1-1.0, 1.0 - fill the window) /// - public float ImageScale { get; set; } + public float BgImageScale { get; set; } + /// + /// Background image transparency (0.1-1.0, 1.0 - fully opaque) + /// + public float BgImageAlpha { get; set; } + /// + /// Index of a foreground image to load (-1 to not load anything) + /// + public int FgImageIndex { get; set; } + /// + /// Foreground image scale (0.1-1.0, 1.0 - fill the window) + /// + public float FgImageScale { get; set; } + /// + /// Foreground image transparency (0.1-1.0, 1.0 - fully opaque) + /// + public float FgImageAlpha { get; set; } /// /// Whether to replace Spine mode with Hearts mode (easter egg) /// @@ -176,8 +192,12 @@ public Configuration() Rotation = 0f; ColorProfiles = new List { new ColorProfile() }; ActiveProfile = 0; - ImageIndex = -1; - ImageScale = 1.0f; + BgImageIndex = -1; + BgImageScale = 1f; + BgImageAlpha = 1f; + FgImageIndex = -1; + FgImageScale = 1f; + FgImageAlpha = 1f; Hearts = false; } diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index 3b1c375..ffb5b57 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -18,13 +18,17 @@ private enum GradientType Foreground } - private delegate void DrawFunc(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint); + private delegate SKPath? DrawFunc(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint); + private float _oldWidth; + private float _oldHeight; private int _bgImageIndex; private SKBitmap? _bgImageBitmap; private SKBitmap? _bgTargetBitmap; - private float _oldWidth; - private float _oldHeight; - private float _oldScale; + private float _oldBgScale; + private int _fgImageIndex; + private SKBitmap? _fgImageBitmap; + private SKBitmap? _fgTargetBitmap; + private float _oldFgScale; /// /// Renderer's canvas to draw on @@ -40,7 +44,8 @@ public Renderer() _bgImageIndex = -1; _oldWidth = 0; _oldHeight = 0; - _oldScale = 0f; + _oldBgScale = 0f; + _oldFgScale = 0f; } /// @@ -72,12 +77,12 @@ public void Draw(float[] sample, float width, float height) bgPaint.Color = SKColor.Parse(profile.BgColors[0]); } Canvas.DrawRect(0, 0, width, height, bgPaint); - // Draw image - if (_bgImageIndex != Configuration.Current.ImageIndex) + // Prepare images + if (_bgImageIndex != Configuration.Current.BgImageIndex) { _bgImageBitmap?.Dispose(); _bgTargetBitmap?.Dispose(); - if (Configuration.Current.ImageIndex != -1) + if (Configuration.Current.BgImageIndex != -1) { var images = new List(); foreach (var file in Directory.GetFiles($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) @@ -88,32 +93,77 @@ public void Draw(float[] sample, float width, float height) } } images.Sort(); - if (Configuration.Current.ImageIndex < images.Count) + if (Configuration.Current.BgImageIndex < images.Count) { - _bgImageBitmap = SKBitmap.Decode(images[Configuration.Current.ImageIndex]); - _oldScale = 0.0f; // To enforce redraw + _bgImageBitmap = SKBitmap.Decode(images[Configuration.Current.BgImageIndex]); + _oldBgScale = 0f; // To enforce redraw } else { - Configuration.Current.ImageIndex = -1; + Configuration.Current.BgImageIndex = -1; } } - _bgImageIndex = Configuration.Current.ImageIndex; + _bgImageIndex = Configuration.Current.BgImageIndex; } - if (_bgImageIndex != -1) + if (_fgImageIndex != Configuration.Current.FgImageIndex) + { + _fgImageBitmap?.Dispose(); + _fgTargetBitmap?.Dispose(); + if (Configuration.Current.FgImageIndex != -1) + { + var images = new List(); + foreach (var file in Directory.GetFiles($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) + { + if (file.EndsWith(".jpg") || file.EndsWith(".jpeg") || file.EndsWith(".png")) + { + images.Add(file); + } + } + images.Sort(); + if (Configuration.Current.FgImageIndex < images.Count) + { + _fgImageBitmap = SKBitmap.Decode(images[Configuration.Current.FgImageIndex]); + _oldFgScale = 0f; // To enforce redraw + } + else + { + Configuration.Current.FgImageIndex = -1; + } + } + _fgImageIndex = Configuration.Current.FgImageIndex; + } + if (_oldWidth != width || _oldHeight != height || Math.Abs(_oldBgScale - Configuration.Current.BgImageScale) > 0.01f) { - if (_oldWidth != width || _oldHeight != height || Math.Abs(_oldScale - Configuration.Current.ImageScale) > 0.01f) + _oldBgScale = Configuration.Current.BgImageScale; + if (_bgImageIndex != -1) { - _oldWidth = width; - _oldHeight = height; - _oldScale = Configuration.Current.ImageScale; - var scale = Math.Max(width / _bgImageBitmap!.Width, height / _bgImageBitmap.Height); - var rect = new SKRect(0, 0, _bgImageBitmap.Width * scale, _bgImageBitmap.Height * scale); + var bgScale = Math.Max(width / _bgImageBitmap!.Width, height / _bgImageBitmap.Height); + var bgRect = new SKRect(0, 0, _bgImageBitmap.Width * bgScale, _bgImageBitmap.Height * bgScale); _bgTargetBitmap?.Dispose(); - _bgTargetBitmap = new SKBitmap((int)(rect.Width * Configuration.Current.ImageScale), (int)(rect.Height * Configuration.Current.ImageScale)); + _bgTargetBitmap = new SKBitmap((int)(bgRect.Width * Configuration.Current.BgImageScale), (int)(bgRect.Height * Configuration.Current.BgImageScale)); _bgImageBitmap.ScalePixels(_bgTargetBitmap, SKFilterQuality.Medium); } - Canvas.DrawBitmap(_bgTargetBitmap, width / 2 - _bgTargetBitmap!.Width / 2f, height / 2 - _bgTargetBitmap.Height / 2f); + } + if (_oldWidth != width || _oldHeight != height || Math.Abs(_oldFgScale - Configuration.Current.FgImageScale) > 0.01f) + { + _oldFgScale = Configuration.Current.FgImageScale; + if (_fgImageIndex != -1) + { + var fgScale = Math.Max(width / _fgImageBitmap!.Width, height / _fgImageBitmap.Height); + var fgRect = new SKRect(0, 0, _fgImageBitmap.Width * fgScale, _fgImageBitmap.Height * fgScale); + _fgTargetBitmap?.Dispose(); + _fgTargetBitmap = new SKBitmap((int)(fgRect.Width * Configuration.Current.FgImageScale), (int)(fgRect.Height * Configuration.Current.FgImageScale)); + _fgImageBitmap.ScalePixels(_fgTargetBitmap, SKFilterQuality.Medium); + } + } + _oldWidth = width; + _oldHeight = height; + // Draw background image + if (_bgImageIndex != -1) + { + using var paint = new SKPaint(); + paint.Color = paint.Color.WithAlpha((byte)(255 * Configuration.Current.BgImageAlpha)); + Canvas.DrawBitmap(_bgTargetBitmap, width / 2 - _bgTargetBitmap!.Width / 2f, height / 2 - _bgTargetBitmap.Height / 2f, paint); } // Draw foreground width -= Configuration.Current.AreaMargin * 2; @@ -148,37 +198,72 @@ public void Draw(float[] sample, float width, float height) }; if (Configuration.Current.Mirror == Mirror.Full) { - drawFunc(sample, Configuration.Current.Direction, + using var path1 = drawFunc(sample, Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, GetMirrorWidth(width), GetMirrorHeight(height), Configuration.Current.Rotation, fgPaint); - drawFunc(Configuration.Current.ReverseMirror ? sample.Reverse().ToArray() : sample, GetMirrorDirection(), + using var path2 = drawFunc(Configuration.Current.ReverseMirror ? sample.Reverse().ToArray() : sample, GetMirrorDirection(), (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + GetMirrorX(width), (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + GetMirrorY(height), GetMirrorWidth(width), GetMirrorHeight(height), -Configuration.Current.Rotation, fgPaint); + if (path1 != null && path2 != null && _fgImageIndex != -1) + { + using var path = new SKPath(); + path.AddPath(path1); + path.AddPath(path2); + Canvas.Save(); + Canvas.ClipPath(path); + using var paint = new SKPaint(); + paint.Color = paint.Color.WithAlpha((byte)(255 * Configuration.Current.FgImageAlpha)); + Canvas.DrawBitmap(_fgTargetBitmap, + (width + Configuration.Current.AreaMargin * 2) / 2f - _fgTargetBitmap!.Width / 2f, + (height + Configuration.Current.AreaMargin * 2) / 2f - _fgTargetBitmap.Height / 2f, paint); + Canvas.Restore(); + } } else if (Configuration.Current.Mirror == Mirror.SplitChannels) { - drawFunc(sample.Take(sample.Length / 2).ToArray(), Configuration.Current.Direction, + using var path1 = drawFunc(sample.Take(sample.Length / 2).ToArray(), Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, GetMirrorWidth(width), GetMirrorHeight(height), Configuration.Current.Rotation, fgPaint); - drawFunc(Configuration.Current.ReverseMirror ? sample.Skip(sample.Length / 2).ToArray() : sample.Skip(sample.Length / 2).Reverse().ToArray(), GetMirrorDirection(), + using var path2 = drawFunc(Configuration.Current.ReverseMirror ? sample.Skip(sample.Length / 2).ToArray() : sample.Skip(sample.Length / 2).Reverse().ToArray(), GetMirrorDirection(), (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + GetMirrorX(width), (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + GetMirrorY(height), GetMirrorWidth(width), GetMirrorHeight(height), -Configuration.Current.Rotation, fgPaint); + if (path1 != null && path2 != null && _fgImageIndex != -1) + { + using var path = new SKPath(); + path.AddPath(path1); + path.AddPath(path2); + Canvas.Save(); + Canvas.ClipPath(path); + using var paint = new SKPaint(); + paint.Color = paint.Color.WithAlpha((byte)(255 * Configuration.Current.FgImageAlpha)); + Canvas.DrawBitmap(_fgTargetBitmap, width / 2 - _fgTargetBitmap!.Width / 2f, height / 2 - _fgTargetBitmap.Height / 2f, paint); + Canvas.Restore(); + } } else { - drawFunc(sample, Configuration.Current.Direction, + using var path = drawFunc(sample, Configuration.Current.Direction, (width + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetX + Configuration.Current.AreaMargin, (height + Configuration.Current.AreaMargin * 2) * Configuration.Current.AreaOffsetY + Configuration.Current.AreaMargin, width, height, Configuration.Current.Rotation, fgPaint); + if (path != null && _fgImageIndex != -1) + { + Canvas.Save(); + Canvas.ClipPath(path); + using var paint = new SKPaint(); + paint.Color = paint.Color.WithAlpha((byte)(255 * Configuration.Current.FgImageAlpha)); + Canvas.DrawBitmap(_fgTargetBitmap, width / 2 - _fgTargetBitmap!.Width / 2f, height / 2 - _fgTargetBitmap.Height / 2f, paint); + Canvas.Restore(); + } } Canvas.Flush(); } @@ -322,10 +407,13 @@ private float GetMirrorHeight(float height) /// Drawing width /// Drawing height /// Skia paint - private void DrawWaveBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// Rotation angle in radians (only used in Circle modes) + /// Skia paint + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawWaveBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / (sample.Length - 1); - using var path = new SKPath(); + var path = new SKPath(); switch (direction) { case DrawingDirection.TopBottom: @@ -406,6 +494,33 @@ private void DrawWaveBox(float[] sample, DrawingDirection direction, float x, fl break; } Canvas.DrawPath(path, paint); + if (!Configuration.Current.Filling) + { + switch (direction) + { + case DrawingDirection.TopBottom: + path.LineTo(x + width, y); + path.LineTo(x, y); + path.Close(); + break; + case DrawingDirection.BottomTop: + path.LineTo(x + width, y + height); + path.LineTo(x, y + height); + path.Close(); + break; + case DrawingDirection.LeftRight: + path.LineTo(x, y + height); + path.LineTo(x, y); + path.Close(); + break; + case DrawingDirection.RightLeft: + path.LineTo(x + width, y + height); + path.LineTo(x + width, y); + path.Close(); + break; + } + } + return path; } /// @@ -417,13 +532,15 @@ private void DrawWaveBox(float[] sample, DrawingDirection direction, float x, fl /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawLevelsBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawLevelsBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var itemWidth = (direction < DrawingDirection.LeftRight ? step : width / 10) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); var itemHeight = (direction < DrawingDirection.LeftRight ? height / 10 : step) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); - using var path = new SKPath(); + var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { for (var j = 0; j < Math.Floor(sample[i] * 10); j++) @@ -474,6 +591,7 @@ private void DrawLevelsBox(float[] sample, DrawingDirection direction, float x, } } Canvas.DrawPath(path, paint); + return path; } /// @@ -485,13 +603,15 @@ private void DrawLevelsBox(float[] sample, DrawingDirection direction, float x, /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawParticlesBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawParticlesBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var itemWidth = (direction < DrawingDirection.LeftRight ? step : width / 11) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); var itemHeight = (direction < DrawingDirection.LeftRight ? height / 11 : step) * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2); - using var path = new SKPath(); + var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { switch (direction) @@ -539,6 +659,7 @@ private void DrawParticlesBox(float[] sample, DrawingDirection direction, float } } Canvas.DrawPath(path, paint); + return path; } /// @@ -550,11 +671,13 @@ private void DrawParticlesBox(float[] sample, DrawingDirection direction, float /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawBarsBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawBarsBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; - using var path = new SKPath(); + var path = new SKPath(); for (var i = 0; i < sample.Length; i++) { if (sample[i] == 0) @@ -588,12 +711,13 @@ private void DrawBarsBox(float[] sample, DrawingDirection direction, float x, fl path.AddRect(new SKRect( x + width * (1 - sample[i]) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), - x + width * sample[i] - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness), + x + width - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2), y + step * (i + Configuration.Current.ItemsOffset) + (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness / 2) + step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness))); break; }; } Canvas.DrawPath(path, paint); + return path; } /// @@ -605,11 +729,14 @@ private void DrawBarsBox(float[] sample, DrawingDirection direction, float x, fl /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawSpineBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawSpineBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var itemSize = step * (1 - Configuration.Current.ItemsOffset * 2) - (Configuration.Current.Filling ? 0 : Configuration.Current.LinesThickness); + var totalPath = new SKPath(); for (var i = 0; i < sample.Length; i++) { if (sample[i] == 0) @@ -624,7 +751,7 @@ private void DrawSpineBox(float[] sample, DrawingDirection direction, float x, f { Canvas.Save(); using var path = new SKPath(); - DrawHeart(path, itemSize); + CreateHeart(path, itemSize); Canvas.Translate(x + step * i + step / 2, y + height / 2); Canvas.Scale(sample[i]); Canvas.DrawPath(path, GetSpinePaint(paint, sample[i])); @@ -637,6 +764,11 @@ private void DrawSpineBox(float[] sample, DrawingDirection direction, float x, f itemSize * sample[i], itemSize * sample[i], itemSize * sample[i] / 2 * Configuration.Current.ItemsRoundness, itemSize * sample[i] / 2 * Configuration.Current.ItemsRoundness, GetSpinePaint(paint, sample[i])); + totalPath.AddRect(new SKRect( + x + step * (i + 0.5f) + (1 - itemSize * sample[i]) / 2, + y + height / 2 - itemSize * sample[i] / 2, + x + step * (i + 0.5f) + (1 - itemSize * sample[i]) / 2 + itemSize * sample[i], + y + height / 2 - itemSize * sample[i] / 2 + itemSize * sample[i])); break; case DrawingDirection.LeftRight: case DrawingDirection.RightLeft: @@ -644,7 +776,7 @@ private void DrawSpineBox(float[] sample, DrawingDirection direction, float x, f { Canvas.Save(); using var path = new SKPath(); - DrawHeart(path, itemSize); + CreateHeart(path, itemSize); Canvas.Translate(x + width / 2, y + step * i + step / 2); Canvas.Scale(sample[i]); Canvas.DrawPath(path, GetSpinePaint(paint, sample[i])); @@ -660,14 +792,20 @@ private void DrawSpineBox(float[] sample, DrawingDirection direction, float x, f break; } } + if (Configuration.Current.Hearts) + { + totalPath.Dispose(); + return null; + } + return totalPath; } /// - /// Draw a heart for modified Spine mode + /// Modify path to create a heart for modified Spine mode /// /// Path to use for drawing /// Size of a square to fit a heart into - private void DrawHeart(SKPath path, float itemSize) + private void CreateHeart(SKPath path, float itemSize) { path.MoveTo(0, itemSize / 2); path.CubicTo( @@ -722,8 +860,10 @@ private SKPaint GetSpinePaint(SKPaint paint, float sample) /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawSplitterBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawSplitterBox(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var step = (direction < DrawingDirection.LeftRight ? width : height) / sample.Length; var path = new SKPath(); @@ -801,6 +941,7 @@ private void DrawSplitterBox(float[] sample, DrawingDirection direction, float x path.Close(); } Canvas.DrawPath(path, paint); + return path; } /// @@ -812,8 +953,10 @@ private void DrawSplitterBox(float[] sample, DrawingDirection direction, float x /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawWaveCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawWaveCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; @@ -854,6 +997,7 @@ private void DrawWaveCircle(float[] sample, DrawingDirection direction, float x, Canvas.DrawPath(path, paint); } Canvas.Restore(); + return null; } /// @@ -865,8 +1009,10 @@ private void DrawWaveCircle(float[] sample, DrawingDirection direction, float x, /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawLevelsCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawLevelsCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; @@ -889,6 +1035,7 @@ private void DrawLevelsCircle(float[] sample, DrawingDirection direction, float } Canvas.Restore(); } + return null; } /// @@ -900,8 +1047,10 @@ private void DrawLevelsCircle(float[] sample, DrawingDirection direction, float /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawParticlesCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawParticlesCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; @@ -921,6 +1070,7 @@ private void DrawParticlesCircle(float[] sample, DrawingDirection direction, flo paint); Canvas.Restore(); } + return null; } /// @@ -932,8 +1082,10 @@ private void DrawParticlesCircle(float[] sample, DrawingDirection direction, flo /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawBarsCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawBarsCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; @@ -951,6 +1103,7 @@ private void DrawBarsCircle(float[] sample, DrawingDirection direction, float x, paint); Canvas.Restore(); } + return null; } /// @@ -962,8 +1115,10 @@ private void DrawBarsCircle(float[] sample, DrawingDirection direction, float x, /// Top-left corner Y coordinate /// Drawing width /// Drawing height + /// Rotation angle in radians (only used in Circle modes) /// Skia paint - private void DrawSpineCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) + /// SKPath for foreground image masking if supported, else null + private SKPath? DrawSpineCircle(float[] sample, DrawingDirection direction, float x, float y, float width, float height, float rotation, SKPaint paint) { var fullRadius = Math.Min(width, height) / 2; var innerRadius = fullRadius * Configuration.Current.InnerRadius; @@ -975,7 +1130,7 @@ private void DrawSpineCircle(float[] sample, DrawingDirection direction, float x { Canvas.Save(); using var path = new SKPath(); - DrawHeart(path, itemSize); + CreateHeart(path, itemSize); Canvas.Translate(x + width / 2 + innerRadius * (float)Math.Cos(rotation + Math.PI / 2 + Math.PI * 2 * i / sample.Length), y + height / 2 + innerRadius * (float)Math.Sin(Math.PI / 2 + Math.PI * 2 * i / sample.Length)); Canvas.Scale(sample[i]); Canvas.DrawPath(path, GetSpinePaint(paint, sample[i])); @@ -994,5 +1149,6 @@ private void DrawSpineCircle(float[] sample, DrawingDirection direction, float x GetSpinePaint(paint, sample[i])); Canvas.Restore(); } + return null; } } From 03eae356113105eb1a30521dffd1f219e8081209 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:40:37 +0300 Subject: [PATCH 08/18] Update description --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 173fefb..24cf7c6 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ # Features -* 6 drawing modes! -* Set any single color or a gradient for background and foreground. +* 11 drawing modes! +* Set any single color, a gradient or an image for background and foreground. * Configure smoothing, noise reduction and a few other CAVA settings. # Installation @@ -36,7 +36,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how can you help the proje # Dependencies - [.NET 7](https://dotnet.microsoft.com/en-us/) -- [CAVA](https://github.com/karlstav/cava/) +- [CAVA](https://github.com/karlstav/cava/) >= 0.9.0 # Code of Conduct From 3b5f82b26ff4536c87cfff204aec21731538f0c9 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:40:52 +0300 Subject: [PATCH 09/18] All - Update version and changelog --- NickvisionCavalier.GNOME/Program.cs | 4 +++- .../Controllers/MainWindowController.cs | 2 +- .../org.nickvision.cavalier.metainfo.xml.in | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/NickvisionCavalier.GNOME/Program.cs b/NickvisionCavalier.GNOME/Program.cs index 3c00646..7650bca 100644 --- a/NickvisionCavalier.GNOME/Program.cs +++ b/NickvisionCavalier.GNOME/Program.cs @@ -34,7 +34,9 @@ public Program(string[] args) _mainWindow = null; _mainWindowController = new MainWindowController(args); _mainWindowController.AppInfo.Changelog = - @"* Updated translations (Thanks everyone on Weblate!)"; + @"* Added ability to set foreground image for Box modes + * Transparency can now be set both for background and foreground image + * Updated translations (Thanks everyone on Weblate!)"; _application.OnActivate += OnActivate; if (File.Exists(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "/org.nickvision.cavalier.gresource")) { diff --git a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs index fe2b5c2..6884c2c 100644 --- a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs +++ b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs @@ -60,7 +60,7 @@ public MainWindowController(string[] args) { Aura = new Aura("org.nickvision.cavalier", "Nickvision Cavalier", _("Cavalier"), _("Visualize audio with CAVA")); Aura.Active.SetConfig("config"); - AppInfo.Version = "2023.8.2-next"; + AppInfo.Version = "2023.9.0-next"; AppInfo.SourceRepo = new Uri("https://github.com/NickvisionApps/Cavalier"); AppInfo.IssueTracker = new Uri("https://github.com/NickvisionApps/Cavalier/issues/new"); AppInfo.SupportUrl = new Uri("https://github.com/NickvisionApps/Cavalier/discussions"); diff --git a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in index 6889080..2048948 100644 --- a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in +++ b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in @@ -9,7 +9,7 @@

Cavalier is an audio visualizer based on CAVA with customizable interface.

  • 11 drawing modes!
  • -
  • Set any color or a gradient for background and foreground.
  • +
  • Set any color, a gradient or an image for background and foreground.
  • Configure smoothing, noise reduction and a few other CAVA settings.
@@ -41,10 +41,12 @@ - +

Changes compared to 2023.8.1:

    +
  • Added ability to set foreground image for Box modes
  • +
  • Transparency can now be set both for background and foreground image
  • Updated translations (Thanks everyone on Weblate!)
From 368d4642eabcc0422581cba248dc4fa8da0ca2cc Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:21:11 +0300 Subject: [PATCH 10/18] All - Update Aura --- .../NickvisionCavalier.GNOME.csproj | 2 +- .../Controllers/MainWindowController.cs | 7 ++++--- .../Controllers/PreferencesViewController.cs | 11 ++++++----- NickvisionCavalier.Shared/Models/CAVA.cs | 2 +- NickvisionCavalier.Shared/Models/Renderer.cs | 4 ++-- .../NickvisionCavalier.Shared.csproj | 2 +- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/NickvisionCavalier.GNOME/NickvisionCavalier.GNOME.csproj b/NickvisionCavalier.GNOME/NickvisionCavalier.GNOME.csproj index 779ef39..6060632 100644 --- a/NickvisionCavalier.GNOME/NickvisionCavalier.GNOME.csproj +++ b/NickvisionCavalier.GNOME/NickvisionCavalier.GNOME.csproj @@ -9,7 +9,7 @@ - + diff --git a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs index 6884c2c..fe2271a 100644 --- a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs +++ b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs @@ -10,7 +10,6 @@ namespace NickvisionCavalier.Shared.Controllers; ///
public class MainWindowController { - public Aura Aura { get; init; } /// /// Gets the AppInfo object /// @@ -58,8 +57,10 @@ public class MainWindowController /// Command-line arguments public MainWindowController(string[] args) { - Aura = new Aura("org.nickvision.cavalier", "Nickvision Cavalier", _("Cavalier"), _("Visualize audio with CAVA")); + Aura.Init("org.nickvision.cavalier", "Nickvision Cavalier"); Aura.Active.SetConfig("config"); + AppInfo.ShortName = _("Cavalier"); + AppInfo.Description = _("Visualize audio with CAVA"); AppInfo.Version = "2023.9.0-next"; AppInfo.SourceRepo = new Uri("https://github.com/NickvisionApps/Cavalier"); AppInfo.IssueTracker = new Uri("https://github.com/NickvisionApps/Cavalier/issues/new"); @@ -72,7 +73,7 @@ public MainWindowController(string[] args) AppInfo.Artists[_("David Lapshin")] = new Uri("https://github.com/daudix-UFO"); AppInfo.TranslatorCredits = _("translator-credits"); PreferencesViewController = new PreferencesViewController(); - var ipc = Aura.Communicate(args); + var ipc = Aura.Active.Communicate(args); ipc.CommandReceived += HandleCommandLine; HandleCommandLine(this, args); } diff --git a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs index 1dc02bc..e905e29 100644 --- a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs @@ -30,12 +30,13 @@ public List ImagesList get { var result = new List(); - if (!Directory.Exists($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) + var imagesDir = $"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images"; + if (!Directory.Exists(imagesDir)) { - Directory.CreateDirectory($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images"); + Directory.CreateDirectory(imagesDir); return result; } - foreach (var file in Directory.GetFiles($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) + foreach (var file in Directory.GetFiles(imagesDir)) { var extension = Path.GetExtension(file); if (extension == ".jpg" || extension == ".jpeg" || extension == ".png") @@ -697,11 +698,11 @@ public void AddImage(string path) var baseFilename = Path.GetFileName(path); var filename = baseFilename; var i = 0; - while (File.Exists($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images{Path.DirectorySeparatorChar}{filename}")) + while (File.Exists($"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images{Path.DirectorySeparatorChar}{filename}")) { i++; filename = $"{Path.GetFileNameWithoutExtension(baseFilename)}-{i}{Path.GetExtension(baseFilename)}"; } - File.Copy(path, $"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images{Path.DirectorySeparatorChar}{filename}"); + File.Copy(path, $"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images{Path.DirectorySeparatorChar}{filename}"); } } diff --git a/NickvisionCavalier.Shared/Models/CAVA.cs b/NickvisionCavalier.Shared/Models/CAVA.cs index 6325697..ec86067 100644 --- a/NickvisionCavalier.Shared/Models/CAVA.cs +++ b/NickvisionCavalier.Shared/Models/CAVA.cs @@ -18,7 +18,7 @@ public class CAVA : IDisposable public CAVA() { _disposed = false; - _configPath = $"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}cava_config"; + _configPath = $"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}cava_config"; UpdateConfig(); _proc = new Process { diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index ffb5b57..846a8aa 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -85,7 +85,7 @@ public void Draw(float[] sample, float width, float height) if (Configuration.Current.BgImageIndex != -1) { var images = new List(); - foreach (var file in Directory.GetFiles($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) + foreach (var file in Directory.GetFiles($"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images")) { if (file.EndsWith(".jpg") || file.EndsWith(".jpeg") || file.EndsWith(".png")) { @@ -112,7 +112,7 @@ public void Draw(float[] sample, float width, float height) if (Configuration.Current.FgImageIndex != -1) { var images = new List(); - foreach (var file in Directory.GetFiles($"{ConfigurationLoader.ConfigDir}{Path.DirectorySeparatorChar}images")) + foreach (var file in Directory.GetFiles($"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images")) { if (file.EndsWith(".jpg") || file.EndsWith(".jpeg") || file.EndsWith(".png")) { diff --git a/NickvisionCavalier.Shared/NickvisionCavalier.Shared.csproj b/NickvisionCavalier.Shared/NickvisionCavalier.Shared.csproj index e4cbdc4..23efbf1 100644 --- a/NickvisionCavalier.Shared/NickvisionCavalier.Shared.csproj +++ b/NickvisionCavalier.Shared/NickvisionCavalier.Shared.csproj @@ -16,7 +16,7 @@ - + From 96e82f936ddab477eb09b6095bee9f554fc291f4 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:28:40 +0300 Subject: [PATCH 11/18] Renderer - Fix Splitter mode --- NickvisionCavalier.Shared/Models/Renderer.cs | 46 +++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index 846a8aa..b71e370 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -917,30 +917,34 @@ private SKPaint GetSpinePaint(SKPaint paint, float sample) break; } } + if (!Configuration.Current.Filling) + { + Canvas.DrawPath(path, paint); + } + switch (direction) + { + case DrawingDirection.TopBottom: + path.LineTo(x + width, y); + path.LineTo(x, y); + break; + case DrawingDirection.BottomTop: + path.LineTo(x + width, y + height); + path.LineTo(x, y + height); + break; + case DrawingDirection.LeftRight: + path.LineTo(x, y + height); + path.LineTo(x, y); + break; + case DrawingDirection.RightLeft: + path.LineTo(x + width, y + height); + path.LineTo(x + width, y); + break; + } + path.Close(); if (Configuration.Current.Filling) { - switch (direction) - { - case DrawingDirection.TopBottom: - path.LineTo(x + width, y); - path.LineTo(x, y); - break; - case DrawingDirection.BottomTop: - path.LineTo(x + width, y + height); - path.LineTo(x, y + height); - break; - case DrawingDirection.LeftRight: - path.LineTo(x, y + height); - path.LineTo(x, y); - break; - case DrawingDirection.RightLeft: - path.LineTo(x + width, y + height); - path.LineTo(x + width, y); - break; - } - path.Close(); + Canvas.DrawPath(path, paint); } - Canvas.DrawPath(path, paint); return path; } From dcb915a21720fb3f7a30371cfdd93427dc8e8260 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:46:11 +0300 Subject: [PATCH 12/18] Shared - Use PulseAudio by default --- NickvisionCavalier.Shared/Models/CAVA.cs | 2 +- NickvisionCavalier.Shared/org.nickvision.cavalier.in | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/NickvisionCavalier.Shared/Models/CAVA.cs b/NickvisionCavalier.Shared/Models/CAVA.cs index ec86067..f7f2513 100644 --- a/NickvisionCavalier.Shared/Models/CAVA.cs +++ b/NickvisionCavalier.Shared/Models/CAVA.cs @@ -74,7 +74,7 @@ private void UpdateConfig() autosens = {(Configuration.Current.Autosens ? "1" : "0")} sensitivity = {Math.Pow(Configuration.Current.Sensitivity, 2)} [input] - method = {Environment.GetEnvironmentVariable("CAVALIER_INPUT_METHOD") ?? "pipewire"} + method = {Environment.GetEnvironmentVariable("CAVALIER_INPUT_METHOD") ?? "pulse"} [output] method = raw raw_target = /dev/stdout diff --git a/NickvisionCavalier.Shared/org.nickvision.cavalier.in b/NickvisionCavalier.Shared/org.nickvision.cavalier.in index 8066ceb..90a7fd9 100644 --- a/NickvisionCavalier.Shared/org.nickvision.cavalier.in +++ b/NickvisionCavalier.Shared/org.nickvision.cavalier.in @@ -1,8 +1,3 @@ #!/bin/sh -if [ ! -e $XDG_RUNTIME_DIR/pipewire-0 ] -then - CAVALIER_INPUT_METHOD=${CAVALIER_INPUT_METHOD:-pulse} -fi - exec @EXEC@ "$@" From 3d5e578e3e5eb9260f165d019f2cf48ad0dcf353 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:46:25 +0300 Subject: [PATCH 13/18] Flatpak - Remove unneeded permission --- flatpak/org.nickvision.cavalier.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/flatpak/org.nickvision.cavalier.json b/flatpak/org.nickvision.cavalier.json index 7eb3a54..3fd01d4 100644 --- a/flatpak/org.nickvision.cavalier.json +++ b/flatpak/org.nickvision.cavalier.json @@ -17,8 +17,7 @@ "--socket=wayland", "--socket=pulseaudio", "--device=dri", - "--share=ipc", - "--filesystem=xdg-run/pipewire-0" + "--share=ipc" ], "cleanup":[ "/include", From 8c4654a18d7acca06be978dbaef6519691d7fa5f Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:49:29 +0300 Subject: [PATCH 14/18] GNOME - Update nuget sources --- NickvisionCavalier.GNOME/nuget-sources.json | 83 ++++++++++++++++++++- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/NickvisionCavalier.GNOME/nuget-sources.json b/NickvisionCavalier.GNOME/nuget-sources.json index 93ae1e0..f83d85d 100644 --- a/NickvisionCavalier.GNOME/nuget-sources.json +++ b/NickvisionCavalier.GNOME/nuget-sources.json @@ -1,4 +1,11 @@ [ + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/ace4896.dbus.services.secrets/1.1.0/ace4896.dbus.services.secrets.1.1.0.nupkg", + "sha512": "f886b36f49c3bb651d4aeea8ed666e2dd362997b3af02cba3ed5c3866c0c06d55949ba4dafdf445c8778f2bba2fb0fd10a71fe5ecf531b2d02613e4d260950f3", + "dest": "nuget-sources", + "dest-filename": "ace4896.dbus.services.secrets.1.1.0.nupkg" + }, { "type": "file", "url": "https://api.nuget.org/v3-flatcontainer/commandlineparser/2.9.1/commandlineparser.2.9.1.nupkg", @@ -118,6 +125,20 @@ "dest": "nuget-sources", "dest-filename": "markdig.0.31.0.nupkg" }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/meziantou.framework.win32.credentialmanager/1.4.2/meziantou.framework.win32.credentialmanager.1.4.2.nupkg", + "sha512": "75c861c9f4ea0eb3ec84f4dd6f369c57240975acc67f10d03913c969618f299adbc4e4be5d295db388d09a44b501c561f02f1aa78f2edea99f8cdefbafc2edfd", + "dest": "nuget-sources", + "dest-filename": "meziantou.framework.win32.credentialmanager.1.4.2.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/microsoft.data.sqlite.core/7.0.5/microsoft.data.sqlite.core.7.0.5.nupkg", + "sha512": "319cc8ad58d2133f850404bf40bdf6fba64781565913a482b055403c12180ace43e5d12098b5b68f7d170eff57ed15c9ca70f5801150d94b892ffe012ecf7f5c", + "dest": "nuget-sources", + "dest-filename": "microsoft.data.sqlite.core.7.0.5.nupkg" + }, { "type": "file", "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/5.0.0/microsoft.netcore.targets.5.0.0.nupkg", @@ -127,10 +148,10 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/nickvision.aura/2023.8.2/nickvision.aura.2023.8.2.nupkg", - "sha512": "e86dee781f4b1d48a2a8eda5249da314248b980959a9a2dcff8e4b034c85bd18390b43a9ea362ed623e3ed0f3836a3d9299a334378353e6fb5757b5bac25c586", + "url": "https://api.nuget.org/v3-flatcontainer/nickvision.aura/2023.9.3/nickvision.aura.2023.9.3.nupkg", + "sha512": "4f2d37373baf8a86ab30ddb5aea90e0ce905cb660cc1978a10d59c422d5f501227bcdf492fa57bfe853eabb5fc6248ae20ab933ec1dd1d773bb54088f329a5ca", "dest": "nuget-sources", - "dest-filename": "nickvision.aura.2023.8.2.nupkg" + "dest-filename": "nickvision.aura.2023.9.3.nupkg" }, { "type": "file", @@ -167,6 +188,55 @@ "dest": "nuget-sources", "dest-filename": "skiasharp.nativeassets.win32.2.88.3.nupkg" }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.bundle_e_sqlcipher/2.1.5/sqlitepclraw.bundle_e_sqlcipher.2.1.5.nupkg", + "sha512": "c86a1641f66f54565ff7750b3a6f21bcfdfc59c4cc633dab0f1410e5b0ee8c15b81e9d18130c3a13e47e7a29ee75e179082885f421342a4e6560df39962b6246", + "dest": "nuget-sources", + "dest-filename": "sqlitepclraw.bundle_e_sqlcipher.2.1.5.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.core/2.1.4/sqlitepclraw.core.2.1.4.nupkg", + "sha512": "4a654a227445d97e0c3c00223f819b90d64746e7b2483c4ff0b69ae02d6d3f22a68df7d6c00245aed6f2c51610dc29714fbe6765a8fbe42795f90448c04909d2", + "dest": "nuget-sources", + "dest-filename": "sqlitepclraw.core.2.1.4.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.core/2.1.5/sqlitepclraw.core.2.1.5.nupkg", + "sha512": "10379c318ea178769db9164d8bf569469fbdea73659668200d6394ab2163b9229e8a883de4702e0fdaebb4b1c2fae1f263424aa5e9765ac507eba7fceedc8a7b", + "dest": "nuget-sources", + "dest-filename": "sqlitepclraw.core.2.1.5.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.lib.e_sqlcipher/2.1.5/sqlitepclraw.lib.e_sqlcipher.2.1.5.nupkg", + "sha512": "570f8c23f5fe20d742ccb05128ac0b45cf55ab1912d89dbeabca44036ae161e25c73d803be629d4186a0db75fb52898b221b4de21dde886557c8ed5f4b8d545a", + "dest": "nuget-sources", + "dest-filename": "sqlitepclraw.lib.e_sqlcipher.2.1.5.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/sqlitepclraw.provider.e_sqlcipher/2.1.5/sqlitepclraw.provider.e_sqlcipher.2.1.5.nupkg", + "sha512": "01e5db3a24867b4b563604a3b8aee0fac044354550ea80f8a836b3ad6bbc9949d4dfca358eb9294301e96220e1319463fac84b4099c99a54470ab7a92a6e8eb2", + "dest": "nuget-sources", + "dest-filename": "sqlitepclraw.provider.e_sqlcipher.2.1.5.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/system.io.pipelines/6.0.0/system.io.pipelines.6.0.0.nupkg", + "sha512": "c5983b4510bc8ae4116133ffb9b280fe61d99d47ef52dd78e5bfd03e090901896d5d5fd738dae57006b971840a4d9422bded33ddefa5e927d75d309ef1f70dea", + "dest": "nuget-sources", + "dest-filename": "system.io.pipelines.6.0.0.nupkg" + }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.3/system.memory.4.5.3.nupkg", + "sha512": "70fce15a52cc76aacbae05c8e89e2e398d1d32903f63f640a7dd4a3e5747f2c7a887d4bfd22f2a2e40274906cf91648dfd169734fb7c74eb9b4f72614084e1db", + "dest": "nuget-sources", + "dest-filename": "system.memory.4.5.3.nupkg" + }, { "type": "file", "url": "https://api.nuget.org/v3-flatcontainer/tmds.dbus/0.15.0/tmds.dbus.0.15.0.nupkg", @@ -174,6 +244,13 @@ "dest": "nuget-sources", "dest-filename": "tmds.dbus.0.15.0.nupkg" }, + { + "type": "file", + "url": "https://api.nuget.org/v3-flatcontainer/tmds.dbus.protocol/0.15.0/tmds.dbus.protocol.0.15.0.nupkg", + "sha512": "45958a88536d1daa769934986b3ac514cdc1104a936bc404dbdec550c958847e7408af621350c09fa51bc4b837fb88471ec6e6056c4aaa2cebf30f044cd834e9", + "dest": "nuget-sources", + "dest-filename": "tmds.dbus.protocol.0.15.0.nupkg" + }, { "type": "file", "url": "https://api.nuget.org/v3-flatcontainer/cake.tool/3.1.0/cake.tool.3.1.0.nupkg", From 176c4d8cd3f95574ecee17f27add9966871bce4f Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:55:32 +0300 Subject: [PATCH 15/18] All - Update version and changelog for beta1 --- NickvisionCavalier.GNOME/Program.cs | 1 + NickvisionCavalier.Shared/Controllers/MainWindowController.cs | 2 +- .../org.nickvision.cavalier.metainfo.xml.in | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NickvisionCavalier.GNOME/Program.cs b/NickvisionCavalier.GNOME/Program.cs index 7650bca..3f2c431 100644 --- a/NickvisionCavalier.GNOME/Program.cs +++ b/NickvisionCavalier.GNOME/Program.cs @@ -36,6 +36,7 @@ public Program(string[] args) _mainWindowController.AppInfo.Changelog = @"* Added ability to set foreground image for Box modes * Transparency can now be set both for background and foreground image + * Cavalier switched back to using PulseAudio by default. You can still switch audio backend to whatever is supported by CAVA using CAVALIER_INPUT_METHOD environment variable * Updated translations (Thanks everyone on Weblate!)"; _application.OnActivate += OnActivate; if (File.Exists(Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "/org.nickvision.cavalier.gresource")) diff --git a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs index fe2271a..706a65a 100644 --- a/NickvisionCavalier.Shared/Controllers/MainWindowController.cs +++ b/NickvisionCavalier.Shared/Controllers/MainWindowController.cs @@ -61,7 +61,7 @@ public MainWindowController(string[] args) Aura.Active.SetConfig("config"); AppInfo.ShortName = _("Cavalier"); AppInfo.Description = _("Visualize audio with CAVA"); - AppInfo.Version = "2023.9.0-next"; + AppInfo.Version = "2023.9.0-beta1"; AppInfo.SourceRepo = new Uri("https://github.com/NickvisionApps/Cavalier"); AppInfo.IssueTracker = new Uri("https://github.com/NickvisionApps/Cavalier/issues/new"); AppInfo.SupportUrl = new Uri("https://github.com/NickvisionApps/Cavalier/discussions"); diff --git a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in index 2048948..dc8f832 100644 --- a/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in +++ b/NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in @@ -41,12 +41,13 @@ - +

Changes compared to 2023.8.1:

  • Added ability to set foreground image for Box modes
  • Transparency can now be set both for background and foreground image
  • +
  • Cavalier switched back to using PulseAudio by default. You can still switch audio backend to whatever is supported by CAVA using CAVALIER_INPUT_METHOD environment variable
  • Updated translations (Thanks everyone on Weblate!)
From 938136118b48ee1d3cafcf6615dd403e9e153de8 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Tue, 12 Sep 2023 00:02:17 +0300 Subject: [PATCH 16/18] Shared - Set _fgImageIndex in Renderer constructor --- NickvisionCavalier.Shared/Models/Renderer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index b71e370..933beea 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -42,6 +42,7 @@ public Renderer() { Canvas = null; _bgImageIndex = -1; + _fgImageIndex = -1; _oldWidth = 0; _oldHeight = 0; _oldBgScale = 0f; From 641772f9377e5601f7b93003fbf676556152b9c4 Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Tue, 12 Sep 2023 00:14:56 +0300 Subject: [PATCH 17/18] Shared - Better images extensions detection --- .../Controllers/PreferencesViewController.cs | 2 +- NickvisionCavalier.Shared/Models/Renderer.cs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs index e905e29..3896d5b 100644 --- a/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionCavalier.Shared/Controllers/PreferencesViewController.cs @@ -38,7 +38,7 @@ public List ImagesList } foreach (var file in Directory.GetFiles(imagesDir)) { - var extension = Path.GetExtension(file); + var extension = Path.GetExtension(file).ToLower(); if (extension == ".jpg" || extension == ".jpeg" || extension == ".png") { result.Add(file); diff --git a/NickvisionCavalier.Shared/Models/Renderer.cs b/NickvisionCavalier.Shared/Models/Renderer.cs index 933beea..2788381 100644 --- a/NickvisionCavalier.Shared/Models/Renderer.cs +++ b/NickvisionCavalier.Shared/Models/Renderer.cs @@ -88,7 +88,8 @@ public void Draw(float[] sample, float width, float height) var images = new List(); foreach (var file in Directory.GetFiles($"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images")) { - if (file.EndsWith(".jpg") || file.EndsWith(".jpeg") || file.EndsWith(".png")) + var extension = Path.GetExtension(file).ToLower(); + if (extension == ".jpg" || extension == ".jpeg" || extension == ".png") { images.Add(file); } @@ -115,7 +116,8 @@ public void Draw(float[] sample, float width, float height) var images = new List(); foreach (var file in Directory.GetFiles($"{UserDirectories.ApplicationConfig}{Path.DirectorySeparatorChar}images")) { - if (file.EndsWith(".jpg") || file.EndsWith(".jpeg") || file.EndsWith(".png")) + var extension = Path.GetExtension(file).ToLower(); + if (extension == ".jpg" || extension == ".jpeg" || extension == ".png") { images.Add(file); } From fecd21be48d3fc65b099c0d560c93d5b1802020f Mon Sep 17 00:00:00 2001 From: Fyodor Sobolev <117388856+fsobolev@users.noreply.github.com> Date: Tue, 12 Sep 2023 00:15:37 +0300 Subject: [PATCH 18/18] Shared - Update po(t) --- .../Resources/po/cavalier.pot | 132 ++++++++++----- NickvisionCavalier.Shared/Resources/po/cs.po | 148 +++++++++++----- NickvisionCavalier.Shared/Resources/po/de.po | 140 ++++++++++----- NickvisionCavalier.Shared/Resources/po/es.po | 152 ++++++++++++----- NickvisionCavalier.Shared/Resources/po/fi.po | 149 +++++++++++----- NickvisionCavalier.Shared/Resources/po/fr.po | 148 +++++++++++----- NickvisionCavalier.Shared/Resources/po/it.po | 160 ++++++++++++------ NickvisionCavalier.Shared/Resources/po/nl.po | 136 ++++++++++----- .../Resources/po/pt_BR.po | 141 +++++++++------ NickvisionCavalier.Shared/Resources/po/ru.po | 148 +++++++++++----- NickvisionCavalier.Shared/Resources/po/tr.po | 148 +++++++++++----- .../Resources/po/zh_Hant.po | 144 +++++++++++----- 12 files changed, 1211 insertions(+), 535 deletions(-) diff --git a/NickvisionCavalier.Shared/Resources/po/cavalier.pot b/NickvisionCavalier.Shared/Resources/po/cavalier.pot index 995e5d6..faf1b36 100644 --- a/NickvisionCavalier.Shared/Resources/po/cavalier.pot +++ b/NickvisionCavalier.Shared/Resources/po/cavalier.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "" @@ -26,17 +26,17 @@ msgstr "" msgid "Add New Profile" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -44,11 +44,11 @@ msgstr "" msgid "Cavalier" msgstr "" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "" @@ -56,21 +56,21 @@ msgstr "" msgid "Default" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "" @@ -78,15 +78,15 @@ msgstr "" msgid "GitHub Repo" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "" @@ -94,19 +94,19 @@ msgstr "" msgid "New color profile will be a copy of the current active profile." msgstr "" -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "" @@ -114,20 +114,20 @@ msgstr "" msgid "Profile Name" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -148,7 +148,7 @@ msgid "" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "" @@ -406,23 +406,55 @@ msgstr "" msgid "Foreground Colors" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +msgid "Add foreground color" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +msgid "Add background color" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +msgid "Images" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +msgid "Background" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +msgid "Foreground" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +msgid "No Images" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "" @@ -511,29 +543,45 @@ msgid "Change Background Image" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +msgid "Change Background Image Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +msgid "Change Background Image Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +msgid "Change Foreground Image" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +msgid "Change Foreground Image Scale" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +msgid "Change Foreground Image Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "" @@ -556,7 +604,7 @@ msgid "11 drawing modes!" msgstr "" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 diff --git a/NickvisionCavalier.Shared/Resources/po/cs.po b/NickvisionCavalier.Shared/Resources/po/cs.po index b5ab22a..89f18f3 100644 --- a/NickvisionCavalier.Shared/Resources/po/cs.po +++ b/NickvisionCavalier.Shared/Resources/po/cs.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-08 18:31+0000\n" "Last-Translator: Fjuro \n" -"Language-Team: Czech \n" +"Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Přidat" @@ -28,17 +28,17 @@ msgstr "Přidat" msgid "Add New Profile" msgstr "Přidat nový profil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Opravdu chcete odstranit profil „{0}“?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Zrušit" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Zrušit" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Přispěvatelě na GitHubu ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -58,21 +58,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Výchozí" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Smazat" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Smazat Profil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Plný" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -80,15 +80,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "Repozitář GitHub" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Srdíčka" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "Obrázky JPEG a PNG" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Matrix Chat" @@ -96,19 +96,19 @@ msgstr "Matrix Chat" msgid "New color profile will be a copy of the current active profile." msgstr "Nový barevný profil bude kopie současně aktivního profilu." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Vypnuto" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Zapnuto" @@ -116,20 +116,20 @@ msgstr "Zapnuto" msgid "Profile Name" msgstr "Název profilu" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Vybrat obrázek" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Rozdělit kanály" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Písek Pískovec" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -152,7 +152,7 @@ msgstr "" "video a sledujte, jak váš zvuk ožije!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Předvolby" @@ -415,23 +415,61 @@ msgstr "Tmavý" msgid "Foreground Colors" msgstr "Barvy popředí" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Barvy popředí" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Barvy pozadí" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Barvy pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Obrázek" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Barvy pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Barvy popředí" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Přidat obrázek" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Měřítko" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Žádný obrázek" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Žádný obrázek" @@ -520,29 +558,50 @@ msgid "Change Background Image" msgstr "Změnit obrázek na pozadí" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Změnit obrázek na pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Změnit obrázek na pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Změnit obrázek na pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Změnit velikost obrázku" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Změnit obrázek na pozadí" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Aplikace" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Přepnout na celou obrazovku" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "O aplikaci Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Ukončit" @@ -566,7 +625,8 @@ msgid "11 drawing modes!" msgstr "11 vykreslovacích režimů!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "Nastavte jakoukoliv barvu nebo jako pozadí nebo popředí." #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 diff --git a/NickvisionCavalier.Shared/Resources/po/de.po b/NickvisionCavalier.Shared/Resources/po/de.po index 78d2cae..352763e 100644 --- a/NickvisionCavalier.Shared/Resources/po/de.po +++ b/NickvisionCavalier.Shared/Resources/po/de.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-16 04:51+0000\n" "Last-Translator: Renner03 \n" -"Language-Team: German \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Hinzufügen" @@ -28,17 +28,17 @@ msgstr "Hinzufügen" msgid "Add New Profile" msgstr "Neues Profil hinzufügen" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, fuzzy, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Soll dieses Profil wirklich entfernt werden?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Abbrechen" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Abbrechen" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Mitwirkende auf GitHub ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "" @@ -58,22 +58,22 @@ msgstr "" msgid "Default" msgstr "Standard" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Löschen" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, fuzzy msgid "Delete Profile" msgstr "Farbprofile" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 #, fuzzy msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -82,15 +82,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "JPEG und PNG Bilder" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 #, fuzzy msgid "Matrix Chat" msgstr "Matrix Chat" @@ -99,20 +99,20 @@ msgstr "Matrix Chat" msgid "New color profile will be a copy of the current active profile." msgstr "Neues Farbprofil wird eine Kopie vom aktuellen Profil sein." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 #, fuzzy msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Aus" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 #, fuzzy msgid "On" msgstr "Öffnen" @@ -121,21 +121,21 @@ msgstr "Öffnen" msgid "Profile Name" msgstr "Profilname" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "ein Bild auswählen" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 #, fuzzy msgid "Split Channels" msgstr "Kanäle" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Mitwirkende Übersetzer" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 #, fuzzy @@ -157,7 +157,7 @@ msgid "" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Einstellungen" @@ -437,24 +437,60 @@ msgstr "Dunkel" msgid "Foreground Colors" msgstr "Vordergrundfarben" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Vordergrundfarben" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 #, fuzzy msgid "Background Colors" msgstr "Hintergrundfarben" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Hintergrundfarben" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +msgid "Images" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Hintergrundfarben" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Vordergrundfarben" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +msgid "No Images" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "" @@ -553,30 +589,46 @@ msgid "Change Background Image" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +msgid "Change Background Image Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +msgid "Change Background Image Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +msgid "Change Foreground Image" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +msgid "Change Foreground Image Scale" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +msgid "Change Foreground Image Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Tastenkürzel" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 #, fuzzy msgid "About Cavalier" msgstr "Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Schließen" @@ -604,7 +656,7 @@ msgstr "4 Zeichenmodi!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 #, fuzzy -msgid "Set any color or a gradient for background and foreground." +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" "Eine einzige Farbe oder einen bis zu 10-farbigen Farbverlauf für Vorder- und " "Hintergrund einstellen." diff --git a/NickvisionCavalier.Shared/Resources/po/es.po b/NickvisionCavalier.Shared/Resources/po/es.po index b0195ab..1c9806c 100644 --- a/NickvisionCavalier.Shared/Resources/po/es.po +++ b/NickvisionCavalier.Shared/Resources/po/es.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-09 12:21+0000\n" -"Last-Translator: Óscar Fernández Díaz \n" -"Language-Team: Spanish \n" +"Last-Translator: Óscar Fernández Díaz \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Añadir" @@ -29,17 +29,17 @@ msgstr "Añadir" msgid "Add New Profile" msgstr "Añadir perfil nuevo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "¿Está seguro de que desea eliminar el perfil \"{0}\"?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Cancelar" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -47,11 +47,11 @@ msgstr "Cancelar" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Colaboradores en GitHub ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -59,21 +59,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Predeterminado" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Borrar" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Borrar perfil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Completo" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -81,15 +81,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "Repo de GitHub" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Corazones" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "Imágenes JPEG y PNG" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Chat de Matrix" @@ -97,19 +97,19 @@ msgstr "Chat de Matrix" msgid "New color profile will be a copy of the current active profile." msgstr "El perfil de color nuevo será una copia del perfil activo actual." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Apagado" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Activo" @@ -117,20 +117,20 @@ msgstr "Activo" msgid "Profile Name" msgstr "Nombre del perfil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Seleccione una imagen" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Dividir canales" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Óscar Fernández Díaz " -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -153,7 +153,7 @@ msgstr "" "y verá cómo el sonido cobra vida!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Preferencias" @@ -416,23 +416,61 @@ msgstr "Oscuro" msgid "Foreground Colors" msgstr "Colores del primer plano" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Colores del primer plano" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Colores de fondo" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Colores de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Imagen" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Colores de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Colores del primer plano" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Añadir imagen" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Escala" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Sin imagen" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Sin imagen" @@ -521,29 +559,50 @@ msgid "Change Background Image" msgstr "Cambiar imagen de fondo" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Cambiar imagen de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Cambiar imagen de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Cambiar imagen de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Cambiar escala de la imagen" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Cambiar imagen de fondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Aplicación" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Conmutar pantalla completa" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Atajos del teclado" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "Acerca de Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Salir" @@ -568,7 +627,8 @@ msgid "11 drawing modes!" msgstr "¡11 modos de dibujo!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" "Establezca cualquier color o un degradado para el fondo y el primer plano." diff --git a/NickvisionCavalier.Shared/Resources/po/fi.po b/NickvisionCavalier.Shared/Resources/po/fi.po index c41ad0b..673af92 100644 --- a/NickvisionCavalier.Shared/Resources/po/fi.po +++ b/NickvisionCavalier.Shared/Resources/po/fi.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-13 23:35+0000\n" "Last-Translator: Jiri Grönroos \n" -"Language-Team: Finnish \n" +"Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Lisää" @@ -28,17 +28,17 @@ msgstr "Lisää" msgid "Add New Profile" msgstr "Lisää uusi profiili" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Haluatko varmasti poistaa profiilin \"{0}\"?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Peru" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Peru" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Avustajat GitHubissa ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -58,21 +58,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Oletus" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Poista" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Poista profiili" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Täysi" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -80,15 +80,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "GitHub-tietovarasto" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "JPEG- ja PNG-kuvat" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Matrix-keskustelu" @@ -97,19 +97,19 @@ msgid "New color profile will be a copy of the current active profile." msgstr "" "Uusi väriprofiili tulee olemaan kopio nykyisestä aktiivisesta profiilista." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Pois" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Päällä" @@ -117,20 +117,20 @@ msgstr "Päällä" msgid "Profile Name" msgstr "Profiilin nimi" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Valitse kuva" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Jaa kanavat" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Jiri Grönroos" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -153,7 +153,7 @@ msgstr "" "video, ja näe, kuinka ääni herää eloon!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Asetukset" @@ -412,23 +412,61 @@ msgstr "Tumma" msgid "Foreground Colors" msgstr "Edustavärit" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Edustavärit" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Taustavärit" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Taustavärit" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Kuva" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Taustavärit" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Edustavärit" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Lisää kuva" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Ei kuvaa" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Ei kuvaa" @@ -521,29 +559,50 @@ msgid "Change Background Image" msgstr "Vaihda taustakuva" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" -msgstr "" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Vaihda taustakuva" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Vaihda taustakuva" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Vaihda taustakuva" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" +msgstr "Vaihda taustakuva" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Vaihda taustakuva" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Sovellus" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Koko näyttö päälle/pois" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Pikanäppäimet" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "Tietoja - Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Lopeta" @@ -566,7 +625,7 @@ msgid "11 drawing modes!" msgstr "11 piirtotilaa!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 diff --git a/NickvisionCavalier.Shared/Resources/po/fr.po b/NickvisionCavalier.Shared/Resources/po/fr.po index 4824506..18a9725 100644 --- a/NickvisionCavalier.Shared/Resources/po/fr.po +++ b/NickvisionCavalier.Shared/Resources/po/fr.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-08 10:00+0000\n" "Last-Translator: rene-coty \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Ajouter" @@ -28,17 +28,17 @@ msgstr "Ajouter" msgid "Add New Profile" msgstr "Ajouter un nouveau profil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Êtes-vous sûr⋅e de vouloir supprimer le profil « {0} » ?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Annuler" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Annuler" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Contributeurs sur GitHub ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -58,21 +58,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Par défaut" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Supprimer" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Supprimer le profil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Intégral" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -80,15 +80,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "Dépôt GitHub" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Cœurs" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "Images JPEG et PNG" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Discussion Matrix" @@ -96,19 +96,19 @@ msgstr "Discussion Matrix" msgid "New color profile will be a copy of the current active profile." msgstr "Le nouveau profil de couleur sera une copie du profil actif actuel." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Désactivé" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Activé" @@ -116,20 +116,20 @@ msgstr "Activé" msgid "Profile Name" msgstr "Nom du profil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Sélectionnez une image" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Séparer les canaux" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Irénée Thirion" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -152,7 +152,7 @@ msgstr "" "pour le voir prendre vie !" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Préférences" @@ -417,23 +417,61 @@ msgstr "Sombre" msgid "Foreground Colors" msgstr "Couleurs de premier-plan" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Couleurs de premier-plan" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Couleurs d’arrière-plan" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Couleurs d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Image" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Couleurs d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Couleurs de premier-plan" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Ajouter une image" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Mise à l’échelle" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Aucune image" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Aucune image" @@ -522,29 +560,50 @@ msgid "Change Background Image" msgstr "Changer l’image d’arrière-plan" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Changer l’image d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Changer l’image d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Changer l’image d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Changer l’échelle de l’image" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Changer l’image d’arrière-plan" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Application" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Basculer en plein écran" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "À propos de Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Quitter" @@ -569,7 +628,8 @@ msgid "11 drawing modes!" msgstr "11 modes de dessin !" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" "Définissez une couleur ou un dégradé pour l’arrière-plan et le premier-plan." diff --git a/NickvisionCavalier.Shared/Resources/po/it.po b/NickvisionCavalier.Shared/Resources/po/it.po index f6b4231..56c1267 100644 --- a/NickvisionCavalier.Shared/Resources/po/it.po +++ b/NickvisionCavalier.Shared/Resources/po/it.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-12 15:48+0000\n" "Last-Translator: albanobattistella \n" -"Language-Team: Italian \n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Aggiungi" @@ -28,17 +28,17 @@ msgstr "Aggiungi" msgid "Add New Profile" msgstr "Aggiungi nuovo profilo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Sei sicuro di voler rimuovere il profilo \"{0}\"?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Cancella" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Cancella" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Contributori su GitHub ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -58,21 +58,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Predefinito" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Cancella" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Elimina profilo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Pieno" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -80,15 +80,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "Repo GitHub" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Cuori" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "Immagini JPEG e PNG" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Chat Matrix" @@ -96,19 +96,19 @@ msgstr "Chat Matrix" msgid "New color profile will be a copy of the current active profile." msgstr "Il nuovo profilo colore sarà una copia del profilo attivo corrente." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Off" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Acceso" @@ -116,20 +116,20 @@ msgstr "Acceso" msgid "Profile Name" msgstr "Nome profilo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Seleziona un'immagine" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Dividi canali" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Albano Battistella" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -152,7 +152,7 @@ msgstr "" "guarda un video e guarda il tuo suono prendere vita!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Preferenze" @@ -417,23 +417,61 @@ msgstr "Scuro" msgid "Foreground Colors" msgstr "Colori in primo piano" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Colori in primo piano" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Colori di sfondo" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Colori di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Immagine" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Colori di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Colori in primo piano" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Aggiungi immagine" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Scala" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Nessuna immagine" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Nessuna immagine" @@ -522,29 +560,50 @@ msgid "Change Background Image" msgstr "Cambia immagine di sfondo" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Cambia immagine di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Cambia immagine di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Cambia immagine di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Cambia la scala dell'immagine" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Cambia immagine di sfondo" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Applicazione" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Attiva schermo intero" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Scorciatoie da tastiera" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "Informazioni su Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Esci" @@ -569,7 +628,8 @@ msgid "11 drawing modes!" msgstr "11 modalità di disegno!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "Imposta qualsiasi colore o sfumatura per lo sfondo e il primo piano." #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 @@ -634,8 +694,8 @@ msgstr "" #~ "Added option to change roundness of items in \"levels\" and \"particles\" " #~ "modes." #~ msgstr "" -#~ "Aggiunta opzione per modificare la rotondità degli elementi in \"livelli" -#~ "\" e modalità \"particelle\"." +#~ "Aggiunta opzione per modificare la rotondità degli elementi in " +#~ "\"livelli\" e modalità \"particelle\"." #~ msgid "Import/Export Settings" #~ msgstr "Impostazioni di importazione/esportazione" @@ -654,8 +714,8 @@ msgstr "" #~ msgid "This setting only affects \"levels\" and \"particles\" modes." #~ msgstr "" -#~ "Questa impostazione riguarda solo le modalità \"livelli\" e \"particelle" -#~ "\"." +#~ "Questa impostazione riguarda solo le modalità \"livelli\" e " +#~ "\"particelle\"." #~ msgid "Number of bars in CAVA config" #~ msgstr "Numero di barre nella configurazione CAVA" @@ -682,8 +742,8 @@ msgstr "" #~ "This setting only affects \"levels\" and \"particles\" modes.\n" #~ "0 - square, 1 - round" #~ msgstr "" -#~ "Questa impostazione riguarda solo le modalità \"livelli\" e \"particelle" -#~ "\".\n" +#~ "Questa impostazione riguarda solo le modalità \"livelli\" e " +#~ "\"particelle\".\n" #~ "0 - quadrato, 1 - rotondo" #~ msgid "Import" diff --git a/NickvisionCavalier.Shared/Resources/po/nl.po b/NickvisionCavalier.Shared/Resources/po/nl.po index cd27cd6..1abcc01 100644 --- a/NickvisionCavalier.Shared/Resources/po/nl.po +++ b/NickvisionCavalier.Shared/Resources/po/nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-07-31 13:53+0000\n" "Last-Translator: Philip Goto \n" "Language-Team: Dutch \n" "Language-Team: Brazilian Portuguese \n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "X-Generator: Gtranslator 42.0\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Adicione" @@ -28,17 +28,17 @@ msgstr "Adicione" msgid "Add New Profile" msgstr "Adicione um novo perfil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, fuzzy, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Têm certeza que deseja remover esse perfil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Cancelar" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "Cancelar" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "" @@ -58,22 +58,22 @@ msgstr "" msgid "Default" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, fuzzy msgid "Delete Profile" msgstr "Remover perfil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "" @@ -81,15 +81,15 @@ msgstr "" msgid "GitHub Repo" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "" @@ -97,19 +97,19 @@ msgstr "" msgid "New color profile will be a copy of the current active profile." msgstr "" -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Desligado" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 #, fuzzy msgid "On" msgstr "Abrir" @@ -119,21 +119,21 @@ msgstr "Abrir" msgid "Profile Name" msgstr "Perfil:" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 #, fuzzy msgid "Split Channels" msgstr "Canais" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 #, fuzzy @@ -155,7 +155,7 @@ msgid "" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Preferencias" @@ -417,23 +417,58 @@ msgstr "Escuro" msgid "Foreground Colors" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Adicionar cor" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Adicionar cor" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +msgid "Images" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Fundo" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +msgid "Foreground" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +msgid "No Images" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "" @@ -532,30 +567,46 @@ msgid "Change Background Image" msgstr "" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +msgid "Change Background Image Scale" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +msgid "Change Background Image Alpha" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +msgid "Change Foreground Image" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +msgid "Change Foreground Image Scale" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +msgid "Change Foreground Image Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Atalhos de teclado" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 #, fuzzy msgid "About Cavalier" msgstr "Cavalier" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Sair" @@ -582,7 +633,7 @@ msgid "11 drawing modes!" msgstr "4 desenhos de ondas!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 @@ -624,18 +675,12 @@ msgstr "" #~ msgid "Remove" #~ msgstr "Remover" -#~ msgid "Background" -#~ msgstr "Fundo" - #~ msgid "Select color" #~ msgstr "Selecione a cor" #~ msgid "Remove color" #~ msgstr "Remover cor" -#~ msgid "Add color" -#~ msgstr "Adicionar cor" - #~ msgid "This name is already in use." #~ msgstr "Este nome já esta em uso" diff --git a/NickvisionCavalier.Shared/Resources/po/ru.po b/NickvisionCavalier.Shared/Resources/po/ru.po index 5cdef68..320e9dd 100644 --- a/NickvisionCavalier.Shared/Resources/po/ru.po +++ b/NickvisionCavalier.Shared/Resources/po/ru.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: cavalier\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-10 15:59+0000\n" "Last-Translator: Fyodor Sobolev \n" -"Language-Team: Russian \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +20,7 @@ msgstr "" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Добавить" @@ -29,17 +29,17 @@ msgstr "Добавить" msgid "Add New Profile" msgstr "Добавить новый профиль" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "Вы уверены, что хотите удалить профиль \"{0}\"?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "Отмена" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -47,11 +47,11 @@ msgstr "Отмена" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "Соавторы на GitHub ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "Давид Лапшин" @@ -59,21 +59,21 @@ msgstr "Давид Лапшин" msgid "Default" msgstr "По умолчанию" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Удалить" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Удалить профиль" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Полное" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Фёдор Соболев" @@ -81,15 +81,15 @@ msgstr "Фёдор Соболев" msgid "GitHub Repo" msgstr "Репозиторий GitHub" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Сердечки" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "Изображения JPEG и PNG" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Чат Matrix" @@ -97,19 +97,19 @@ msgstr "Чат Matrix" msgid "New color profile will be a copy of the current active profile." msgstr "Новый цветовой профиль будет копией текущего активного профиля." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Выключено" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Включено" @@ -117,20 +117,20 @@ msgstr "Включено" msgid "Profile Name" msgstr "Имя профиля" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Выбрать изображение" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Разделить каналы" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Фёдор Соболев https://github.com/fsobolev" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -153,7 +153,7 @@ msgstr "" "и наблюдайте, как звук оживает!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Настройки" @@ -417,23 +417,61 @@ msgstr "Тёмная" msgid "Foreground Colors" msgstr "Цвета переднего плана" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Цвета переднего плана" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Цвета фона" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Цвета фона" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Изображение" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Цвета фона" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Цвета переднего плана" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Добавить изображение" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Масштаб" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Без изображения" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Без изображения" @@ -522,29 +560,50 @@ msgid "Change Background Image" msgstr "Изменить фоновое изображение" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Изменить фоновое изображение" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Изменить фоновое изображение" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Изменить фоновое изображение" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Изменить масштаб изображения" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Изменить фоновое изображение" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Приложение" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Переключить полный экран" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Комбинации клавиш" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "О приложении" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Выход" @@ -569,7 +628,8 @@ msgid "11 drawing modes!" msgstr "11 режимов отрисовки!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "Установите любой цвет или градиент для фона или переднего плана." #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:13 diff --git a/NickvisionCavalier.Shared/Resources/po/tr.po b/NickvisionCavalier.Shared/Resources/po/tr.po index 8bba1d5..aaefe98 100644 --- a/NickvisionCavalier.Shared/Resources/po/tr.po +++ b/NickvisionCavalier.Shared/Resources/po/tr.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-08 10:00+0000\n" "Last-Translator: Sabri Ünal \n" -"Language-Team: Turkish \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1091 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1210 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:44 msgid "Add" msgstr "Ekle" @@ -28,17 +28,17 @@ msgstr "Ekle" msgid "Add New Profile" msgstr "Yeni Profil Ekle" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 #, csharp-format msgid "Are you sure you want to delete profile \"{0}\"?" msgstr "“{0}” profilini silmek istediğinizden emin misiniz?" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:964 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1083 #: ../../../../NickvisionCavalier.GNOME/Controls/AddProfileDialog.cs:41 msgid "Cancel" msgstr "İptal" -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:62 #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:13 #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:13 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:4 @@ -46,11 +46,11 @@ msgstr "İptal" msgid "Cavalier" msgstr "Cavalier" -#: ../../../Controllers/MainWindowController.cs:70 +#: ../../../Controllers/MainWindowController.cs:71 msgid "Contributors on GitHub ❤️" msgstr "GitHub Katkıcıları ❤️" -#: ../../../Controllers/MainWindowController.cs:72 +#: ../../../Controllers/MainWindowController.cs:73 msgid "David Lapshin" msgstr "David Lapshin" @@ -58,21 +58,21 @@ msgstr "David Lapshin" msgid "Default" msgstr "Öntanımlı" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:967 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1086 msgid "Delete" msgstr "Sil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:962 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1081 msgid "Delete Profile" msgstr "Profil Sil" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Full" msgstr "Tam" -#: ../../../Controllers/MainWindowController.cs:68 -#: ../../../Controllers/MainWindowController.cs:71 +#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:72 msgid "Fyodor Sobolev" msgstr "Fyodor Sobolev" @@ -80,15 +80,15 @@ msgstr "Fyodor Sobolev" msgid "GitHub Repo" msgstr "GitHub Deposu" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:878 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:997 msgid "Hearts" msgstr "Kalpler" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1093 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1212 msgid "JPEG and PNG images" msgstr "JPEG ve PNG resimler" -#: ../../../Controllers/MainWindowController.cs:67 +#: ../../../Controllers/MainWindowController.cs:68 msgid "Matrix Chat" msgstr "Matrix Sohbet" @@ -96,19 +96,19 @@ msgstr "Matrix Sohbet" msgid "New color profile will be a copy of the current active profile." msgstr "Yeni renk profili, geçerli etkin profilin bir kopyası olacaktır." -#: ../../../Controllers/MainWindowController.cs:69 +#: ../../../Controllers/MainWindowController.cs:70 msgid "Nicholas Logozzo" msgstr "Nicholas Logozzo" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "Off" msgstr "Kapalı" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:734 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:847 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:818 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:965 msgid "On" msgstr "Açık" @@ -116,20 +116,20 @@ msgstr "Açık" msgid "Profile Name" msgstr "Profil Adı" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1090 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:1209 msgid "Select an image" msgstr "Resim seç" -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:729 -#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:842 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:813 +#: ../../../../NickvisionCavalier.GNOME/Views/PreferencesDialog.cs:960 msgid "Split Channels" msgstr "Kanalları Ayır" -#: ../../../Controllers/MainWindowController.cs:73 +#: ../../../Controllers/MainWindowController.cs:74 msgid "translator-credits" msgstr "Sabri Ünal " -#: ../../../Controllers/MainWindowController.cs:61 +#: ../../../Controllers/MainWindowController.cs:63 #: NickvisionCavalier.Shared/org.nickvision.cavalier.desktop.in:5 #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:7 msgid "Visualize audio with CAVA" @@ -152,7 +152,7 @@ msgstr "" "sesinizin canlandığını görün!" #: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:10 -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:138 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:158 #: NickvisionCavalier.GNOME/Blueprints/window.blp:5 msgid "Preferences" msgstr "Tercihler" @@ -415,23 +415,61 @@ msgstr "Kyu" msgid "Foreground Colors" msgstr "Ön Plan Rengi" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:545 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:531 +#, fuzzy +msgid "Add foreground color" +msgstr "Ön Plan Rengi" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:546 msgid "Background Colors" msgstr "Arka Plan Rengi" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:565 -msgid "Image" +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:553 +#, fuzzy +msgid "Add background color" +msgstr "Arka Plan Rengi" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:567 +#, fuzzy +msgid "Images" msgstr "Resim" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:582 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:581 +#, fuzzy +msgid "Background" +msgstr "Arka Plan Rengi" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:586 +#, fuzzy +msgid "Foreground" +msgstr "Ön Plan Rengi" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:601 msgid "Add Image" msgstr "Resim Ekle" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:593 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:612 msgid "Scale" msgstr "Ölçekle" -#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:642 +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:635 +msgid "Alpha" +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:656 +msgid "Foreground image is only shown with Box drawing modes." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:668 +#, fuzzy +msgid "No Images" +msgstr "Resim Yok" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:669 +msgid "Add an image to use it in Cavalier." +msgstr "" + +#: NickvisionCavalier.GNOME/Blueprints/preferences_dialog.blp:687 msgid "No Image" msgstr "Resim Yok" @@ -520,29 +558,50 @@ msgid "Change Background Image" msgstr "Arka Plan Resmini Değiştir" #: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:124 -msgid "Change Image Scale" +#, fuzzy +msgid "Change Background Image Scale" +msgstr "Arka Plan Resmini Değiştir" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:129 +#, fuzzy +msgid "Change Background Image Alpha" +msgstr "Arka Plan Resmini Değiştir" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:134 +#, fuzzy +msgid "Change Foreground Image" +msgstr "Arka Plan Resmini Değiştir" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:139 +#, fuzzy +msgid "Change Foreground Image Scale" msgstr "Resim Ölçeğini Değiştir" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:130 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:144 +#, fuzzy +msgid "Change Foreground Image Alpha" +msgstr "Arka Plan Resmini Değiştir" + +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:150 msgctxt "Shortcut" msgid "Application" msgstr "Uygulama" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:133 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 msgid "Toggle Fullscreen" msgstr "Tam Ekranı Aç/Kapat" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:143 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:163 #: NickvisionCavalier.GNOME/Blueprints/window.blp:6 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:148 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:168 #: NickvisionCavalier.GNOME/Blueprints/window.blp:7 msgid "About Cavalier" msgstr "Cavalier Hakkında" -#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:153 +#: NickvisionCavalier.GNOME/Blueprints/shortcuts_dialog.blp:173 #: NickvisionCavalier.GNOME/Blueprints/window.blp:8 msgid "Quit" msgstr "Çık" @@ -567,7 +626,8 @@ msgid "11 drawing modes!" msgstr "11 çizim kipi!" #: NickvisionCavalier.Shared/org.nickvision.cavalier.metainfo.xml.in:12 -msgid "Set any color or a gradient for background and foreground." +#, fuzzy +msgid "Set any color, a gradient or an image for background and foreground." msgstr "" "Arka plan ve ön plan için herhangi bir renk veya renk geçiçi ayarlayın." diff --git a/NickvisionCavalier.Shared/Resources/po/zh_Hant.po b/NickvisionCavalier.Shared/Resources/po/zh_Hant.po index 5dc73b5..febb5d0 100644 --- a/NickvisionCavalier.Shared/Resources/po/zh_Hant.po +++ b/NickvisionCavalier.Shared/Resources/po/zh_Hant.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-07 20:04+0300\n" +"POT-Creation-Date: 2023-09-12 00:15+0300\n" "PO-Revision-Date: 2023-08-12 17:18+0000\n" "Last-Translator: Wolf yuan \n" "Language-Team: Chinese (Traditional)