| Index: fpdfsdk/src/fpdf_flatten.cpp
 | 
| diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp
 | 
| index 9aee35f7608ebfea531152edef7b1048d0b4e825..759f758e5ef56ef26d26ef2d880af77cb7a92aa9 100644
 | 
| --- a/fpdfsdk/src/fpdf_flatten.cpp
 | 
| +++ b/fpdfsdk/src/fpdf_flatten.cpp
 | 
| @@ -11,12 +11,12 @@
 | 
|  #include "fpdfsdk/include/fsdk_define.h"
 | 
|  
 | 
|  typedef CFX_ArrayTemplate<CPDF_Dictionary*> CPDF_ObjectArray;
 | 
| -typedef CFX_ArrayTemplate<CPDF_Rect> CPDF_RectArray;
 | 
| +typedef CFX_ArrayTemplate<CFX_FloatRect> CPDF_RectArray;
 | 
|  
 | 
|  enum FPDF_TYPE { MAX, MIN };
 | 
|  enum FPDF_VALUE { TOP, LEFT, RIGHT, BOTTOM };
 | 
|  
 | 
| -FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage) {
 | 
| +FX_BOOL IsValiableRect(CFX_FloatRect rect, CFX_FloatRect rcPage) {
 | 
|    if (rect.left - rect.right > 0.000001f || rect.bottom - rect.top > 0.000001f)
 | 
|      return FALSE;
 | 
|  
 | 
| @@ -46,7 +46,7 @@ void GetContentsRect(CPDF_Document* pDoc,
 | 
|      if (!pPageObject)
 | 
|        continue;
 | 
|  
 | 
| -    CPDF_Rect rc;
 | 
| +    CFX_FloatRect rc;
 | 
|      rc.left = pPageObject->m_Left;
 | 
|      rc.right = pPageObject->m_Right;
 | 
|      rc.bottom = pPageObject->m_Bottom;
 | 
| @@ -62,7 +62,7 @@ void ParserStream(CPDF_Dictionary* pPageDic,
 | 
|                    CPDF_ObjectArray* pObjectArray) {
 | 
|    if (!pStream)
 | 
|      return;
 | 
| -  CPDF_Rect rect;
 | 
| +  CFX_FloatRect rect;
 | 
|    if (pStream->KeyExist("Rect"))
 | 
|      rect = pStream->GetRectBy("Rect");
 | 
|    else if (pStream->KeyExist("BBox"))
 | 
| @@ -127,25 +127,25 @@ FX_FLOAT GetMinMaxValue(CPDF_RectArray& array,
 | 
|    switch (value) {
 | 
|      case LEFT: {
 | 
|        for (int i = 0; i < nRects; i++)
 | 
| -        pArray[i] = CPDF_Rect(array.GetAt(i)).left;
 | 
| +        pArray[i] = CFX_FloatRect(array.GetAt(i)).left;
 | 
|  
 | 
|        break;
 | 
|      }
 | 
|      case TOP: {
 | 
|        for (int i = 0; i < nRects; i++)
 | 
| -        pArray[i] = CPDF_Rect(array.GetAt(i)).top;
 | 
| +        pArray[i] = CFX_FloatRect(array.GetAt(i)).top;
 | 
|  
 | 
|        break;
 | 
|      }
 | 
|      case RIGHT: {
 | 
|        for (int i = 0; i < nRects; i++)
 | 
| -        pArray[i] = CPDF_Rect(array.GetAt(i)).right;
 | 
| +        pArray[i] = CFX_FloatRect(array.GetAt(i)).right;
 | 
|  
 | 
|        break;
 | 
|      }
 | 
|      case BOTTOM: {
 | 
|        for (int i = 0; i < nRects; i++)
 | 
| -        pArray[i] = CPDF_Rect(array.GetAt(i)).bottom;
 | 
| +        pArray[i] = CFX_FloatRect(array.GetAt(i)).bottom;
 | 
|  
 | 
|        break;
 | 
|      }
 | 
| @@ -166,8 +166,8 @@ FX_FLOAT GetMinMaxValue(CPDF_RectArray& array,
 | 
|    return fRet;
 | 
|  }
 | 
|  
 | 
| -CPDF_Rect CalculateRect(CPDF_RectArray* pRectArray) {
 | 
| -  CPDF_Rect rcRet;
 | 
| +CFX_FloatRect CalculateRect(CPDF_RectArray* pRectArray) {
 | 
| +  CFX_FloatRect rcRet;
 | 
|  
 | 
|    rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT);
 | 
|    rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP);
 | 
| @@ -245,8 +245,8 @@ void SetPageContents(CFX_ByteString key,
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -CFX_Matrix GetMatrix(CPDF_Rect rcAnnot,
 | 
| -                     CPDF_Rect rcStream,
 | 
| +CFX_Matrix GetMatrix(CFX_FloatRect rcAnnot,
 | 
| +                     CFX_FloatRect rcStream,
 | 
|                       const CFX_Matrix& matrix) {
 | 
|    if (rcStream.IsEmpty())
 | 
|      return CFX_Matrix();
 | 
| @@ -266,8 +266,8 @@ void GetOffset(FX_FLOAT& fa,
 | 
|                 FX_FLOAT& fd,
 | 
|                 FX_FLOAT& fe,
 | 
|                 FX_FLOAT& ff,
 | 
| -               CPDF_Rect rcAnnot,
 | 
| -               CPDF_Rect rcStream,
 | 
| +               CFX_FloatRect rcAnnot,
 | 
| +               CFX_FloatRect rcStream,
 | 
|                 const CFX_Matrix& matrix) {
 | 
|    FX_FLOAT fStreamWidth = 0.0f;
 | 
|    FX_FLOAT fStreamHeight = 0.0f;
 | 
| @@ -323,15 +323,15 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
 | 
|    if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL)
 | 
|      return iRet;
 | 
|  
 | 
| -  CPDF_Rect rcOriginalCB;
 | 
| -  CPDF_Rect rcMerger = CalculateRect(&RectArray);
 | 
| -  CPDF_Rect rcOriginalMB = pPageDict->GetRectBy("MediaBox");
 | 
| +  CFX_FloatRect rcOriginalCB;
 | 
| +  CFX_FloatRect rcMerger = CalculateRect(&RectArray);
 | 
| +  CFX_FloatRect rcOriginalMB = pPageDict->GetRectBy("MediaBox");
 | 
|  
 | 
|    if (pPageDict->KeyExist("CropBox"))
 | 
|      rcOriginalMB = pPageDict->GetRectBy("CropBox");
 | 
|  
 | 
|    if (rcOriginalMB.IsEmpty()) {
 | 
| -    rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f);
 | 
| +    rcOriginalMB = CFX_FloatRect(0.0f, 0.0f, 612.0f, 792.0f);
 | 
|    }
 | 
|  
 | 
|    rcMerger.left =
 | 
| @@ -407,7 +407,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
 | 
|      pNewOXbjectDic->SetAtName("Subtype", "Form");
 | 
|      pNewOXbjectDic->SetAtInteger("FormType", 1);
 | 
|      pNewOXbjectDic->SetAtName("Name", "FRM");
 | 
| -    CPDF_Rect rcBBox = pPageDict->GetRectBy("ArtBox");
 | 
| +    CFX_FloatRect rcBBox = pPageDict->GetRectBy("ArtBox");
 | 
|      pNewOXbjectDic->SetAtRect("BBox", rcBBox);
 | 
|    }
 | 
|  
 | 
| @@ -416,7 +416,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
 | 
|      if (!pAnnotDic)
 | 
|        continue;
 | 
|  
 | 
| -    CPDF_Rect rcAnnot = pAnnotDic->GetRectBy("Rect");
 | 
| +    CFX_FloatRect rcAnnot = pAnnotDic->GetRectBy("Rect");
 | 
|      rcAnnot.Normalize();
 | 
|  
 | 
|      CFX_ByteString sAnnotState = pAnnotDic->GetStringBy("AS");
 | 
| @@ -452,7 +452,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
 | 
|      CPDF_Dictionary* pAPDic = pAPStream->GetDict();
 | 
|      CFX_Matrix matrix = pAPDic->GetMatrixBy("Matrix");
 | 
|  
 | 
| -    CPDF_Rect rcStream;
 | 
| +    CFX_FloatRect rcStream;
 | 
|      if (pAPDic->KeyExist("Rect"))
 | 
|        rcStream = pAPDic->GetRectBy("Rect");
 | 
|      else if (pAPDic->KeyExist("BBox"))
 | 
| 
 |