diff --git a/README.md b/README.md
index 154517e..67fa519 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# QrCodes
Modern and efficient cross-platform QR code generation, rendering and serialization.
-It contains various payloads and framework helpers for MAUI.
### 🔥 Features 🔥
- Use SkiaSharp/ImageSharp instead of System.Drawing to be cross-platform.
- Support latest dotnet versions.
- Generate QR code with logo image.
-- Supports next payloads
+- Allows many different styles.
+- Supports many predefined payloads:
- BezahlCode
- Bitcoin like address
- Bookmark
@@ -33,11 +33,12 @@ It contains various payloads and framework helpers for MAUI.
- Base64
- SVG
- PostScript
+ - PDF
- FastPngRenderer - fast but not support all features
- Bitmap(.bmp) - fast but not support all features
- ImageSharp - powerful, allows many features and export formats
- SkiaSharp - powerful, allows many features and export formats
- - PDF - powered by ImageSharp
+ - System.Drawing - legacy, only windows, not support all features
- Supports helpers for MAUI
- QrCodeSource - ImageSource to produce QR code
- QrCodeExtension markup extension - Simplifies usage of QrCodeSource
@@ -77,7 +78,7 @@ You can test all variants using [QrCodes.SampleApp MAUI app](sample)
xmlns:qr="clr-namespace:QrCodes.Maui;assembly=QrCodes.Maui"
```
```xml
-
+
```
### Links
diff --git a/sample/DynamicExamplePage.xaml b/sample/DynamicExamplePage.xaml
index 3c00c5c..f1bd868 100644
--- a/sample/DynamicExamplePage.xaml
+++ b/sample/DynamicExamplePage.xaml
@@ -61,9 +61,9 @@
-
+
@@ -91,6 +91,7 @@
+
@@ -108,6 +109,7 @@
+
@@ -143,6 +145,12 @@
x:Name="DotStylePicker"
ItemsSource="{qr:Enum Type={x:Type renderers:BackgroundType}}"
SelectedItem="{x:Static renderers:BackgroundType.Rectangle}" />
+
+
@@ -162,6 +170,7 @@
Minimum="0"
Value="6" />
diff --git a/src/libs/Directory.Build.props b/src/libs/Directory.Build.props
index 5f035fa..a4cb8e6 100755
--- a/src/libs/Directory.Build.props
+++ b/src/libs/Directory.Build.props
@@ -9,7 +9,7 @@
- 0.9.3
+ 1.0.0
Modern cross-platform QR code generation, rendering and serialization.
qr;qrcode;qrcoder;cross-platform;logo;modern;net8
true
diff --git a/src/libs/QrCodes.Maui/QrCodeSource.cs b/src/libs/QrCodes.Maui/QrCodeSource.cs
index 527285e..fbffbec 100644
--- a/src/libs/QrCodes.Maui/QrCodeSource.cs
+++ b/src/libs/QrCodes.Maui/QrCodeSource.cs
@@ -23,6 +23,7 @@ namespace QrCodes.Maui;
[DependencyProperty("IconBackgroundColor", DefaultValueExpression = "Colors.Transparent", OnChanged = nameof(OnChanged))]
[DependencyProperty("BackgroundType", DefaultValue = BackgroundType.Circle, OnChanged = nameof(OnChanged))]
[DependencyProperty("DotStyle", DefaultValue = BackgroundType.Rectangle, OnChanged = nameof(OnChanged))]
+[DependencyProperty("ConnectDots", DefaultValue = true, OnChanged = nameof(OnChanged))]
[DependencyProperty("LogoSource")]
public partial class QrCodeSource : StreamImageSource
{
@@ -75,6 +76,7 @@ private Task RenderAsync(CancellationToken cancellationToken = default)
FileFormat = FileFormat,
Quality = Quality,
DotStyle = DotStyle,
+ ConnectDots = ConnectDots,
});
return Task.FromResult(stream);
diff --git a/src/libs/QrCodes.SkiaSharp/Renderers/SkiaSharpRenderer.cs b/src/libs/QrCodes.SkiaSharp/Renderers/SkiaSharpRenderer.cs
index 27d5010..95f0daf 100644
--- a/src/libs/QrCodes.SkiaSharp/Renderers/SkiaSharpRenderer.cs
+++ b/src/libs/QrCodes.SkiaSharp/Renderers/SkiaSharpRenderer.cs
@@ -155,6 +155,30 @@ private static void DrawQrCode(
default:
throw new ArgumentOutOfRangeException(nameof(settings), settings.BackgroundType, null);
}
+
+ if (settings is { ConnectDots: true, DotStyle: not BackgroundType.Rectangle })
+ {
+ if (modX < data.ModuleMatrix.Count - moduleOffset - 1 &&
+ data.ModuleMatrix[modY][modX] && data.ModuleMatrix[modY][modX + 1])
+ {
+ canvas.DrawRect(
+ x: (modX - moduleOffset + 0.5F) * settings.PixelsPerModule,
+ y: (modY - moduleOffset) * settings.PixelsPerModule,
+ w: settings.PixelsPerModule,
+ h: settings.PixelsPerModule,
+ paint: darkPaint);
+ }
+ if (modY < data.ModuleMatrix.Count - moduleOffset - 1 &&
+ data.ModuleMatrix[modY][modX] && data.ModuleMatrix[modY + 1][modX])
+ {
+ canvas.DrawRect(
+ x: (modX - moduleOffset) * settings.PixelsPerModule,
+ y: (modY - moduleOffset + 0.5F) * settings.PixelsPerModule,
+ w: settings.PixelsPerModule,
+ h: settings.PixelsPerModule,
+ paint: darkPaint);
+ }
+ }
}
}
}
diff --git a/src/libs/QrCodes/Renderers/Abstractions/RendererSettings.cs b/src/libs/QrCodes/Renderers/Abstractions/RendererSettings.cs
index aac3c54..92cd326 100644
--- a/src/libs/QrCodes/Renderers/Abstractions/RendererSettings.cs
+++ b/src/libs/QrCodes/Renderers/Abstractions/RendererSettings.cs
@@ -59,6 +59,11 @@ public class RendererSettings
///
public BackgroundType DotStyle { get; set; } = BackgroundType.Rectangle;
+ ///
+ /// Connect the dots with lines. Default - true.
+ ///
+ public bool ConnectDots { get; set; } = true;
+
///
///
///