CFX_FloatRect CPDF_ClipPath::GetClipBox() const { CFX_FloatRect rect; bool bStarted = false; if (GetPathCount() > 0) { rect = GetPath(0).GetBoundingBox(); for (size_t i = 1; i < GetPathCount(); ++i) { CFX_FloatRect path_rect = GetPath(i).GetBoundingBox(); rect.Intersect(path_rect); } bStarted = true; } CFX_FloatRect layer_rect; bool bLayerStarted = false; for (size_t i = 0; i < GetTextCount(); ++i) { CPDF_TextObject* pTextObj = GetText(i); if (pTextObj) { if (bLayerStarted) { layer_rect.Union(CFX_FloatRect(pTextObj->GetBBox())); } else { layer_rect = CFX_FloatRect(pTextObj->GetBBox()); bLayerStarted = true; } } else { if (bStarted) { rect.Intersect(layer_rect); } else { rect = layer_rect; bStarted = true; } bLayerStarted = false; } } return rect; }
CFX_FloatRect CPDF_ClipPath::GetClipBox() const { CFX_FloatRect rect; bool bStarted = false; int count = GetPathCount(); if (count) { rect = GetPath(0).GetBoundingBox(); for (int i = 1; i < count; i++) { CFX_FloatRect path_rect = GetPath(i).GetBoundingBox(); rect.Intersect(path_rect); } bStarted = true; } count = GetTextCount(); if (count) { CFX_FloatRect layer_rect; bool bLayerStarted = false; for (int i = 0; i < count; i++) { CPDF_TextObject* pTextObj = GetText(i); if (!pTextObj) { if (!bStarted) { rect = layer_rect; bStarted = true; } else { rect.Intersect(layer_rect); } bLayerStarted = false; } else { if (!bLayerStarted) { layer_rect = CFX_FloatRect(pTextObj->GetBBox(nullptr)); bLayerStarted = true; } else { layer_rect.Union(CFX_FloatRect(pTextObj->GetBBox(nullptr))); } } } } return rect; }