1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX
#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX
#include <drawinglayer/drawinglayerdllapi.h>
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
#include <basegfx/color/bcolor.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <com/sun/star/table/BorderLineStyle.hpp>
namespace drawinglayer
{
namespace primitive2d
{
/** BorderLinePrimitive2D class
This is the basic primitive to build frames around objects, e.g. tables.
It defines a single or double line from Start to End using the LeftWidth,
Distance and RightWidth definitions.
The LineStart/End overlap is defined by the Extend(Left|Right)(Start|End)
definitions.
*/
class DRAWINGLAYER_DLLPUBLIC BorderLinePrimitive2D : public BufferedDecompositionPrimitive2D
{
private:
/// the line definition
basegfx::B2DPoint maStart;
basegfx::B2DPoint maEnd;
/// the widths of single/double line
double mfLeftWidth;
double mfDistance;
double mfRightWidth;
/// edge overlap sizes
double mfExtendLeftStart;
double mfExtendLeftEnd;
double mfExtendRightStart;
double mfExtendRightEnd;
/// the line colors
basegfx::BColor maRGBColorRight;
basegfx::BColor maRGBColorLeft;
basegfx::BColor maRGBColorGap;
bool mbHasGapColor;
short mnStyle;
double mfPatternScale;
/// local helpers
double getWidth(
const geometry::ViewInformation2D& rViewInformation) const;
bool isSolidLine() const
{
return mnStyle == com::sun::star::table::BorderLineStyle::SOLID;
}
bool isInsideUsed() const
{
return !basegfx::fTools::equalZero(mfLeftWidth);
}
bool isOutsideUsed() const
{
return !basegfx::fTools::equalZero(mfRightWidth);
}
protected:
virtual basegfx::B2DPolyPolygon getClipPolygon(
const geometry::ViewInformation2D& rViewInformation) const;
/// create local decomposition
virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const override;
public:
/// constructor
BorderLinePrimitive2D(
const basegfx::B2DPoint& rStart,
const basegfx::B2DPoint& rEnd,
double fLeftWidth,
double fDistance,
double fRightWidth,
double fExtendLeftStart,
double fExtendLeftEnd,
double fExtendRightStart,
double fExtendRightEnd,
const basegfx::BColor& rRGBColorRight,
const basegfx::BColor& rRGBColorLeft,
const basegfx::BColor& rRGBColorGap,
bool bHasGapColor,
const short nStyle,
double fPatternScale = 1.0 );
/// data read access
const basegfx::B2DPoint& getStart() const { return maStart; }
const basegfx::B2DPoint& getEnd() const { return maEnd; }
double getLeftWidth() const { return mfLeftWidth; }
double getDistance() const { return mfDistance; }
double getRightWidth() const { return mfRightWidth; }
double getExtendLeftStart() const { return mfExtendLeftStart; }
double getExtendLeftEnd() const { return mfExtendLeftEnd; }
double getExtendRightStart() const { return mfExtendRightStart; }
double getExtendRightEnd() const { return mfExtendRightEnd; }
const basegfx::BColor& getRGBColorRight () const { return maRGBColorRight; }
const basegfx::BColor& getRGBColorLeft () const { return maRGBColorLeft; }
const basegfx::BColor& getRGBColorGap () const { return maRGBColorGap; }
bool hasGapColor( ) const { return mbHasGapColor; }
short getStyle () const { return mnStyle; }
double getPatternScale() const { return mfPatternScale; }
/// compare operator
virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
/// provide unique ID
DeclPrimitive2DIDBlock()
};
} // end of namespace primitive2d
} // end of namespace drawinglayer
#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|