Index: core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp |
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp |
index de3a6572f25d41d0a5ec86b99229df3618b6c419..44492b1a54e31f4a7613d554c28d341135355a99 100644 |
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp |
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp |
@@ -6,6 +6,8 @@ |
#include "core/src/fpdfapi/fpdf_page/pageint.h" |
+#include <algorithm> |
+ |
#include "core/include/fpdfapi/fpdf_module.h" |
#include "core/include/fpdfapi/fpdf_page.h" |
#include "core/include/fpdfapi/fpdf_pageobj.h" |
@@ -13,6 +15,14 @@ |
#include "core/src/fpdfapi/fpdf_render/render_int.h" |
#include "third_party/base/stl_util.h" |
+namespace { |
+ |
+FX_FLOAT ClipFloat(FX_FLOAT f) { |
+ return std::max(0.0f, std::min(1.0f, f)); |
+} |
+ |
+} // namespace |
+ |
void CPDF_GraphicStates::DefaultStates() { |
m_ColorState.New()->Default(); |
} |
@@ -85,21 +95,21 @@ void CPDF_ClipPathData::SetCount(int path_count, int text_count) { |
m_pTextList = FX_Alloc(CPDF_TextObject*, text_count); |
} |
} |
-CPDF_Rect CPDF_ClipPath::GetClipBox() const { |
- CPDF_Rect rect; |
+CFX_FloatRect CPDF_ClipPath::GetClipBox() const { |
+ CFX_FloatRect rect; |
FX_BOOL bStarted = FALSE; |
int count = GetPathCount(); |
if (count) { |
rect = GetPath(0).GetBoundingBox(); |
for (int i = 1; i < count; i++) { |
- CPDF_Rect path_rect = GetPath(i).GetBoundingBox(); |
+ CFX_FloatRect path_rect = GetPath(i).GetBoundingBox(); |
rect.Intersect(path_rect); |
} |
bStarted = TRUE; |
} |
count = GetTextCount(); |
if (count) { |
- CPDF_Rect layer_rect; |
+ CFX_FloatRect layer_rect; |
FX_BOOL bLayerStarted = FALSE; |
for (int i = 0; i < count; i++) { |
CPDF_TextObject* pTextObj = GetText(i); |
@@ -128,9 +138,9 @@ void CPDF_ClipPath::AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge) { |
if (pData->m_PathCount && bAutoMerge) { |
CPDF_Path old_path = pData->m_pPathList[pData->m_PathCount - 1]; |
if (old_path.IsRect()) { |
- CPDF_Rect old_rect(old_path.GetPointX(0), old_path.GetPointY(0), |
- old_path.GetPointX(2), old_path.GetPointY(2)); |
- CPDF_Rect new_rect = path.GetBoundingBox(); |
+ CFX_FloatRect old_rect(old_path.GetPointX(0), old_path.GetPointY(0), |
+ old_path.GetPointX(2), old_path.GetPointY(2)); |
+ CFX_FloatRect new_rect = path.GetBoundingBox(); |
if (old_rect.Contains(new_rect)) { |
pData->m_PathCount--; |
pData->m_pPathList[pData->m_PathCount].SetNull(); |
@@ -534,10 +544,10 @@ void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, |
} |
break; |
case FXBSTR_ID('C', 'A', 0, 0): |
- pGeneralState->m_StrokeAlpha = PDF_ClipFloat(pObject->GetNumber()); |
+ pGeneralState->m_StrokeAlpha = ClipFloat(pObject->GetNumber()); |
break; |
case FXBSTR_ID('c', 'a', 0, 0): |
- pGeneralState->m_FillAlpha = PDF_ClipFloat(pObject->GetNumber()); |
+ pGeneralState->m_FillAlpha = ClipFloat(pObject->GetNumber()); |
break; |
case FXBSTR_ID('O', 'P', 0, 0): |
pGeneralState->m_StrokeOP = pObject->GetInteger(); |