| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "public/fpdf_transformpage.h" | 7 #include "public/fpdf_transformpage.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/page/cpdf_clippath.h" | 9 #include "core/fpdfapi/page/cpdf_clippath.h" |
| 10 #include "core/fpdfapi/page/cpdf_page.h" | 10 #include "core/fpdfapi/page/cpdf_page.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 float* top) { | 93 float* top) { |
| 94 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 94 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 95 return pPage && GetBoundingBox(pPage, "CropBox", left, bottom, right, top); | 95 return pPage && GetBoundingBox(pPage, "CropBox", left, bottom, right, top); |
| 96 } | 96 } |
| 97 | 97 |
| 98 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, | 98 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, |
| 99 FS_MATRIX* matrix, | 99 FS_MATRIX* matrix, |
| 100 FS_RECTF* clipRect) { | 100 FS_RECTF* clipRect) { |
| 101 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 101 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 102 if (!pPage) | 102 if (!pPage) |
| 103 return FALSE; | 103 return false; |
| 104 | 104 |
| 105 CFX_ByteTextBuf textBuf; | 105 CFX_ByteTextBuf textBuf; |
| 106 textBuf << "q "; | 106 textBuf << "q "; |
| 107 CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, | 107 CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, |
| 108 clipRect->top); | 108 clipRect->top); |
| 109 rect.Normalize(); | 109 rect.Normalize(); |
| 110 CFX_ByteString bsClipping; | 110 CFX_ByteString bsClipping; |
| 111 bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, | 111 bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, |
| 112 rect.Width(), rect.Height()); | 112 rect.Width(), rect.Height()); |
| 113 textBuf << bsClipping; | 113 textBuf << bsClipping; |
| 114 | 114 |
| 115 CFX_ByteString bsMatix; | 115 CFX_ByteString bsMatix; |
| 116 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c, | 116 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c, |
| 117 matrix->d, matrix->e, matrix->f); | 117 matrix->d, matrix->e, matrix->f); |
| 118 textBuf << bsMatix; | 118 textBuf << bsMatix; |
| 119 | 119 |
| 120 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; | 120 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; |
| 121 CPDF_Object* pContentObj = | 121 CPDF_Object* pContentObj = |
| 122 pPageDic ? pPageDic->GetObjectFor("Contents") : nullptr; | 122 pPageDic ? pPageDic->GetObjectFor("Contents") : nullptr; |
| 123 if (!pContentObj) | 123 if (!pContentObj) |
| 124 pContentObj = pPageDic ? pPageDic->GetArrayFor("Contents") : nullptr; | 124 pContentObj = pPageDic ? pPageDic->GetArrayFor("Contents") : nullptr; |
| 125 if (!pContentObj) | 125 if (!pContentObj) |
| 126 return FALSE; | 126 return false; |
| 127 | 127 |
| 128 CPDF_Document* pDoc = pPage->m_pDocument; | 128 CPDF_Document* pDoc = pPage->m_pDocument; |
| 129 if (!pDoc) | 129 if (!pDoc) |
| 130 return FALSE; | 130 return false; |
| 131 | 131 |
| 132 CPDF_Dictionary* pDic = new CPDF_Dictionary(pDoc->GetByteStringPool()); | 132 CPDF_Dictionary* pDic = new CPDF_Dictionary(pDoc->GetByteStringPool()); |
| 133 CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic); | 133 CPDF_Stream* pStream = new CPDF_Stream(nullptr, 0, pDic); |
| 134 pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize()); | 134 pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize()); |
| 135 pDoc->AddIndirectObject(pStream); | 135 pDoc->AddIndirectObject(pStream); |
| 136 pDic = new CPDF_Dictionary(pDoc->GetByteStringPool()); | 136 pDic = new CPDF_Dictionary(pDoc->GetByteStringPool()); |
| 137 | 137 |
| 138 CPDF_Stream* pEndStream = new CPDF_Stream(nullptr, 0, pDic); | 138 CPDF_Stream* pEndStream = new CPDF_Stream(nullptr, 0, pDic); |
| 139 pEndStream->SetData((const uint8_t*)" Q", 2); | 139 pEndStream->SetData((const uint8_t*)" Q", 2); |
| 140 pDoc->AddIndirectObject(pEndStream); | 140 pDoc->AddIndirectObject(pEndStream); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 continue; | 185 continue; |
| 186 | 186 |
| 187 CFX_Matrix m = pDict->GetMatrixFor("Matrix"); | 187 CFX_Matrix m = pDict->GetMatrixFor("Matrix"); |
| 188 CFX_Matrix t = *(CFX_Matrix*)matrix; | 188 CFX_Matrix t = *(CFX_Matrix*)matrix; |
| 189 m.Concat(t); | 189 m.Concat(t); |
| 190 pDict->SetMatrixFor("Matrix", m); | 190 pDict->SetMatrixFor("Matrix", m); |
| 191 } | 191 } |
| 192 } | 192 } |
| 193 } | 193 } |
| 194 | 194 |
| 195 return TRUE; | 195 return true; |
| 196 } | 196 } |
| 197 | 197 |
| 198 DLLEXPORT void STDCALL | 198 DLLEXPORT void STDCALL |
| 199 FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object, | 199 FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object, |
| 200 double a, | 200 double a, |
| 201 double b, | 201 double b, |
| 202 double c, | 202 double c, |
| 203 double d, | 203 double d, |
| 204 double e, | 204 double e, |
| 205 double f) { | 205 double f) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 217 } | 217 } |
| 218 | 218 |
| 219 DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, | 219 DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, |
| 220 float bottom, | 220 float bottom, |
| 221 float right, | 221 float right, |
| 222 float top) { | 222 float top) { |
| 223 CPDF_Path Path; | 223 CPDF_Path Path; |
| 224 Path.AppendRect(left, bottom, right, top); | 224 Path.AppendRect(left, bottom, right, top); |
| 225 | 225 |
| 226 CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath(); | 226 CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath(); |
| 227 pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE); | 227 pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, false); |
| 228 return pNewClipPath; | 228 return pNewClipPath; |
| 229 } | 229 } |
| 230 | 230 |
| 231 DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) { | 231 DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) { |
| 232 delete (CPDF_ClipPath*)clipPath; | 232 delete (CPDF_ClipPath*)clipPath; |
| 233 } | 233 } |
| 234 | 234 |
| 235 void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) { | 235 void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) { |
| 236 const CFX_PathData* pPathData = path.GetObject(); | 236 const CFX_PathData* pPathData = path.GetObject(); |
| 237 if (!pPathData) | 237 if (!pPathData) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 } else if (pDirectObj->IsStream()) { | 327 } else if (pDirectObj->IsStream()) { |
| 328 pContentArray = new CPDF_Array(); | 328 pContentArray = new CPDF_Array(); |
| 329 pContentArray->AddReference(pDoc, pStream->GetObjNum()); | 329 pContentArray->AddReference(pDoc, pStream->GetObjNum()); |
| 330 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); | 330 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); |
| 331 pPageDic->SetReferenceFor("Contents", pDoc, | 331 pPageDic->SetReferenceFor("Contents", pDoc, |
| 332 pDoc->AddIndirectObject(pContentArray)); | 332 pDoc->AddIndirectObject(pContentArray)); |
| 333 } | 333 } |
| 334 } | 334 } |
| 335 } | 335 } |
| 336 } | 336 } |
| OLD | NEW |