Coverage Report

Created: 2026-07-10 11:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/basegfx/utils/unopolypolygon.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 <comphelper/compbase.hxx>
23
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
24
#include <com/sun/star/lang/XServiceInfo.hpp>
25
#include <com/sun/star/rendering/XLinePolyPolygon2D.hpp>
26
#include <com/sun/star/rendering/XBezierPolyPolygon2D.hpp>
27
#include <basegfx/polygon/b2dpolypolygon.hxx>
28
#include <basegfx/basegfxdllapi.h>
29
#include <o3tl/safeint.hxx>
30
31
namespace com::sun::star::rendering { enum class FillRule; }
32
33
namespace basegfx::unotools
34
{
35
    typedef comphelper::WeakComponentImplHelper<
36
            css::rendering::XLinePolyPolygon2D,
37
            css::rendering::XBezierPolyPolygon2D,
38
            css::lang::XServiceInfo > UnoPolyPolygonBase;
39
40
    class BASEGFX_DLLPUBLIC UnoPolyPolygon
41
        : public UnoPolyPolygonBase
42
    {
43
    public:
44
        explicit UnoPolyPolygon( B2DPolyPolygon );
45
46
        // XPolyPolygon2D
47
        SAL_DLLPRIVATE virtual void SAL_CALL addPolyPolygon( const css::geometry::RealPoint2D& position, const css::uno::Reference< css::rendering::XPolyPolygon2D >& polyPolygon ) override final;
48
        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygons(  ) override final;
49
        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygonPoints( ::sal_Int32 polygon ) override final;
50
        SAL_DLLPRIVATE virtual css::rendering::FillRule SAL_CALL getFillRule(  ) override final;
51
        SAL_DLLPRIVATE virtual void SAL_CALL setFillRule( css::rendering::FillRule fillRule ) override final;
52
        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL isClosed( ::sal_Int32 index ) override final;
53
        SAL_DLLPRIVATE virtual void SAL_CALL setClosed( ::sal_Int32 index, sal_Bool closedState ) override final;
54
55
        // XLinePolyPolygon2D
56
        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > > SAL_CALL getPoints( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) override final;
57
        SAL_DLLPRIVATE virtual void SAL_CALL setPoints( const css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > >& points, ::sal_Int32 nPolygonIndex ) override final;
58
        SAL_DLLPRIVATE virtual css::geometry::RealPoint2D SAL_CALL getPoint( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override final;
59
        SAL_DLLPRIVATE virtual void SAL_CALL setPoint( const css::geometry::RealPoint2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override final;
60
61
        // XBezierPolyPolygon2D
62
        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< css::geometry::RealBezierSegment2D > > SAL_CALL getBezierSegments( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) override final;
63
        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegments( const css::uno::Sequence< css::uno::Sequence< css::geometry::RealBezierSegment2D > >& points, ::sal_Int32 nPolygonIndex ) override final;
64
        SAL_DLLPRIVATE virtual css::geometry::RealBezierSegment2D SAL_CALL getBezierSegment( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override final;
65
        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegment( const css::geometry::RealBezierSegment2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override final;
66
67
        // XServiceInfo
68
        SAL_DLLPRIVATE virtual OUString SAL_CALL getImplementationName() override final;
69
        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override final;
70
        SAL_DLLPRIVATE virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override final;
71
72
        SAL_DLLPRIVATE B2DPolyPolygon getPolyPolygon() const;
73
74
    protected:
75
        /// Check whether index is a valid polygon index
76
        void checkIndex( sal_Int32 nIndex ) const // throw (css::lang::IndexOutOfBoundsException);
77
0
        {
78
0
            if( nIndex < 0 || o3tl::make_unsigned(nIndex) >= maPolyPoly.count() )
79
0
                throw css::lang::IndexOutOfBoundsException();
80
0
        }
81
82
        SAL_DLLPRIVATE B2DPolyPolygon getSubsetPolyPolygon( sal_Int32 nPolygonIndex,
83
                                             sal_Int32 nNumberOfPolygons,
84
                                             sal_Int32 nPointIndex,
85
                                             sal_Int32 nNumberOfPoints ) const;
86
87
        /// Get cow copy of internal polygon. not thread-safe outside this object.
88
        const B2DPolyPolygon& getPolyPolygonUnsafe() const
89
0
        {
90
0
            return maPolyPoly;
91
0
        }
92
93
        /// Called whenever internal polypolygon gets modified
94
0
        virtual void modifying() const {}
95
96
    private:
97
        UnoPolyPolygon(const UnoPolyPolygon&) = delete;
98
        UnoPolyPolygon& operator=(const UnoPolyPolygon&) = delete;
99
100
        B2DPolyPolygon                        maPolyPoly;
101
        css::rendering::FillRule              meFillRule;
102
    };
103
}
104
105
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */