Completed
Push — refactor-04-parser-tests ( bd4663...403d11 )
by John
02:57
created

RendererDocument::factory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 0
cts 5
cp 0
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Graze\CiffRenderer\Renderer;
4
5
use Graze\CiffRenderer\Parser\ParserDocument;
6
use Graze\CiffRenderer\Renderer\FieldRenderer\FieldRendererFactory;
7
use Intervention\Image\ImageManager;
8
9
class RendererDocument
10
{
11
    /**
12
     * @var FieldRendererFactory
13
     */
14
    private $fieldRendererFactory;
15
16
    /**
17
     * @var ImageManager
18
     */
19
    private $imageManager;
20
21
    /**
22
     * @param FieldRendererFactory $fieldRendererFactory
23
     * @param ImageManager $imageManager
24
     */
25 1
    public function __construct(
26
        FieldRendererFactory $fieldRendererFactory,
27
        ImageManager $imageManager
28
    ) {
29 1
        $this->fieldRendererFactory = $fieldRendererFactory;
30 1
        $this->imageManager = $imageManager;
31 1
    }
32
33
    /**
34
     * @param ParserDocument $parserDocument
35
     * @param null|callable $fontResolver
36
     * @param null|callable $graphicResolver
37
     * @return \Intervention\Image\Image
38
     */
39 1
    public function render(
40
        ParserDocument $parserDocument,
41
        callable $fontResolver = null,
42
        callable $graphicResolver = null
43
    ) {
44 1
        $canvas = $this->imageManager->canvas(
45 1
            $parserDocument->getWidth(),
46 1
            $parserDocument->getHeight(),
47
            '#fff'
48 1
        );
49
50 1
        foreach ($parserDocument->getFieldParsers() as $fieldParser) {
51 1
            if (!$fieldParser->isDisplayed()) {
52
                continue;
53
            }
54
55 1
            $renderer = $this->fieldRendererFactory->getFieldRenderer($fieldParser);
56 1
            $image = $renderer->render(
57 1
                $this->imageManager,
58 1
                $fieldParser,
59 1
                $fontResolver,
60
                $graphicResolver
61 1
            );
62
63
            // Intervention/Image requires dimensions as ints
64 1
            $positionX = (int) ($fieldParser->getPositionX());
65 1
            $positionY = (int) ($fieldParser->getPositionY());
66
67 1
            $canvas->insert($image, 'top-left', $positionX, $positionY);
68 1
        }
69
70 1
        return $canvas;
71
    }
72
73
    /**
74
     * @return RendererDocument
75
     */
76
    public static function factory()
77
    {
78
        return new static(
79
            FieldRendererFactory::factory(),
80
            new ImageManager()
81
        );
82
    }
83
}
84