From 85776d2db9dd602e444ff666f230d86418b2c778 Mon Sep 17 00:00:00 2001 From: smiley Date: Fri, 8 Sep 2023 21:13:08 +0200 Subject: [PATCH] :octocat: re-introduce QRMatrix::flip() (6c66d56a31b558d3474b259feba777bc4ae25f2b) as bitmask rework (#205) won't happen any time soon --- src/Data/QRMatrix.php | 16 ++++++++++++++-- tests/Data/QRMatrixTest.php | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Data/QRMatrix.php b/src/Data/QRMatrix.php index 68a0b4f88..9f1ee3bfb 100755 --- a/src/Data/QRMatrix.php +++ b/src/Data/QRMatrix.php @@ -314,6 +314,18 @@ class QRMatrix{ return $this; } + /** + * Flips the value of the module at ($x, $y) + */ + public function flip(int $x, int $y):self{ + + if(isset($this->matrix[$y][$x])){ + $this->matrix[$y][$x] ^= $this::IS_DARK; + } + + return $this; + } + /** * Checks whether the module at ($x, $y) is of the given $M_TYPE * @@ -617,7 +629,7 @@ class QRMatrix{ continue; } - $this->set($x, $y, ($val & $this::IS_DARK) !== $this::IS_DARK, $val); + $this->flip($x, $y); } } @@ -774,7 +786,7 @@ class QRMatrix{ } if($mask($x, $y)){ - $this->set($x, $y, ($val & $this::IS_DARK) !== $this::IS_DARK, $val); + $this->flip($x, $y); } } } diff --git a/tests/Data/QRMatrixTest.php b/tests/Data/QRMatrixTest.php index 47c1dfb26..84ebebb59 100755 --- a/tests/Data/QRMatrixTest.php +++ b/tests/Data/QRMatrixTest.php @@ -518,6 +518,26 @@ final class QRMatrixTest extends TestCase{ (new QRCode($o))->addByteSegment('testdata')->getQRMatrix()->setLogoSpace(37, 37); } + /** + * Tests flipping the value of a module + */ + public function testFlip():void{ + $this->matrix->set(20, 20, true, QRMatrix::M_TEST); + + // cover checkType() + $this::assertTrue($this->matrix->checkType(20, 20, QRMatrix::M_TEST)); + // verify the current state (dark) + $this::assertSame(QRMatrix::M_TEST_DARK, $this->matrix->get(20, 20)); + // flip + $this->matrix->flip(20, 20); + // verify flip + $this::assertSame(QRMatrix::M_TEST, $this->matrix->get(20, 20)); + // flip again + $this->matrix->flip(20, 20); + // verify flip + $this::assertSame(QRMatrix::M_TEST_DARK, $this->matrix->get(20, 20)); + } + /** * Tests checking whether the M_TYPE of a module is not one of an array of M_TYPES */