PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.4
Booking for Appointments and Events Calendar – Amelia v2.4.4
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / bacon / bacon-qr-code / src / Renderer / Module / DotsModule.php
ameliabooking / vendor / bacon / bacon-qr-code / src / Renderer / Module Last commit date
EdgeIterator 8 months ago DotsModule.php 8 months ago ModuleInterface.php 8 months ago RoundnessModule.php 8 months ago SquareModule.php 8 months ago
DotsModule.php
64 lines
1 <?php
2 declare(strict_types = 1);
3
4 namespace BaconQrCode\Renderer\Module;
5
6 use BaconQrCode\Encoder\ByteMatrix;
7 use BaconQrCode\Exception\InvalidArgumentException;
8 use BaconQrCode\Renderer\Path\Path;
9
10 /**
11 * Renders individual modules as dots.
12 */
13 final class DotsModule implements ModuleInterface
14 {
15 public const LARGE = 1;
16 public const MEDIUM = .8;
17 public const SMALL = .6;
18
19 /**
20 * @var float
21 */
22 private $size;
23
24 public function __construct(float $size)
25 {
26 if ($size <= 0 || $size > 1) {
27 throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)');
28 }
29
30 $this->size = $size;
31 }
32
33 public function createPath(ByteMatrix $matrix) : Path
34 {
35 $width = $matrix->getWidth();
36 $height = $matrix->getHeight();
37 $path = new Path();
38 $halfSize = $this->size / 2;
39 $margin = (1 - $this->size) / 2;
40
41 for ($y = 0; $y < $height; ++$y) {
42 for ($x = 0; $x < $width; ++$x) {
43 if (! $matrix->get($x, $y)) {
44 continue;
45 }
46
47 $pathX = $x + $margin;
48 $pathY = $y + $margin;
49
50 $path = $path
51 ->move($pathX + $this->size, $pathY + $halfSize)
52 ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size)
53 ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize)
54 ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY)
55 ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize)
56 ->close()
57 ;
58 }
59 }
60
61 return $path;
62 }
63 }
64