Completed
Pull Request — master (#19)
by John
09:10 queued 04:43
created

RendererDocument::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
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 ParserDocument
13
     */
14
    private $parserDocument;
15
16
    /**
17
     * @var FieldRendererFactory
18
     */
19
    private $fieldRendererFactory;
20
21
    /**
22
     * @var ImageManager
23
     */
24
    private $imageManager;
25
26
    /**
27
     * @param ParserDocument $parserDocument
28
     * @param FieldRendererFactory $fieldRendererFactory
29
     * @param ImageManager $imageManager
30
     */
31
    public function __construct(
32
        ParserDocument $parserDocument,
33
        FieldRendererFactory $fieldRendererFactory,
34
        ImageManager $imageManager
35
    ) {
36
        $this->parserDocument = $parserDocument;
37
        $this->fieldRendererFactory = $fieldRendererFactory;
38
        $this->imageManager = $imageManager;
39
    }
40
41
    /**
42
     * @param \SimpleXMLElement $xml
43
     * @param callable $fontResolver
44
     * @param callable $graphicResolver
45
     * @return Intervention\Image\Image
0 ignored issues
show
Bug introduced by
The type Graze\CiffRenderer\Rende...ntervention\Image\Image was not found. Did you mean Intervention\Image\Image? If so, make sure to prefix the type with \.
Loading history...
46
     */
47
    public function render(
48
        \SimpleXMLElement $xml,
49
        callable $fontResolver = null,
50
        callable $graphicResolver = null
51
    ) {
52
        $canvas = $this->imageManager->canvas(
53
            $this->parserDocument->getWidth($xml),
0 ignored issues
show
Bug introduced by
$this->parserDocument->getWidth($xml) of type double is incompatible with the type integer expected by parameter $width of Intervention\Image\ImageManager::canvas(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

53
            /** @scrutinizer ignore-type */ $this->parserDocument->getWidth($xml),
Loading history...
54
            $this->parserDocument->getHeight($xml),
0 ignored issues
show
Bug introduced by
$this->parserDocument->getHeight($xml) of type double is incompatible with the type integer expected by parameter $height of Intervention\Image\ImageManager::canvas(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

54
            /** @scrutinizer ignore-type */ $this->parserDocument->getHeight($xml),
Loading history...
55
            '#fff'
56
        );
57
58
        $fieldParsers = $this->parserDocument->getFieldParsers($xml);
59
        foreach ($fieldParsers as $fieldParser) {
60
            if (!$fieldParser->isDisplayed()) {
61
                continue;
62
            }
63
64
            $renderer = $this->fieldRendererFactory->getFieldRenderer($fieldParser);
65
            $image = $renderer->render(
66
                $this->imageManager,
67
                $fieldParser,
68
                $fontResolver,
69
                $graphicResolver
70
            );
71
72
            if (is_null($image)) {
73
                // nothing to render
74
                continue;
75
            }
76
77
            // Intervention/Image requires dimensions as ints
78
            $positionX = (int) ($fieldParser->getPositionX());
79
            $positionY = (int) ($fieldParser->getPositionY());
80
81
            $canvas->insert($image, 'top-left', $positionX, $positionY);
82
        }
83
84
        return $canvas;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $canvas returns the type Intervention\Image\Image which is incompatible with the documented return type Graze\CiffRenderer\Rende...ntervention\Image\Image.
Loading history...
85
    }
86
87
    /**
88
     * @return RendererDocument
89
     */
90
    public static function factory()
91
    {
92
        return new static(
93
            ParserDocument::factory(),
94
            FieldRendererFactory::factory(),
95
            new ImageManager()
96
        );
97
    }
98
}
99