| <?php |
| |
| |
| |
| |
| |
|
|
| namespace PHPQRCode; |
|
|
| class FrameFiller { |
|
|
| public $width; |
| public $frame; |
| public $x; |
| public $y; |
| public $dir; |
| public $bit; |
|
|
| |
| public function __construct($width, &$frame) |
| { |
| $this->width = $width; |
| $this->frame = $frame; |
| $this->x = $width - 1; |
| $this->y = $width - 1; |
| $this->dir = -1; |
| $this->bit = -1; |
| } |
|
|
| |
| public function setFrameAt($at, $val) |
| { |
| $this->frame[$at['y']][$at['x']] = chr($val); |
| } |
|
|
| |
| public function getFrameAt($at) |
| { |
| return ord($this->frame[$at['y']][$at['x']]); |
| } |
|
|
| |
| public function next() |
| { |
| do { |
|
|
| if($this->bit == -1) { |
| $this->bit = 0; |
| return array('x'=>$this->x, 'y'=>$this->y); |
| } |
|
|
| $x = $this->x; |
| $y = $this->y; |
| $w = $this->width; |
|
|
| if($this->bit == 0) { |
| $x--; |
| $this->bit++; |
| } else { |
| $x++; |
| $y += $this->dir; |
| $this->bit--; |
| } |
|
|
| if($this->dir < 0) { |
| if($y < 0) { |
| $y = 0; |
| $x -= 2; |
| $this->dir = 1; |
| if($x == 6) { |
| $x--; |
| $y = 9; |
| } |
| } |
| } else { |
| if($y == $w) { |
| $y = $w - 1; |
| $x -= 2; |
| $this->dir = -1; |
| if($x == 6) { |
| $x--; |
| $y -= 8; |
| } |
| } |
| } |
| if($x < 0 || $y < 0) return null; |
|
|
| $this->x = $x; |
| $this->y = $y; |
|
|
| } while(ord($this->frame[$y][$x]) & 0x80); |
|
|
| return array('x'=>$x, 'y'=>$y); |
| } |
|
|
| } ; |