Coverage Report

Created: 2026-06-30 11:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/svgio/inc/svgsvgnode.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#pragma once
21
22
#include "svgstyleattributes.hxx"
23
#include <memory>
24
25
namespace svgio::svgreader
26
    {
27
        class SvgSvgNode final : public SvgNode
28
        {
29
        private:
30
            /// use styles
31
            SvgStyleAttributes      maSvgStyleAttributes;
32
33
            /// variable scan values, dependent of given XAttributeList
34
            std::unique_ptr<basegfx::B2DRange>
35
                                    mpViewBox;
36
            SvgAspectRatio          maSvgAspectRatio;
37
            SvgNumber               maX;
38
            SvgNumber               maY;
39
            SvgNumber               maWidth;
40
            SvgNumber               maHeight;
41
            SvgNumber               maVersion;
42
43
            /// #i125258# bitfield
44
            bool                    mbStyleAttributesInitialized : 1;
45
46
            // #i125258# on-demand init hard attributes when this is the outmost svg element
47
            // and more (see implementation)
48
            void initializeStyleAttributes();
49
50
        public:
51
            SvgSvgNode(
52
                SvgDocument& rDocument,
53
                SvgNode* pParent);
54
            virtual ~SvgSvgNode() override;
55
56
            virtual const SvgStyleAttributes* getSvgStyleAttributes() const override;
57
            virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override;
58
            virtual void decomposeSvgNode(drawinglayer::primitive2d::Primitive2DContainer& rTarget, bool bReferenced) const override;
59
60
            /// Seeks width and height of viewport, which is current before the new viewport is set.
61
            // needed for percentage unit in x, y, width or height
62
            void seekReferenceWidth(double& fWidth, bool& bHasFound) const;
63
            void seekReferenceHeight(double& fHeight, bool& bHasFound) const;
64
65
            /// InfoProvider support for % values in children
66
            // The returned 'CurrentViewPort' is the viewport as it is set by this svg element
67
            // and as it is needed to resolve relative values in children
68
            // The method does not check for invalid width and height
69
            virtual basegfx::B2DRange getCurrentViewPort() const override;
70
71
            /// viewBox content
72
87
            const basegfx::B2DRange* getViewBox() const { return mpViewBox.get(); }
73
0
            void setViewBox(const basegfx::B2DRange* pViewBox) { mpViewBox.reset(); if(pViewBox) mpViewBox.reset( new basegfx::B2DRange(*pViewBox) ); }
74
75
            /// SvgAspectRatio content
76
0
            const SvgAspectRatio& getSvgAspectRatio() const { return maSvgAspectRatio; }
77
78
            /// x content
79
0
            const SvgNumber& getX() const { return maX; }
80
81
            /// y content
82
0
            const SvgNumber& getY() const { return maY; }
83
84
            /// width content
85
0
            const SvgNumber& getWidth() const { return maWidth; }
86
87
            /// height content
88
0
            const SvgNumber& getHeight() const { return maHeight; }
89
        };
90
91
} // end of namespace svgio::svgreader
92
93
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */