Merge branch 'hotfix/v9.2.0' into fix/bug-72300

This commit is contained in:
Kirill Polyakov
2025-10-27 19:37:13 +03:00
76 changed files with 1623 additions and 1086 deletions

View File

@ -768,7 +768,17 @@ bool CBooleanOperations::IsSelfInters(const CGraphicsPath& p)
GetIntersection();
return !Locations.empty();
if (Locations.empty())
return false;
else
{
for (const auto& l : Locations)
{
if (!isZero(l->Time) && !isZero(l->Time - 1.0) && l->C.Segment2.Index != l->Inters->C.Segment1.Index)
return true;
}
}
return false;
}
void CBooleanOperations::TraceBoolean()
@ -2338,17 +2348,19 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1,
std::vector<CGraphicsPath> paths1 = path1.GetSubPaths(),
paths2 = path2.GetSubPaths(),
paths;
int skip_end1 = -1;
for (size_t i = 0; i < paths2.size(); i++)
{
int skip_end2 = -1;
CBooleanOperations o;
if (o.IsSelfInters(paths2[i]))
if (i > skip_end2 && o.IsSelfInters(paths2[i]))
{
CBooleanOperations operation(paths2[i], paths2[i], Intersection, fillType, isLuminosity);
CGraphicsPath p = std::move(operation.GetResult());
std::vector<CGraphicsPath> tmp_paths = p.GetSubPaths();
paths2[i] = tmp_paths[0];
skip_end2 = i + tmp_paths.size() - 1;
for (size_t k = 1; k < tmp_paths.size(); k++)
paths2.insert(paths2.begin() + i + k, tmp_paths[k]);
}
@ -2356,13 +2368,14 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1,
for (size_t j = 0; j < paths1.size(); j++)
{
CBooleanOperations o2;
if (o2.IsSelfInters(paths1[j]))
if (j > skip_end1 && o2.IsSelfInters(paths1[j]))
{
CBooleanOperations operation(paths1[j], paths1[j], Intersection, fillType, isLuminosity);
CGraphicsPath p = std::move(operation.GetResult());
std::vector<CGraphicsPath> tmp_paths = p.GetSubPaths();
paths1[j] = tmp_paths[0];
skip_end1 = j + tmp_paths.size() - 1;
for (size_t k = 1; k < tmp_paths.size(); k++)
paths1.insert(paths1.begin() + i + k, tmp_paths[k]);
}

View File

@ -161,7 +161,7 @@
},
{
"folder": "../../../common/",
"files": ["File.cpp", "Directory.cpp", "ByteBuilder.cpp", "Base64.cpp", "StringExt.cpp", "Path.cpp", "SystemUtils.cpp"]
"files": ["File.cpp", "Directory.cpp", "ByteBuilder.cpp", "Base64.cpp", "StringExt.cpp", "Path.cpp", "SystemUtils.cpp", "StringUTF32.cpp", "StringBuilder.cpp"]
},
{
"folder": "../../../../Common/3dParty/icu/icu/source/common/",
@ -252,8 +252,8 @@
"files": ["BaseItem.cpp", "ContText.cpp", "Paragraph.cpp", "Shape.cpp", "TextLine.cpp", "Table.cpp"]
},
{
"folder": "../../../common",
"files": ["StringUTF32.cpp", "StringBuilder.cpp"]
"folder": "../../../../OdfFile/Common",
"files": ["logging.cpp"]
}
]
}

View File

@ -621,6 +621,7 @@ function readAnnotType(reader, rec, readDoubleFunc, readDouble2Func, readStringF
oFont["vertical"] = readDoubleFunc.call(reader);
if (nFontFlag & (1 << 6))
oFont["actual"] = readStringFunc.call(reader);
oFont["rtl"] = (nFontFlag >> 7) & 1;
oFont["size"] = readDoubleFunc.call(reader);
oFont["color"] = [];
oFont["color"].push(readDouble2Func.call(reader));

View File

@ -137,7 +137,7 @@ CFile.prototype._UndoMergePages = function()
CFile.prototype._RedactPage = function(pageIndex, box, filler)
{
let dataFiller = (undefined !== filler.byteLength) ? new Float64Array(filler) : filler;
let dataFiller = (undefined !== filler.byteLength) ? new Uint8Array(filler) : filler;
return g_native_drawing_file["RedactPage"](pageIndex, box, dataFiller);
};

View File

@ -1046,7 +1046,7 @@ int main(int argc, char* argv[])
RELEASEARRAYOBJECTS(pFileData);
// SPLIT & MERGE
if (true)
if (false)
{
int nBufferLen = NULL;
BYTE* pBuffer = NULL;
@ -1513,6 +1513,8 @@ int main(int argc, char* argv[])
std::cout << "; font-actual:" << std::string((char*)(pAnnots + i), nPathLength) << "; ";
i += nPathLength;
}
if (nFontFlag & (1 << 7))
std::cout << "; dir:rtl; ";
nPathLength = READ_INT(pAnnots + i);
i += 4;