Index: xfa/fxfa/app/xfa_ffpageview.cpp |
diff --git a/xfa/fxfa/app/xfa_ffpageview.cpp b/xfa/fxfa/app/xfa_ffpageview.cpp |
index fe2e3ab4b46609563285f9611abeea7b94d1f20c..a5217abe7ad3a08944e017b49871dc702d31e3b6 100644 |
--- a/xfa/fxfa/app/xfa_ffpageview.cpp |
+++ b/xfa/fxfa/app/xfa_ffpageview.cpp |
@@ -18,6 +18,58 @@ |
#include "xfa/fxfa/include/xfa_ffdocview.h" |
#include "xfa/fxfa/include/xfa_ffwidget.h" |
+namespace { |
+ |
+void GetPageMatrix(CFX_Matrix& pageMatrix, |
+ const CFX_RectF& docPageRect, |
+ const CFX_Rect& devicePageRect, |
+ int32_t iRotate, |
+ uint32_t dwCoordinatesType) { |
+ FXSYS_assert(iRotate >= 0 && iRotate <= 3); |
+ FX_BOOL bFlipX = (dwCoordinatesType & 0x01) != 0; |
+ FX_BOOL bFlipY = (dwCoordinatesType & 0x02) != 0; |
+ CFX_Matrix m; |
+ m.Set((bFlipX ? -1.0f : 1.0f), 0, 0, (bFlipY ? -1.0f : 1.0f), 0, 0); |
+ if (iRotate == 0 || iRotate == 2) { |
+ m.a *= (FX_FLOAT)devicePageRect.width / docPageRect.width; |
+ m.d *= (FX_FLOAT)devicePageRect.height / docPageRect.height; |
+ } else { |
+ m.a *= (FX_FLOAT)devicePageRect.height / docPageRect.width; |
+ m.d *= (FX_FLOAT)devicePageRect.width / docPageRect.height; |
+ } |
+ m.Rotate(iRotate * 1.57079632675f); |
+ switch (iRotate) { |
+ case 0: |
+ m.e = bFlipX ? (FX_FLOAT)devicePageRect.right() |
+ : (FX_FLOAT)devicePageRect.left; |
+ m.f = bFlipY ? (FX_FLOAT)devicePageRect.bottom() |
+ : (FX_FLOAT)devicePageRect.top; |
+ break; |
+ case 1: |
+ m.e = bFlipY ? (FX_FLOAT)devicePageRect.left |
+ : (FX_FLOAT)devicePageRect.right(); |
+ m.f = bFlipX ? (FX_FLOAT)devicePageRect.bottom() |
+ : (FX_FLOAT)devicePageRect.top; |
+ break; |
+ case 2: |
+ m.e = bFlipX ? (FX_FLOAT)devicePageRect.left |
+ : (FX_FLOAT)devicePageRect.right(); |
+ m.f = bFlipY ? (FX_FLOAT)devicePageRect.top |
+ : (FX_FLOAT)devicePageRect.bottom(); |
+ break; |
+ case 3: |
+ m.e = bFlipY ? (FX_FLOAT)devicePageRect.right() |
+ : (FX_FLOAT)devicePageRect.left; |
+ m.f = bFlipX ? (FX_FLOAT)devicePageRect.top |
+ : (FX_FLOAT)devicePageRect.bottom(); |
+ break; |
+ default: |
+ break; |
+ } |
+ pageMatrix = m; |
+} |
+ |
+} // namespace |
CXFA_FFPageView::CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea) |
: CXFA_ContainerLayoutItem(pPageArea), m_pDocView(pDocView) {} |
@@ -43,7 +95,7 @@ void CXFA_FFPageView::GetDisplayMatrix(CFX_Matrix& mt, |
GetPageSize(sz); |
CFX_RectF fdePage; |
fdePage.Set(0, 0, sz.x, sz.y); |
- FDE_GetPageMatrix(mt, fdePage, rtDisp, iRotate, 0); |
+ GetPageMatrix(mt, fdePage, rtDisp, iRotate, 0); |
} |
IXFA_WidgetIterator* CXFA_FFPageView::CreateWidgetIterator( |