diff options
author | Shirleen Lou <xlou@chromium.org> | 2017-11-18 00:13:45 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-11-18 00:13:45 +0000 |
commit | 07b4727a34d2f4aff851f0dc420faf617caca220 (patch) | |
tree | b0290d7c6584be36e76a6892bd285afaf1b99461 | |
parent | ec2209da158750beeeaeaab5dd68e58424921c4a (diff) | |
download | pdfium-07b4727a34d2f4aff851f0dc420faf617caca220.tar.xz |
Make clip optional in FPDFPage_TransFormWithClip.chromium/3273
Add checks for matrix and clipRect in function
FPDFPage_TransFormWithClip. If both are null,
abort transformation. If either is null, skip
that particular transaction.
Change-Id: I65611508c064c0b929a11eace99ad532d3402138
Reviewed-on: https://pdfium-review.googlesource.com/18710
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
-rw-r--r-- | fpdfsdk/fpdf_transformpage.cpp | 20 | ||||
-rw-r--r-- | public/fpdf_transformpage.h | 22 |
2 files changed, 27 insertions, 15 deletions
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp index b607dffc4e..4f29fd69d6 100644 --- a/fpdfsdk/fpdf_transformpage.cpp +++ b/fpdfsdk/fpdf_transformpage.cpp @@ -106,19 +106,27 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX* matrix, FS_RECTF* clipRect) { + if (!matrix && !clipRect) + return false; + CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!pPage) return false; std::ostringstream textBuf; textBuf << "q "; - CFX_FloatRect rect = CFXFloatRectFromFSRECTF(*clipRect); - rect.Normalize(); - textBuf << ByteString::Format("%f %f %f %f re W* n ", rect.left, rect.bottom, - rect.Width(), rect.Height()); - textBuf << ByteString::Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, - matrix->c, matrix->d, matrix->e, matrix->f); + if (clipRect) { + CFX_FloatRect rect = CFXFloatRectFromFSRECTF(*clipRect); + rect.Normalize(); + + textBuf << ByteString::Format("%f %f %f %f re W* n ", rect.left, + rect.bottom, rect.Width(), rect.Height()); + } + if (matrix) { + textBuf << ByteString::Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, + matrix->c, matrix->d, matrix->e, matrix->f); + } CPDF_Dictionary* pPageDict = pPage->m_pFormDict.Get(); CPDF_Object* pContentObj = GetPageContent(pPageDict); diff --git a/public/fpdf_transformpage.h b/public/fpdf_transformpage.h index f26c077bde..a6ed04a511 100644 --- a/public/fpdf_transformpage.h +++ b/public/fpdf_transformpage.h @@ -84,15 +84,19 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetCropBox(FPDF_PAGE page, float* top); /** -* Transform the whole page with a specified matrix, then clip the page content -* region. -* -* @param[in] page - A page handle. -* @param[in] matrix - The transform matrix. -* @param[in] clipRect - A rectangle page area to be clipped. -* @Note. This function will transform the whole page, and would take effect to -* all the objects in the page. -*/ + * Apply transforms to |page|. + * + * If |matrix| is provided it will be applied to transform the page. + * If |clipRect| is provided it will be used to clip the resulting page. + * If neither |matrix| or |clipRect| are provided this method returns |false|. + * Returns |true| if transforms are applied. + * + * @param[in] page - Page handle. + * @param[in] matrix - Transform matrix. + * @param[in] clipRect - Clipping rectangle. + * @Note. This function will transform the whole page, and would take effect to + * all the objects in the page. + */ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX* matrix, |