Skip to content

Commit 85b6e2d

Browse files
committed
Merge pull request 'Fix bug 72950' (#245) from fix/bug-72950 into hotfix/v8.3.2
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/245
2 parents 43becd1 + a3878b3 commit 85b6e2d

File tree

119 files changed

+7261
-1103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+7261
-1103
lines changed

Common/3dParty/harfbuzz/test/main.cpp

+807
Large diffs are not rendered by default.

Common/3dParty/harfbuzz/test/test.pro

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CONFIG -= qt
2+
TARGET = test
3+
TEMPLATE = app
4+
CONFIG += console
5+
CONFIG -= app_bundle
6+
7+
CORE_ROOT_DIR = $$PWD/../../../../../core
8+
PWD_ROOT_DIR = $$PWD
9+
include($$CORE_ROOT_DIR/Common/base.pri)
10+
11+
include($$CORE_ROOT_DIR/DesktopEditor/graphics/pro/freetype.pri)
12+
include($$CORE_ROOT_DIR/Common/3dParty/harfbuzz/harfbuzz.pri)
13+
14+
SOURCES += main.cpp
15+
16+
ADD_DEPENDENCY(UnicodeConverter, kernel, graphics)
17+
DESTDIR = $$PWD/build
18+
19+

DesktopEditor/agg-2.4/include/agg_pixfmt_rgba.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,9 @@ namespace agg
207207
}
208208

209209
p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
210-
p[Order::R] = (value_type)((alpha * cr + a * r - ((a * r * alpha + base_mask) >> base_shift)) / p[Order::A]);
211-
p[Order::G] = (value_type)((alpha * cg + a * g - ((a * g * alpha + base_mask) >> base_shift)) / p[Order::A]);
212-
p[Order::B] = (value_type)((alpha * cb + a * b - ((a * b * alpha + base_mask) >> base_shift)) / p[Order::A]);
210+
if (r != cr) p[Order::R] = (value_type)((alpha * cr + a * r - ((a * r * alpha + base_mask) >> base_shift)) / p[Order::A]);
211+
if (g != cg) p[Order::G] = (value_type)((alpha * cg + a * g - ((a * g * alpha + base_mask) >> base_shift)) / p[Order::A]);
212+
if (b != cb) p[Order::B] = (value_type)((alpha * cb + a * b - ((a * b * alpha + base_mask) >> base_shift)) / p[Order::A]);
213213
}
214214

215215
static AGG_INLINE void blend_pix_subpix(value_type* p,

DesktopEditor/graphics/commands/AnnotField.cpp

+67-53
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
CAnnotFieldInfo::CAnnotFieldInfo() : IAdvancedCommand(AdvancedCommandType::Annotaion)
5050
{
51-
m_nType = -1;
51+
m_nType = EAnnotType::Unknown;
5252

5353
m_nFlag = 0;
5454
m_nID = 0;
@@ -94,118 +94,108 @@ CAnnotFieldInfo::~CAnnotFieldInfo()
9494
RELEASEOBJECT(m_pWidgetPr);
9595
}
9696

97+
void CAnnotFieldInfo::CreateMarkup()
98+
{
99+
RELEASEOBJECT(m_pMarkupPr);
100+
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
101+
}
97102
void CAnnotFieldInfo::SetType(int nType)
98103
{
99-
m_nType = nType;
100-
switch (nType)
104+
m_nType = static_cast<EAnnotType>(nType);
105+
switch (m_nType)
101106
{
102-
case 0:
107+
case EAnnotType::Text:
103108
{
104-
RELEASEOBJECT(m_pMarkupPr);
105-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
106-
109+
CreateMarkup();
107110
RELEASEOBJECT(m_pTextPr);
108111
m_pTextPr = new CAnnotFieldInfo::CTextAnnotPr();
109112
break;
110113
}
111-
case 2:
114+
case EAnnotType::FreeText:
112115
{
113-
RELEASEOBJECT(m_pMarkupPr);
114-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
115-
116+
CreateMarkup();
116117
RELEASEOBJECT(m_pFreeTextPr);
117118
m_pFreeTextPr = new CAnnotFieldInfo::CFreeTextAnnotPr();
118119
break;
119120
}
120-
case 3:
121+
case EAnnotType::Line:
121122
{
122-
RELEASEOBJECT(m_pMarkupPr);
123-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
124-
123+
CreateMarkup();
125124
RELEASEOBJECT(m_pLinePr);
126125
m_pLinePr = new CAnnotFieldInfo::CLineAnnotPr();
127126
break;
128127
}
129-
case 4:
130-
case 5:
128+
case EAnnotType::Square:
129+
case EAnnotType::Circle:
131130
{
132-
RELEASEOBJECT(m_pMarkupPr);
133-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
134-
131+
CreateMarkup();
135132
RELEASEOBJECT(m_pSquareCirclePr);
136133
m_pSquareCirclePr = new CAnnotFieldInfo::CSquareCircleAnnotPr();
137134
break;
138135
}
139-
case 6:
140-
case 7:
136+
case EAnnotType::PolygonLine:
137+
case EAnnotType::PolyLine:
141138
{
142-
RELEASEOBJECT(m_pMarkupPr);
143-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
144-
139+
CreateMarkup();
145140
RELEASEOBJECT(m_pPolygonLinePr);
146141
m_pPolygonLinePr = new CAnnotFieldInfo::CPolygonLineAnnotPr();
147142
break;
148143
}
149-
case 8:
150-
case 9:
151-
case 10:
152-
case 11:
144+
case EAnnotType::Highlight:
145+
case EAnnotType::Underline:
146+
case EAnnotType::Squiggly:
147+
case EAnnotType::Strikeout:
153148
{
154-
RELEASEOBJECT(m_pMarkupPr);
155-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
156-
149+
CreateMarkup();
157150
RELEASEOBJECT(m_pTextMarkupPr);
158151
m_pTextMarkupPr = new CAnnotFieldInfo::CTextMarkupAnnotPr();
159152
break;
160153
}
161-
case 12:
154+
case EAnnotType::Stamp:
162155
{
163-
RELEASEOBJECT(m_pMarkupPr);
164-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
165-
156+
CreateMarkup();
166157
RELEASEOBJECT(m_pStampPr);
167158
m_pStampPr = new CAnnotFieldInfo::CStampAnnotPr();
168159
break;
169160
}
170-
case 13:
161+
case EAnnotType::Caret:
171162
{
172-
RELEASEOBJECT(m_pMarkupPr);
173-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
174-
163+
CreateMarkup();
175164
RELEASEOBJECT(m_pCaretPr);
176165
m_pCaretPr = new CAnnotFieldInfo::CCaretAnnotPr();
177166
break;
178167
}
179-
case 14:
168+
case EAnnotType::Ink:
180169
{
181-
RELEASEOBJECT(m_pMarkupPr);
182-
m_pMarkupPr = new CAnnotFieldInfo::CMarkupAnnotPr();
183-
170+
CreateMarkup();
184171
RELEASEOBJECT(m_pInkPr);
185172
m_pInkPr = new CAnnotFieldInfo::CInkAnnotPr();
186173
break;
187174
}
188-
case 15:
175+
case EAnnotType::Popup:
189176
{
190177
RELEASEOBJECT(m_pPopupPr);
191178
m_pPopupPr = new CAnnotFieldInfo::CPopupAnnotPr();
192179
break;
193180
}
194-
case 26:
195-
case 27:
196-
case 28:
197-
case 29:
198-
case 30:
199-
case 31:
200-
case 32:
201-
case 33:
181+
case EAnnotType::Widget:
182+
case EAnnotType::WidgetPushButton:
183+
case EAnnotType::WidgetRadioButton:
184+
case EAnnotType::WidgetCheckBox:
185+
case EAnnotType::WidgetText:
186+
case EAnnotType::WidgetCombobox:
187+
case EAnnotType::WidgetListbox:
188+
case EAnnotType::WidgetSignature:
202189
{
203190
RELEASEOBJECT(m_pWidgetPr);
204191
m_pWidgetPr = new CAnnotFieldInfo::CWidgetAnnotPr(nType);
205192
break;
206193
}
194+
default:
195+
break;
207196
}
208197
}
198+
CAnnotFieldInfo::EAnnotType CAnnotFieldInfo::GetType() { return m_nType; }
209199

210200
void CAnnotFieldInfo::GetBounds(double& dX1, double& dY1, double& dX2, double& dY2)
211201
{
@@ -343,6 +333,7 @@ bool CAnnotFieldInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMeta
343333
if (nFlags & (1 << 3))
344334
{
345335
int n = pReader->ReadInt();
336+
m_arrC.reserve(n);
346337
for (int i = 0; i < n; ++i)
347338
m_arrC.push_back(pReader->ReadDouble());
348339
}
@@ -353,6 +344,7 @@ bool CAnnotFieldInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMeta
353344
if (m_oBorder.nType == 2)
354345
{
355346
int n = pReader->ReadInt();
347+
m_oBorder.arrDash.reserve(n);
356348
for (int i = 0; i < n; ++i)
357349
m_oBorder.arrDash.push_back(pReader->ReadDouble());
358350
}
@@ -428,6 +420,7 @@ void CAnnotFieldInfo::CMarkupAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
428420
if (nFlags & (1 << 3))
429421
{
430422
int nFont = pReader->ReadInt();
423+
m_arrRC.reserve(nFont);
431424
for (int i = 0; i < nFont; ++i)
432425
{
433426
CFontData* pFont = new CFontData();
@@ -480,6 +473,7 @@ void CAnnotFieldInfo::CInkAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader* p
480473
{
481474
std::vector<double> arrLine;
482475
int m = pReader->ReadInt();
476+
arrLine.reserve(m);
483477
for (int j = 0; j < m; ++j)
484478
arrLine.push_back(pReader->ReadDouble());
485479
if (!arrLine.empty())
@@ -512,6 +506,7 @@ void CAnnotFieldInfo::CLineAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader*
512506
if (nFlags & (1 << 16))
513507
{
514508
int n = pReader->ReadInt();
509+
m_arrIC.reserve(n);
515510
for (int i = 0; i < n; ++i)
516511
m_arrIC.push_back(pReader->ReadDouble());
517512
}
@@ -539,6 +534,7 @@ void CAnnotFieldInfo::CTextMarkupAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferRe
539534
{
540535
m_nSubtype = nType;
541536
int n = pReader->ReadInt();
537+
m_arrQuadPoints.reserve(n);
542538
for (int i = 0; i < n; ++i)
543539
m_arrQuadPoints.push_back(pReader->ReadDouble());
544540
}
@@ -559,6 +555,7 @@ void CAnnotFieldInfo::CSquareCircleAnnotPr::Read(NSOnlineOfficeBinToPdf::CBuffer
559555
if (nFlags & (1 << 16))
560556
{
561557
int n = pReader->ReadInt();
558+
m_arrIC.reserve(n);
562559
for (int i = 0; i < n; ++i)
563560
m_arrIC.push_back(pReader->ReadDouble());
564561
}
@@ -572,6 +569,7 @@ const std::vector<double>& CAnnotFieldInfo::CPolygonLineAnnotPr::GetVertices() {
572569
void CAnnotFieldInfo::CPolygonLineAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, BYTE nType, int nFlags)
573570
{
574571
int n = pReader->ReadInt();
572+
m_arrVertices.reserve(n);
575573
for (int i = 0; i < n; ++i)
576574
m_arrVertices.push_back(pReader->ReadDouble());
577575

@@ -584,6 +582,7 @@ void CAnnotFieldInfo::CPolygonLineAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferR
584582
if (nFlags & (1 << 16))
585583
{
586584
int n = pReader->ReadInt();
585+
m_arrIC.reserve(n);
587586
for (int i = 0; i < n; ++i)
588587
m_arrIC.push_back(pReader->ReadDouble());
589588
}
@@ -613,6 +612,7 @@ void CAnnotFieldInfo::CFreeTextAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferRead
613612
if (nFlags & (1 << 16))
614613
{
615614
int n = pReader->ReadInt();
615+
m_arrCL.reserve(n);
616616
for (int i = 0; i < n; ++i)
617617
m_arrCL.push_back(pReader->ReadDouble());
618618
}
@@ -625,6 +625,7 @@ void CAnnotFieldInfo::CFreeTextAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferRead
625625
if (nFlags & (1 << 21))
626626
{
627627
int n = pReader->ReadInt();
628+
m_arrIC.reserve(n);
628629
for (int i = 0; i < n; ++i)
629630
m_arrIC.push_back(pReader->ReadDouble());
630631
}
@@ -814,6 +815,7 @@ CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* ReadAction(NSOnlineOfficeBinToPd
814815
{
815816
pRes->nKind = pReader->ReadByte();
816817
int n = pReader->ReadInt();
818+
pRes->arrStr.reserve(n);
817819
for (int i = 0; i < n; ++i)
818820
pRes->arrStr.push_back(pReader->ReadString());
819821
break;
@@ -822,6 +824,7 @@ CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* ReadAction(NSOnlineOfficeBinToPd
822824
{
823825
pRes->nInt1 = pReader->ReadInt();
824826
int n = pReader->ReadInt();
827+
pRes->arrStr.reserve(n);
825828
for (int i = 0; i < n; ++i)
826829
pRes->arrStr.push_back(pReader->ReadString());
827830
break;
@@ -841,6 +844,7 @@ void CAnnotFieldInfo::CWidgetAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
841844
m_nFontStyle = pReader->ReadInt();
842845

843846
int n = pReader->ReadInt();
847+
m_arrTC.reserve(n);
844848
for (int i = 0; i < n; ++i)
845849
m_arrTC.push_back(pReader->ReadDouble());
846850

@@ -863,6 +867,7 @@ void CAnnotFieldInfo::CWidgetAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
863867
if (nFlags & (1 << 5))
864868
{
865869
int n = pReader->ReadInt();
870+
m_arrBC.reserve(n);
866871
for (int i = 0; i < n; ++i)
867872
m_arrBC.push_back(pReader->ReadDouble());
868873
}
@@ -871,6 +876,7 @@ void CAnnotFieldInfo::CWidgetAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
871876
if (nFlags & (1 << 7))
872877
{
873878
int n = pReader->ReadInt();
879+
m_arrBG.reserve(n);
874880
for (int i = 0; i < n; ++i)
875881
m_arrBG.push_back(pReader->ReadDouble());
876882
}
@@ -1006,6 +1012,7 @@ void CAnnotFieldInfo::CWidgetAnnotPr::CChoiceWidgetPr::Read(NSOnlineOfficeBinToP
10061012
if (nFlags & (1 << 10))
10071013
{
10081014
int n = pReader->ReadInt();
1015+
m_arrOpt.reserve(n);
10091016
for (int i = 0; i < n; ++i)
10101017
{
10111018
std::wstring s1 = pReader->ReadString();
@@ -1020,12 +1027,14 @@ void CAnnotFieldInfo::CWidgetAnnotPr::CChoiceWidgetPr::Read(NSOnlineOfficeBinToP
10201027
if (nFlags & (1 << 13))
10211028
{
10221029
int n = pReader->ReadInt();
1030+
m_arrV.reserve(n);
10231031
for (int i = 0; i < n; ++i)
10241032
m_arrV.push_back(pReader->ReadString());
10251033
}
10261034
if (nFlags & (1 << 14))
10271035
{
10281036
int n = pReader->ReadInt();
1037+
m_arrI.reserve(n);
10291038
for (int i = 0; i < n; ++i)
10301039
m_arrI.push_back(pReader->ReadInt());
10311040
}
@@ -1058,10 +1067,12 @@ const std::vector<CWidgetsInfo::CParent*>& CWidgetsInfo::GetParents() { return m
10581067
bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafileToRenderter* pCorrector)
10591068
{
10601069
int n = pReader->ReadInt();
1070+
m_arrCO.reserve(n);
10611071
for (int i = 0; i < n; ++i)
10621072
m_arrCO.push_back(pReader->ReadInt());
10631073

10641074
n = pReader->ReadInt();
1075+
m_arrParents.reserve(n);
10651076
for (int i = 0; i < n; ++i)
10661077
{
10671078
CParent* pParent = new CParent();
@@ -1077,6 +1088,7 @@ bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafil
10771088
if (nFlags & (1 << 3))
10781089
{
10791090
int n = pReader->ReadInt();
1091+
pParent->arrI.reserve(n);
10801092
for (int i = 0; i < n; ++i)
10811093
pParent->arrI.push_back(pReader->ReadInt());
10821094
}
@@ -1085,13 +1097,15 @@ bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafil
10851097
if (nFlags & (1 << 5))
10861098
{
10871099
int n = pReader->ReadInt();
1100+
pParent->arrV.reserve(n);
10881101
for (int i = 0; i < n; ++i)
10891102
pParent->arrV.push_back(pReader->ReadString());
10901103
}
10911104
m_arrParents.push_back(pParent);
10921105
}
10931106

10941107
n = pReader->ReadInt();
1108+
m_arrButtonImg.reserve(n);
10951109
for (int i = 0; i < n; ++i)
10961110
{
10971111
std::string sImagePath = pReader->ReadStringA();

0 commit comments

Comments
 (0)