| 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 #include "../include/fsdk_define.h" | 8 #include "../include/fsdk_define.h" |
| 9 | 9 |
| 10 DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bo
ttom, float right, float top) | 10 DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bo
ttom, float right, float top) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 pCropBoxArray->Add(new CPDF_Number(bottom)); | 35 pCropBoxArray->Add(new CPDF_Number(bottom)); |
| 36 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(right))); | 36 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(right))); |
| 37 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(top))); | 37 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(top))); |
| 38 pPageDict->SetAt("CropBox", pCropBoxArray); | 38 pPageDict->SetAt("CropBox", pCropBoxArray); |
| 39 } | 39 } |
| 40 | 40 |
| 41 | 41 |
| 42 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, float* left, fl
oat* bottom, float* right, float* top) | 42 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, float* left, fl
oat* bottom, float* right, float* top) |
| 43 { | 43 { |
| 44 if(!page) | 44 if(!page) |
| 45 » » return FALSE; | 45 » » return false; |
| 46 CPDF_Page* pPage = (CPDF_Page*)page; | 46 CPDF_Page* pPage = (CPDF_Page*)page; |
| 47 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 47 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; |
| 48 CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); | 48 CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); |
| 49 if(pArray) | 49 if(pArray) |
| 50 { | 50 { |
| 51 *left = pArray->GetFloat(0); | 51 *left = pArray->GetFloat(0); |
| 52 *bottom = pArray->GetFloat(1); | 52 *bottom = pArray->GetFloat(1); |
| 53 *right = pArray->GetFloat(2); | 53 *right = pArray->GetFloat(2); |
| 54 *top = pArray->GetFloat(3); | 54 *top = pArray->GetFloat(3); |
| 55 » » return TRUE; | 55 » » return true; |
| 56 } | 56 } |
| 57 » return FALSE; | 57 » return false; |
| 58 } | 58 } |
| 59 | 59 |
| 60 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, float* left, flo
at* bottom, float* right, float* top) | 60 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, float* left, flo
at* bottom, float* right, float* top) |
| 61 { | 61 { |
| 62 if(!page) | 62 if(!page) |
| 63 » » return FALSE; | 63 » » return false; |
| 64 CPDF_Page* pPage = (CPDF_Page*)page; | 64 CPDF_Page* pPage = (CPDF_Page*)page; |
| 65 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 65 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; |
| 66 CPDF_Array* pArray = pPageDict->GetArray("CropBox"); | 66 CPDF_Array* pArray = pPageDict->GetArray("CropBox"); |
| 67 if(pArray) | 67 if(pArray) |
| 68 { | 68 { |
| 69 *left = pArray->GetFloat(0); | 69 *left = pArray->GetFloat(0); |
| 70 *bottom = pArray->GetFloat(1); | 70 *bottom = pArray->GetFloat(1); |
| 71 *right = pArray->GetFloat(2); | 71 *right = pArray->GetFloat(2); |
| 72 *top = pArray->GetFloat(3); | 72 *top = pArray->GetFloat(3); |
| 73 » » return TRUE; | 73 » » return true; |
| 74 } | 74 } |
| 75 » return FALSE; | 75 » return false; |
| 76 } | 76 } |
| 77 | 77 |
| 78 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX
* matrix, FS_RECTF* clipRect) | 78 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX
* matrix, FS_RECTF* clipRect) |
| 79 { | 79 { |
| 80 if(!page) | 80 if(!page) |
| 81 » » return FALSE; | 81 » » return false; |
| 82 | 82 |
| 83 CFX_ByteTextBuf textBuf; | 83 CFX_ByteTextBuf textBuf; |
| 84 textBuf<<"q "; | 84 textBuf<<"q "; |
| 85 CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, cl
ipRect->top); | 85 CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, cl
ipRect->top); |
| 86 rect.Normalize(); | 86 rect.Normalize(); |
| 87 CFX_ByteString bsClipping; | 87 CFX_ByteString bsClipping; |
| 88 bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, rect.W
idth(), rect.Height()); | 88 bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, rect.W
idth(), rect.Height()); |
| 89 textBuf<<bsClipping; | 89 textBuf<<bsClipping; |
| 90 | 90 |
| 91 CFX_ByteString bsMatix; | 91 CFX_ByteString bsMatix; |
| 92 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b,matrix->c,m
atrix->d,matrix->e,matrix->f); | 92 bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b,matrix->c,m
atrix->d,matrix->e,matrix->f); |
| 93 textBuf<<bsMatix; | 93 textBuf<<bsMatix; |
| 94 | 94 |
| 95 | 95 |
| 96 CPDF_Page* pPage = (CPDF_Page*)page; | 96 CPDF_Page* pPage = (CPDF_Page*)page; |
| 97 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; | 97 CPDF_Dictionary* pPageDic = pPage->m_pFormDict; |
| 98 CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") :
NULL; | 98 CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") :
NULL; |
| 99 if(!pContentObj) | 99 if(!pContentObj) |
| 100 pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; | 100 pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; |
| 101 if(!pContentObj) | 101 if(!pContentObj) |
| 102 » » return FALSE; | 102 » » return false; |
| 103 | 103 |
| 104 CPDF_Dictionary* pDic = new CPDF_Dictionary; | 104 CPDF_Dictionary* pDic = new CPDF_Dictionary; |
| 105 CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic); | 105 CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic); |
| 106 » pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE); | 106 » pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), false, false); |
| 107 CPDF_Document* pDoc = pPage->m_pDocument; | 107 CPDF_Document* pDoc = pPage->m_pDocument; |
| 108 if(!pDoc) | 108 if(!pDoc) |
| 109 » » return FALSE; | 109 » » return false; |
| 110 pDoc->AddIndirectObject(pStream); | 110 pDoc->AddIndirectObject(pStream); |
| 111 | 111 |
| 112 pDic = new CPDF_Dictionary; | 112 pDic = new CPDF_Dictionary; |
| 113 CPDF_Stream* pEndStream = new CPDF_Stream(NULL,0, pDic); | 113 CPDF_Stream* pEndStream = new CPDF_Stream(NULL,0, pDic); |
| 114 » pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE); | 114 » pEndStream->SetData((const uint8_t*)" Q", 2, false, false); |
| 115 pDoc->AddIndirectObject(pEndStream); | 115 pDoc->AddIndirectObject(pEndStream); |
| 116 | 116 |
| 117 CPDF_Array* pContentArray = NULL; | 117 CPDF_Array* pContentArray = NULL; |
| 118 if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) | 118 if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) |
| 119 { | 119 { |
| 120 pContentArray = (CPDF_Array*)pContentObj; | 120 pContentArray = (CPDF_Array*)pContentObj; |
| 121 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjN
um()); | 121 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjN
um()); |
| 122 pContentArray->InsertAt(0, pRef); | 122 pContentArray->InsertAt(0, pRef); |
| 123 pContentArray->AddReference(pDoc,pEndStream); | 123 pContentArray->AddReference(pDoc,pEndStream); |
| 124 | 124 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 continue; | 174 continue; |
| 175 | 175 |
| 176 CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("
Matrix")); | 176 CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("
Matrix")); |
| 177 CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix; | 177 CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix; |
| 178 m.Concat(t); | 178 m.Concat(t); |
| 179 pDict->SetAtMatrix(FX_BSTRC("Matrix"), m); | 179 pDict->SetAtMatrix(FX_BSTRC("Matrix"), m); |
| 180 } | 180 } |
| 181 } | 181 } |
| 182 } | 182 } |
| 183 | 183 |
| 184 » return TRUE; | 184 » return true; |
| 185 } | 185 } |
| 186 | 186 |
| 187 DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object
,double a, double b, double c, double d, double e, double f) | 187 DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object
,double a, double b, double c, double d, double e, double f) |
| 188 { | 188 { |
| 189 CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; | 189 CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; |
| 190 if(pPageObj == NULL) | 190 if(pPageObj == NULL) |
| 191 return; | 191 return; |
| 192 CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,
(FX_FLOAT)e,(FX_FLOAT)f); | 192 CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,
(FX_FLOAT)e,(FX_FLOAT)f); |
| 193 | 193 |
| 194 //Special treatment to shading object, because the ClipPath for shading
object is already transformed. | 194 //Special treatment to shading object, because the ClipPath for shading
object is already transformed. |
| 195 if(pPageObj->m_Type != PDFPAGE_SHADING) | 195 if(pPageObj->m_Type != PDFPAGE_SHADING) |
| 196 pPageObj->TransformClipPath(matrix); | 196 pPageObj->TransformClipPath(matrix); |
| 197 pPageObj->TransformGeneralState(matrix); | 197 pPageObj->TransformGeneralState(matrix); |
| 198 } | 198 } |
| 199 | 199 |
| 200 | 200 |
| 201 DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, fl
oat right, float top) | 201 DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, fl
oat right, float top) |
| 202 { | 202 { |
| 203 CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath(); | 203 CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath(); |
| 204 pNewClipPath->GetModify(); | 204 pNewClipPath->GetModify(); |
| 205 CPDF_Path Path; | 205 CPDF_Path Path; |
| 206 Path.GetModify(); | 206 Path.GetModify(); |
| 207 Path.AppendRect(left, bottom, right, top); | 207 Path.AppendRect(left, bottom, right, top); |
| 208 » pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE); | 208 » pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, false); |
| 209 return pNewClipPath; | 209 return pNewClipPath; |
| 210 } | 210 } |
| 211 | 211 |
| 212 DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) | 212 DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) |
| 213 { | 213 { |
| 214 delete (CPDF_ClipPath*)clipPath; | 214 delete (CPDF_ClipPath*)clipPath; |
| 215 } | 215 } |
| 216 | 216 |
| 217 void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) | 217 void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) |
| 218 { | 218 { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 } else { | 275 } else { |
| 276 OutputPath(strClip, path); | 276 OutputPath(strClip, path); |
| 277 if (iClipType == FXFILL_WINDING) | 277 if (iClipType == FXFILL_WINDING) |
| 278 strClip << "W n\n"; | 278 strClip << "W n\n"; |
| 279 else | 279 else |
| 280 strClip << "W* n\n"; | 280 strClip << "W* n\n"; |
| 281 } | 281 } |
| 282 } | 282 } |
| 283 CPDF_Dictionary* pDic = new CPDF_Dictionary; | 283 CPDF_Dictionary* pDic = new CPDF_Dictionary; |
| 284 CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic); | 284 CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic); |
| 285 » pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE); | 285 » pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), false, false); |
| 286 CPDF_Document* pDoc = pPage->m_pDocument; | 286 CPDF_Document* pDoc = pPage->m_pDocument; |
| 287 if(!pDoc) | 287 if(!pDoc) |
| 288 return; | 288 return; |
| 289 pDoc->AddIndirectObject(pStream); | 289 pDoc->AddIndirectObject(pStream); |
| 290 | 290 |
| 291 CPDF_Array* pContentArray = NULL; | 291 CPDF_Array* pContentArray = NULL; |
| 292 if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) | 292 if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) |
| 293 { | 293 { |
| 294 pContentArray = (CPDF_Array*)pContentObj; | 294 pContentArray = (CPDF_Array*)pContentObj; |
| 295 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjN
um()); | 295 CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjN
um()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 311 { | 311 { |
| 312 pContentArray = new CPDF_Array(); | 312 pContentArray = new CPDF_Array(); |
| 313 pContentArray->AddReference(pDoc,pStream->GetObj
Num()); | 313 pContentArray->AddReference(pDoc,pStream->GetObj
Num()); |
| 314 pContentArray->AddReference(pDoc,pDirectObj->Get
ObjNum()); | 314 pContentArray->AddReference(pDoc,pDirectObj->Get
ObjNum()); |
| 315 pPageDic->SetAtReference("Contents", pDoc, pDoc-
>AddIndirectObject(pContentArray)); | 315 pPageDic->SetAtReference("Contents", pDoc, pDoc-
>AddIndirectObject(pContentArray)); |
| 316 } | 316 } |
| 317 } | 317 } |
| 318 } | 318 } |
| 319 } | 319 } |
| 320 | 320 |
| OLD | NEW |