Completed
Push — master ( 1f4ad9...320f5c )
by John
03:15
created

RendererDocument::factory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
ccs 0
cts 5
cp 0
crap 2
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 1
    public function __construct(
32
        ParserDocument $parserDocument,
33
        FieldRendererFactory $fieldRendererFactory,
34
        ImageManager $imageManager
35
    ) {
36 1
        $this->parserDocument = $parserDocument;
37 1
        $this->fieldRendererFactory = $fieldRendererFactory;
38 1
        $this->imageManager = $imageManager;
39 1
    }
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 1
    public function render(
48
        \SimpleXMLElement $xml,
49
        callable $fontResolver = null,
50
        callable $graphicResolver = null
51
    ) {
52 1
        $canvas = $this->imageManager->canvas(
53 1
            $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 1
            $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 1
        );
57
58 1
        $fieldParsers = $this->parserDocument->getFieldParsers($xml);
59 1
        foreach ($fieldParsers as $fieldParser) {
60 1
            if (!$fieldParser->isDisplayed()) {
61
                continue;
62
            }
63
64 1
            $renderer = $this->fieldRendererFactory->getFieldRenderer($fieldParser);
65 1
            $image = $renderer->render(
66 1
                $this->imageManager,
67 1
                $fieldParser,
68 1
                $fontResolver,
69
                $graphicResolver
70 1
            );
71
72 1
            if (is_null($image)) {
73
                // nothing to render
74
                continue;
75
            }
76
77
            // Intervention/Image requires dimensions as ints
78 1
            $positionX = (int) ($fieldParser->getPositionX());
79 1
            $positionY = (int) ($fieldParser->getPositionY());
80
81 1
            $canvas->insert($image, 'top-left', $positionX, $positionY);
82 1
        }
83
84 1
        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