commit 80b7386ae8e7ccd3334e465afc617a17d8936a53
parent 412ca421b4b692a8d2ee162443f7a5fef17f4066
Author: Christian Grothoff <christian@grothoff.org>
Date: Sat, 16 Nov 2019 10:22:07 +0100
qr gen
Diffstat:
| M | src/main.c | | | 38 | +++++++++++++++++++++----------------- |
1 file changed, 21 insertions(+), 17 deletions(-)
diff --git a/src/main.c b/src/main.c
@@ -201,13 +201,6 @@ show_qrcode (const char *uri)
size_t height;
unsigned int scale;
- if (0 < qrDisplay.devicefd)
- scale = 8;
- else
- scale = 2;
-
- const unsigned int n_channels = 3;
-
qri = QRinput_new2 (0, QR_ECLEVEL_M);
if (NULL == qri)
{
@@ -246,22 +239,33 @@ show_qrcode (const char *uri)
QRinput_free (qri);
return;
}
- size = qrc->width * scale;
- size += 8 - (size % 8);
+
+ /* +8 for 4-pixels border */
+ size = GNUNET_MIN (qrDisplay.var_info.xres,
+ qrDisplay.var_info.yres);
+ scale = size / (qrc->width + 8);
+#if LEGACY
pixels = GNUNET_malloc (size * size * n_channels);
- for (unsigned int x = 0; x < size; x++)
- for (unsigned int y = 0; y < size; y++)
+#endif
+ xOff = 4 * scale;
+ yOff = 4 * scale;
+ if (qrDisplay.var_info.xres < qrDisplay.var_info.yres)
+ yOff += (qrDisplay.var_info.yres - qrDisplay.var_info.xres) / 2;
+ else
+ xOff += (qrDisplay.var_info.xres - qrDisplay.var_info.yres) / 2;
+ for (unsigned int x = xOff; x < size - xOff; x++)
+ for (unsigned int y = yOff; y < size - yOff; y++)
{
unsigned int off =
- (x * qrc->width / size) + (y * qrc->width / size) * qrc->width;
- for (unsigned int c = 0; c < n_channels; c++)
- pixels[(y * size + x) * n_channels + c] =
- (0 == (qrc->data[off] & 1)) ? 0xFF : 0x00;
+ ((x - xOff) * qrc->width / size) + ((y - yOff) * qrc->width / size)
+ * qrc->width;
+ qrDisplay.memory[y * size + x] =
+ (0 == (qrc->data[off] & 1)) ? 0xFF : 0x00;
}
QRcode_free (qrc);
QRinput_free (qri);
-
+#if LEGACY
if (0 < qrDisplay.devicefd)
{
width = qrDisplay.var_info.xres;
@@ -297,8 +301,8 @@ show_qrcode (const char *uri)
printf ("\n");
}
}
-
GNUNET_free (pixels);
+#endif
}