Coverage Report

Created: 2026-04-29 07:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libmspub/src/lib/ShapeInfo.h
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/*
3
 * This file is part of the libmspub 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
10
#ifndef INCLUDED_SHAPEINFO_H
11
#define INCLUDED_SHAPEINFO_H
12
13
#include <functional>
14
#include <map>
15
#include <memory>
16
#include <vector>
17
18
#include <boost/optional.hpp>
19
20
#include "Arrow.h"
21
#include "ColorReference.h"
22
#include "Coordinate.h"
23
#include "Dash.h"
24
#include "Fill.h"
25
#include "Line.h"
26
#include "MSPUBTypes.h"
27
#include "Margins.h"
28
#include "PolygonUtils.h"
29
#include "Shadow.h"
30
#include "ShapeType.h"
31
#include "TableInfo.h"
32
#include "VerticalAlign.h"
33
34
namespace libmspub
35
{
36
void noop(const CustomShape *);
37
struct ShapeInfo
38
{
39
  boost::optional<ShapeType> m_type;
40
  boost::optional<ShapeType> m_cropType;
41
  boost::optional<unsigned> m_imgIndex;
42
  boost::optional<unsigned> m_borderImgIndex;
43
  boost::optional<Coordinate> m_coordinates;
44
  std::vector<Line> m_lines;
45
  boost::optional<unsigned> m_pageSeqNum;
46
  boost::optional<unsigned> m_textId;
47
  std::map<unsigned, int> m_adjustValuesByIndex;
48
  std::vector<int> m_adjustValues;
49
  boost::optional<double> m_rotation;
50
  boost::optional<std::pair<bool, bool> > m_flips;
51
  boost::optional<Margins> m_margins;
52
  boost::optional<BorderPosition> m_borderPosition; // Irrelevant except for rectangular shapes
53
  std::shared_ptr<const Fill> m_fill;
54
  boost::optional<DynamicCustomShape> m_customShape;
55
  bool m_stretchBorderArt;
56
  boost::optional<ColorReference> m_lineBackColor;
57
  boost::optional<Dash> m_dash;
58
  boost::optional<TableInfo> m_tableInfo;
59
  boost::optional<unsigned> m_numColumns;
60
  unsigned m_columnSpacing;
61
  boost::optional<Arrow> m_beginArrow;
62
  boost::optional<Arrow> m_endArrow;
63
  boost::optional<VerticalAlign> m_verticalAlign;
64
  boost::optional<ColorReference> m_pictureRecolor;
65
  boost::optional<Shadow> m_shadow;
66
  boost::optional<int> m_innerRotation;
67
  std::vector<libmspub::Vertex> m_clipPath;
68
  boost::optional<int> m_pictureBrightness;
69
  boost::optional<int> m_pictureContrast;
70
151k
  ShapeInfo() : m_type(), m_cropType(), m_imgIndex(), m_borderImgIndex(),
71
151k
    m_coordinates(), m_lines(), m_pageSeqNum(),
72
151k
    m_textId(), m_adjustValuesByIndex(), m_adjustValues(),
73
151k
    m_rotation(), m_flips(), m_margins(), m_borderPosition(),
74
151k
    m_fill(), m_customShape(), m_stretchBorderArt(false),
75
151k
    m_lineBackColor(), m_dash(), m_tableInfo(),
76
151k
    m_numColumns(),
77
151k
    m_columnSpacing(0), m_beginArrow(), m_endArrow(),
78
151k
    m_verticalAlign(), m_pictureRecolor(), m_shadow(), m_innerRotation(), m_clipPath(), m_pictureBrightness(), m_pictureContrast()
79
151k
  {
80
151k
  }
81
  std::shared_ptr<const CustomShape> getCustomShape() const
82
735k
  {
83
735k
    if (bool(m_customShape))
84
9.74k
    {
85
9.74k
      return getFromDynamicCustomShape(m_customShape.get());
86
9.74k
    }
87
726k
    if (bool(m_cropType))
88
710
    {
89
710
      return std::shared_ptr<const CustomShape>(
90
710
               libmspub::getCustomShape(m_cropType.get()),
91
710
               std::function<void (const CustomShape *)>(noop));
92
710
    }
93
725k
    return std::shared_ptr<const CustomShape>(
94
725k
             libmspub::getCustomShape(m_type.get_value_or(RECTANGLE)),
95
725k
             std::function<void (const CustomShape *)>(noop));
96
726k
  }
97
};
98
}
99
#endif
100
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */