From 97f4d67fbf0707feea298afa2f6471013185e066 Mon Sep 17 00:00:00 2001 Date: Mon, 4 Jun 2018 14:47:17 +0000 Subject: [PATCH] Add FPDFPath_GetMatrix() and FPDFPath_SetMatrix() APIs This is similar to the existing FPDFImageObj_SetMatrix(), but this exposes the matrix of CPDF_PathObject and provides both a getter and a setter. Change-Id: Ib90a64929dae1b2be3889eca57e4af822d7823be Reviewed-on: https://pdfium-review.googlesource.com/33670 Reviewed-by: dsinclair Commit-Queue: dsinclair --- fpdfsdk/fpdf_edit_embeddertest.cpp | 30 +++++++++++++++++++++++ fpdfsdk/fpdf_editpath.cpp | 49 +++++++++++++++++++++++++++++++++++++ fpdfsdk/fpdf_view_c_api_test.c | 2 ++ public/fpdf_edit.h | 50 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 131 insertions(+) diff --git a/fpdfsdk/fpdf_editpath.cpp b/fpdfsdk/fpdf_editpath.cpp index 558a8e3de..368c37416 100644 --- a/fpdfsdk/fpdf_editpath.cpp +++ b/fpdfsdk/fpdf_editpath.cpp @@ -253,6 +253,55 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path, return true; } +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetMatrix(FPDF_PAGEOBJECT path, + double* a, + double* b, + double* c, + double* d, + double* e, + double* f) { + if (!path || !a || !b || !c || !d || !e || !f) + return false; + + CPDF_PathObject* pPathObj = CPDFPathObjectFromFPDFPageObject(path); + if (!pPathObj) + return false; + + *a = pPathObj->m_Matrix.a; + *b = pPathObj->m_Matrix.b; + *c = pPathObj->m_Matrix.c; + *d = pPathObj->m_Matrix.d; + *e = pPathObj->m_Matrix.e; + *f = pPathObj->m_Matrix.f; + + return true; +} + +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetMatrix(FPDF_PAGEOBJECT path, + double a, + double b, + double c, + double d, + double e, + double f) { + if (!path) + return false; + + CPDF_PathObject* pPathObj = CPDFPathObjectFromFPDFPageObject(path); + if (!pPathObj) + return false; + + pPathObj->m_Matrix.a = a; + pPathObj->m_Matrix.b = b; + pPathObj->m_Matrix.c = c; + pPathObj->m_Matrix.d = d; + pPathObj->m_Matrix.e = e; + pPathObj->m_Matrix.f = f; + pPathObj->SetDirty(true); + + return true; +} + FPDF_EXPORT void FPDF_CALLCONV FPDFPath_SetLineJoin(FPDF_PAGEOBJECT path, int line_join) { if (!path) diff --git a/public/fpdf_edit.h b/public/fpdf_edit.h index 2faa9ecba..4c870149b 100644 --- a/public/fpdf_edit.h +++ b/public/fpdf_edit.h @@ -920,6 +920,56 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetDrawMode(FPDF_PAGEOBJECT path, int* fillmode, FPDF_BOOL* stroke); +// Experimental API. +// Get the transform matrix of a path. +// +// path - handle to a path. +// a - matrix value. +// b - matrix value. +// c - matrix value. +// d - matrix value. +// e - matrix value. +// f - matrix value. +// +// The matrix is composed as: +// |a c e| +// |b d f| +// and used to scale, rotate, shear and translate the path. +// +// Returns TRUE on success. +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_GetMatrix(FPDF_PAGEOBJECT path, + double* a, + double* b, + double* c, + double* d, + double* e, + double* f); + +// Experimental API. +// Set the transform matrix of a path. +// +// path - handle to a path. +// a - matrix value. +// b - matrix value. +// c - matrix value. +// d - matrix value. +// e - matrix value. +// f - matrix value. +// +// The matrix is composed as: +// |a c e| +// |b d f| +// and can be used to scale, rotate, shear and translate the path. +// +// Returns TRUE on success. +FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetMatrix(FPDF_PAGEOBJECT path, + double a, + double b, + double c, + double d, + double e, + double f); + // Create a new text object using one of the standard PDF fonts. // // document - handle to the document. -- 2.16.4