summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fpdfapi/page/cpdf_page.cpp26
-rw-r--r--core/fpdfapi/page/cpdf_page.h12
2 files changed, 38 insertions, 0 deletions
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index eb1f0b535d..06043ead35 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -118,6 +118,32 @@ CFX_FloatRect CPDF_Page::GetBox(const ByteString& name) const {
return box;
}
+void CPDF_Page::DeviceToPage(const FX_RECT& rect,
+ int rotate,
+ const CFX_PointF& device_point,
+ double* page_x,
+ double* page_y) const {
+ CFX_Matrix page2device = GetDisplayMatrix(rect, rotate);
+ CFX_PointF pos = page2device.GetInverse().Transform(device_point);
+
+ *page_x = pos.x;
+ *page_y = pos.y;
+}
+
+void CPDF_Page::PageToDevice(const FX_RECT& rect,
+ int rotate,
+ double page_x,
+ double page_y,
+ int* device_x,
+ int* device_y) const {
+ CFX_Matrix page2device = GetDisplayMatrix(rect, rotate);
+ CFX_PointF pos = page2device.Transform(
+ CFX_PointF(static_cast<float>(page_x), static_cast<float>(page_y)));
+
+ *device_x = FXSYS_round(pos.x);
+ *device_y = FXSYS_round(pos.y);
+}
+
CFX_Matrix CPDF_Page::GetDisplayMatrix(const FX_RECT& rect, int iRotate) const {
if (m_PageSize.width == 0 || m_PageSize.height == 0)
return CFX_Matrix();
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index 39c1b72c27..d199ea41db 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -33,6 +33,18 @@ class CPDF_Page : public CPDF_PageObjectHolder {
void ParseContent();
+ void DeviceToPage(const FX_RECT& rect,
+ int rotate,
+ const CFX_PointF& device_point,
+ double* page_x,
+ double* page_y) const;
+ void PageToDevice(const FX_RECT& rect,
+ int rotate,
+ double page_x,
+ double page_y,
+ int* device_x,
+ int* device_y) const;
+
CFX_Matrix GetDisplayMatrix(const FX_RECT& rect, int iRotate) const;
float GetPageWidth() const { return m_PageSize.width; }