diff options
-rw-r--r-- | core/fpdfapi/page/cpdf_meshstream.cpp | 6 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_renderstatus.cpp | 10 | ||||
-rw-r--r-- | core/fxcrt/fx_basic_coords.cpp | 22 | ||||
-rw-r--r-- | core/fxge/ge/cfx_pathdata.cpp | 18 | ||||
-rw-r--r-- | core/fxge/ge/cfx_renderdevice.cpp | 13 | ||||
-rw-r--r-- | core/fxge/win32/cfx_psrenderer.cpp | 22 | ||||
-rw-r--r-- | fpdfsdk/cfx_systemhandler.cpp | 14 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/PWL_EditCtrl.cpp | 35 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/PWL_EditCtrl.h | 3 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/PWL_Wnd.cpp | 19 | ||||
-rw-r--r-- | fpdfsdk/pdfwindow/PWL_Wnd.h | 5 | ||||
-rw-r--r-- | third_party/agg23/agg_rasterizer_scanline_aa.h | 7 | ||||
-rw-r--r-- | xfa/fwl/cfwl_combolist.cpp | 18 | ||||
-rw-r--r-- | xfa/fwl/cfwl_combolist.h | 2 | ||||
-rw-r--r-- | xfa/fwl/cfwl_notedriver.cpp | 29 | ||||
-rw-r--r-- | xfa/fwl/cfwl_widget.cpp | 106 | ||||
-rw-r--r-- | xfa/fwl/cfwl_widget.h | 2 | ||||
-rw-r--r-- | xfa/fwl/cfwl_widgetmgr.cpp | 24 | ||||
-rw-r--r-- | xfa/fxfa/app/xfa_ffwidget.cpp | 12 | ||||
-rw-r--r-- | xfa/fxfa/app/xfa_ffwidgethandler.cpp | 40 | ||||
-rw-r--r-- | xfa/fxfa/xfa_ffwidget.h | 2 |
21 files changed, 185 insertions, 224 deletions
diff --git a/core/fpdfapi/page/cpdf_meshstream.cpp b/core/fpdfapi/page/cpdf_meshstream.cpp index fbbd22276f..75069cab7f 100644 --- a/core/fpdfapi/page/cpdf_meshstream.cpp +++ b/core/fpdfapi/page/cpdf_meshstream.cpp @@ -214,8 +214,7 @@ CPDF_MeshVertex CPDF_MeshStream::ReadVertex(const CFX_Matrix& pObject2Bitmap, *flag = ReadFlag(); CPDF_MeshVertex vertex; - vertex.position = ReadCoords(); - pObject2Bitmap.TransformPoint(vertex.position.x, vertex.position.y); + vertex.position = pObject2Bitmap.Transform(ReadCoords()); std::tie(vertex.r, vertex.g, vertex.b) = ReadColor(); m_BitStream.ByteAlign(); @@ -229,8 +228,7 @@ bool CPDF_MeshStream::ReadVertexRow(const CFX_Matrix& pObject2Bitmap, if (m_BitStream.IsEOF()) return false; - vertex[i].position = ReadCoords(); - pObject2Bitmap.TransformPoint(vertex[i].position.x, vertex[i].position.y); + vertex[i].position = pObject2Bitmap.Transform(ReadCoords()); std::tie(vertex[i].r, vertex[i].g, vertex[i].b) = ReadColor(); m_BitStream.ByteAlign(); } diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 5a340cd8b1..b041a72662 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -2228,13 +2228,11 @@ void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern, for (int col = min_col; col <= max_col; col++) for (int row = min_row; row <= max_row; row++) { - FX_FLOAT orig_x, orig_y; - orig_x = col * pPattern->x_step(); - orig_y = row * pPattern->y_step(); - mtPattern2Device.TransformPoint(orig_x, orig_y); + CFX_PointF original = mtPattern2Device.Transform( + CFX_PointF(col * pPattern->x_step(), row * pPattern->y_step())); CFX_Matrix matrix = *pObj2Device; - matrix.Translate(orig_x - mtPattern2Device.e, - orig_y - mtPattern2Device.f); + matrix.Translate(original.x - mtPattern2Device.e, + original.y - mtPattern2Device.f); m_pDevice->SaveState(); CPDF_RenderStatus status; status.Initialize(m_pContext, m_pDevice, nullptr, nullptr, this, diff --git a/core/fxcrt/fx_basic_coords.cpp b/core/fxcrt/fx_basic_coords.cpp index ea11acab6b..c9f3195f36 100644 --- a/core/fxcrt/fx_basic_coords.cpp +++ b/core/fxcrt/fx_basic_coords.cpp @@ -390,20 +390,20 @@ void CFX_Matrix::TransformRect(FX_FLOAT& left, FX_FLOAT& right, FX_FLOAT& top, FX_FLOAT& bottom) const { - FX_FLOAT x[4] = {left, left, right, right}; - FX_FLOAT y[4] = {top, bottom, top, bottom}; + CFX_PointF points[] = { + {left, top}, {left, bottom}, {right, top}, {right, bottom}}; for (int i = 0; i < 4; i++) - TransformPoint(x[i], y[i]); + points[i] = Transform(points[i]); - right = x[0]; - left = x[0]; - top = y[0]; - bottom = y[0]; + right = points[0].x; + left = points[0].x; + top = points[0].y; + bottom = points[0].y; for (int i = 1; i < 4; i++) { - right = std::max(right, x[i]); - left = std::min(left, x[i]); - top = std::max(top, y[i]); - bottom = std::min(bottom, y[i]); + right = std::max(right, points[i].x); + left = std::min(left, points[i].x); + top = std::max(top, points[i].y); + bottom = std::min(bottom, points[i].y); } } diff --git a/core/fxge/ge/cfx_pathdata.cpp b/core/fxge/ge/cfx_pathdata.cpp index 11c421e468..e06eadd6ce 100644 --- a/core/fxge/ge/cfx_pathdata.cpp +++ b/core/fxge/ge/cfx_pathdata.cpp @@ -452,26 +452,24 @@ bool CFX_PathData::IsRect(const CFX_Matrix* pMatrix, return false; } - FX_FLOAT x[5]; - FX_FLOAT y[5]; + CFX_PointF points[5]; for (size_t i = 0; i < m_Points.size(); i++) { - x[i] = m_Points[i].m_PointX; - y[i] = m_Points[i].m_PointY; - pMatrix->TransformPoint(x[i], y[i]); + points[i] = pMatrix->Transform( + CFX_PointF(m_Points[i].m_PointX, m_Points[i].m_PointY)); if (i == 0) continue; if (m_Points[i].m_Type != FXPT_TYPE::LineTo) return false; - if (x[i] != x[i - 1] && y[i] != y[i - 1]) + if (points[i].x != points[i - 1].x && points[i].y != points[i - 1].y) return false; } if (pRect) { - pRect->left = x[0]; - pRect->right = x[2]; - pRect->bottom = y[0]; - pRect->top = y[2]; + pRect->left = points[0].x; + pRect->right = points[2].x; + pRect->bottom = points[0].y; + pRect->top = points[2].y; pRect->Normalize(); } return true; diff --git a/core/fxge/ge/cfx_renderdevice.cpp b/core/fxge/ge/cfx_renderdevice.cpp index 86e74cafc4..203fecf061 100644 --- a/core/fxge/ge/cfx_renderdevice.cpp +++ b/core/fxge/ge/cfx_renderdevice.cpp @@ -490,15 +490,14 @@ bool CFX_RenderDevice::DrawPathWithBlend(const CFX_PathData* pPathData, uint8_t fill_alpha = (fill_mode & 3) ? FXARGB_A(fill_color) : 0; const std::vector<FX_PATHPOINT>& pPoints = pPathData->GetPoints(); if (stroke_alpha == 0 && pPoints.size() == 2) { - FX_FLOAT x1 = pPoints[0].m_PointX; - FX_FLOAT y1 = pPoints[0].m_PointY; - FX_FLOAT x2 = pPoints[1].m_PointX; - FX_FLOAT y2 = pPoints[1].m_PointY; + CFX_PointF pos1(pPoints[0].m_PointX, pPoints[0].m_PointY); + CFX_PointF pos2(pPoints[1].m_PointX, pPoints[1].m_PointY); if (pObject2Device) { - pObject2Device->TransformPoint(x1, y1); - pObject2Device->TransformPoint(x2, y2); + pos1 = pObject2Device->Transform(pos1); + pos2 = pObject2Device->Transform(pos2); } - DrawCosmeticLine(x1, y1, x2, y2, fill_color, fill_mode, blend_type); + DrawCosmeticLine(pos1.x, pos1.y, pos2.x, pos2.y, fill_color, fill_mode, + blend_type); return true; } diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp index 32da090ed6..a0e675e23c 100644 --- a/core/fxge/win32/cfx_psrenderer.cpp +++ b/core/fxge/win32/cfx_psrenderer.cpp @@ -116,12 +116,11 @@ void CFX_PSRenderer::OutputPath(const CFX_PathData* pPathData, for (size_t i = 0; i < size; i++) { FXPT_TYPE type = pPathData->GetType(i); bool closing = pPathData->IsClosingFigure(i); - FX_FLOAT x = pPathData->GetPointX(i); - FX_FLOAT y = pPathData->GetPointY(i); + CFX_PointF pos(pPathData->GetPointX(i), pPathData->GetPointY(i)); if (pObject2Device) - pObject2Device->TransformPoint(x, y); + pos = pObject2Device->Transform(pos); - buf << x << " " << y; + buf << pos.x << " " << pos.y; switch (type) { case FXPT_TYPE::MoveTo: buf << " m "; @@ -132,15 +131,16 @@ void CFX_PSRenderer::OutputPath(const CFX_PathData* pPathData, buf << "h "; break; case FXPT_TYPE::BezierTo: { - FX_FLOAT x1 = pPathData->GetPointX(i + 1); - FX_FLOAT x2 = pPathData->GetPointX(i + 2); - FX_FLOAT y1 = pPathData->GetPointY(i + 1); - FX_FLOAT y2 = pPathData->GetPointY(i + 2); + CFX_PointF pos1(pPathData->GetPointX(i + 1), + pPathData->GetPointY(i + 1)); + CFX_PointF pos2(pPathData->GetPointX(i + 2), + pPathData->GetPointY(i + 2)); if (pObject2Device) { - pObject2Device->TransformPoint(x1, y1); - pObject2Device->TransformPoint(x2, y2); + pos1 = pObject2Device->Transform(pos1); + pos2 = pObject2Device->Transform(pos2); } - buf << " " << x1 << " " << y1 << " " << x2 << " " << y2 << " c"; + buf << " " << pos1.x << " " << pos1.y << " " << pos2.x << " " << pos2.y + << " c"; if (closing) buf << " h"; buf << "\n"; diff --git a/fpdfsdk/cfx_systemhandler.cpp b/fpdfsdk/cfx_systemhandler.cpp index 966dd63d4c..8ccbd75fbf 100644 --- a/fpdfsdk/cfx_systemhandler.cpp +++ b/fpdfsdk/cfx_systemhandler.cpp @@ -46,14 +46,12 @@ void CFX_SystemHandler::InvalidateRect(CPDFSDK_Widget* widget, FX_RECT rect) { CFX_Matrix device2page; device2page.SetReverse(page2device); - FX_FLOAT left = static_cast<FX_FLOAT>(rect.left); - FX_FLOAT top = static_cast<FX_FLOAT>(rect.top); - FX_FLOAT right = static_cast<FX_FLOAT>(rect.right); - FX_FLOAT bottom = static_cast<FX_FLOAT>(rect.bottom); - device2page.TransformPoint(left, top); - device2page.TransformPoint(right, bottom); - - CFX_FloatRect rcPDF(left, bottom, right, top); + CFX_PointF left_top = device2page.Transform(CFX_PointF( + static_cast<FX_FLOAT>(rect.left), static_cast<FX_FLOAT>(rect.top))); + CFX_PointF right_bottom = device2page.Transform(CFX_PointF( + static_cast<FX_FLOAT>(rect.right), static_cast<FX_FLOAT>(rect.bottom))); + + CFX_FloatRect rcPDF(left_top.x, right_bottom.y, right_bottom.x, left_top.y); rcPDF.Normalize(); m_pFormFillEnv->Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right, diff --git a/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp b/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp index 64272e34c5..4921ab7a08 100644 --- a/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp +++ b/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp @@ -40,13 +40,7 @@ void CPWL_EditCtrl::OnCreated() { bool CPWL_EditCtrl::IsWndHorV() { CFX_Matrix mt = GetWindowMatrix(); - CFX_PointF point1(0, 1); - CFX_PointF point2(1, 1); - - mt.TransformPoint(point1.x, point1.y); - mt.TransformPoint(point2.x, point2.y); - - return point2.y == point1.y; + return mt.Transform(CFX_PointF(1, 1)).y == mt.Transform(CFX_PointF(0, 1)).y; } void CPWL_EditCtrl::SetCursor() { @@ -328,37 +322,30 @@ void CPWL_EditCtrl::SetEditCaret(bool bVisible) { CFX_PointF ptHead; CFX_PointF ptFoot; if (bVisible) - GetCaretInfo(ptHead, ptFoot); + GetCaretInfo(&ptHead, &ptFoot); CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace(); IOnSetCaret(bVisible, ptHead, ptFoot, wpTemp); } -void CPWL_EditCtrl::GetCaretInfo(CFX_PointF& ptHead, CFX_PointF& ptFoot) const { +void CPWL_EditCtrl::GetCaretInfo(CFX_PointF* ptHead, CFX_PointF* ptFoot) const { CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); pIterator->SetAt(m_pEdit->GetCaret()); CPVT_Word word; CPVT_Line line; if (pIterator->GetWord(word)) { - ptHead.x = word.ptWord.x + word.fWidth; - ptHead.y = word.ptWord.y + word.fAscent; - ptFoot.x = word.ptWord.x + word.fWidth; - ptFoot.y = word.ptWord.y + word.fDescent; + ptHead->x = word.ptWord.x + word.fWidth; + ptHead->y = word.ptWord.y + word.fAscent; + ptFoot->x = word.ptWord.x + word.fWidth; + ptFoot->y = word.ptWord.y + word.fDescent; } else if (pIterator->GetLine(line)) { - ptHead.x = line.ptLine.x; - ptHead.y = line.ptLine.y + line.fLineAscent; - ptFoot.x = line.ptLine.x; - ptFoot.y = line.ptLine.y + line.fLineDescent; + ptHead->x = line.ptLine.x; + ptHead->y = line.ptLine.y + line.fLineAscent; + ptFoot->x = line.ptLine.x; + ptFoot->y = line.ptLine.y + line.fLineDescent; } } -void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const { - CFX_PointF ptHead; - CFX_PointF ptFoot; - GetCaretInfo(ptHead, ptFoot); - PWLtoWnd(ptHead, x, y); -} - void CPWL_EditCtrl::SetCaret(bool bVisible, const CFX_PointF& ptHead, const CFX_PointF& ptFoot) { diff --git a/fpdfsdk/pdfwindow/PWL_EditCtrl.h b/fpdfsdk/pdfwindow/PWL_EditCtrl.h index 8b65d4a7b5..498570b3b0 100644 --- a/fpdfsdk/pdfwindow/PWL_EditCtrl.h +++ b/fpdfsdk/pdfwindow/PWL_EditCtrl.h @@ -34,7 +34,6 @@ class CPWL_EditCtrl : public CPWL_Wnd { ~CPWL_EditCtrl() override; CFX_FloatRect GetContentRect() const; - void GetCaretPos(int32_t& x, int32_t& y) const; CFX_WideString GetText() const; void SetSel(int32_t nStartChar, int32_t nEndChar); @@ -121,7 +120,7 @@ class CPWL_EditCtrl : public CPWL_Wnd { void Delete(); void Backspace(); - void GetCaretInfo(CFX_PointF& ptHead, CFX_PointF& ptFoot) const; + void GetCaretInfo(CFX_PointF* ptHead, CFX_PointF* ptFoot) const; void SetCaret(bool bVisible, const CFX_PointF& ptHead, const CFX_PointF& ptFoot); diff --git a/fpdfsdk/pdfwindow/PWL_Wnd.cpp b/fpdfsdk/pdfwindow/PWL_Wnd.cpp index cf573220b7..341ae7448f 100644 --- a/fpdfsdk/pdfwindow/PWL_Wnd.cpp +++ b/fpdfsdk/pdfwindow/PWL_Wnd.cpp @@ -849,14 +849,6 @@ CFX_Matrix CPWL_Wnd::GetWindowMatrix() const { return mt; } -void CPWL_Wnd::PWLtoWnd(const CFX_PointF& point, int32_t& x, int32_t& y) const { - CFX_Matrix mt = GetWindowMatrix(); - CFX_PointF pt = point; - mt.TransformPoint(pt.x, pt.y); - x = (int32_t)(pt.x + 0.5); - y = (int32_t)(pt.y + 0.5); -} - FX_RECT CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const { CFX_FloatRect rcTemp = rect; CFX_Matrix mt = GetWindowMatrix(); @@ -867,12 +859,7 @@ FX_RECT CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const { CFX_PointF CPWL_Wnd::ChildToParent(const CFX_PointF& point) const { CFX_Matrix mt = GetChildMatrix(); - if (mt.IsIdentity()) - return point; - - CFX_PointF pt = point; - mt.TransformPoint(pt.x, pt.y); - return pt; + return mt.IsIdentity() ? point : mt.Transform(point); } CFX_FloatRect CPWL_Wnd::ChildToParent(const CFX_FloatRect& rect) const { @@ -891,9 +878,7 @@ CFX_PointF CPWL_Wnd::ParentToChild(const CFX_PointF& point) const { return point; mt.SetReverse(mt); - CFX_PointF pt = point; - mt.TransformPoint(pt.x, pt.y); - return pt; + return mt.Transform(point); } CFX_FloatRect CPWL_Wnd::ParentToChild(const CFX_FloatRect& rect) const { diff --git a/fpdfsdk/pdfwindow/PWL_Wnd.h b/fpdfsdk/pdfwindow/PWL_Wnd.h index 12b29aeb7e..92c099f9cd 100644 --- a/fpdfsdk/pdfwindow/PWL_Wnd.h +++ b/fpdfsdk/pdfwindow/PWL_Wnd.h @@ -389,9 +389,6 @@ class CPWL_Wnd : public CPWL_TimerHandler { void InvalidateRectMove(const CFX_FloatRect& rcOld, const CFX_FloatRect& rcNew); - void PWLtoWnd(const CFX_PointF& point, int32_t& x, int32_t& y) const; - FX_RECT PWLtoWnd(const CFX_FloatRect& rect) const; - bool IsWndCaptureMouse(const CPWL_Wnd* pWnd) const; bool IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const; const CPWL_Wnd* GetRootWnd() const; @@ -401,6 +398,8 @@ class CPWL_Wnd : public CPWL_TimerHandler { bool IsALTpressed(uint32_t nFlag) const; private: + FX_RECT PWLtoWnd(const CFX_FloatRect& rect) const; + void AddChild(CPWL_Wnd* pWnd); void RemoveChild(CPWL_Wnd* pWnd); diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.h b/third_party/agg23/agg_rasterizer_scanline_aa.h index 3cf1822301..fc28290f54 100644 --- a/third_party/agg23/agg_rasterizer_scanline_aa.h +++ b/third_party/agg23/agg_rasterizer_scanline_aa.h @@ -390,8 +390,11 @@ public: unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x, &y))) { - if (pMatrix) - pMatrix->TransformPoint(x, y); + if (pMatrix) { + CFX_PointF ret = pMatrix->Transform(CFX_PointF(x, y)); + x = ret.x; + y = ret.y; + } add_vertex(x, y, cmd); } } diff --git a/xfa/fwl/cfwl_combolist.cpp b/xfa/fwl/cfwl_combolist.cpp index d411f03ca3..171b54121c 100644 --- a/xfa/fwl/cfwl_combolist.cpp +++ b/xfa/fwl/cfwl_combolist.cpp @@ -63,12 +63,11 @@ void CFWL_ComboList::ChangeSelected(int32_t iSel) { RepaintRect(rtInvalidate); } -void CFWL_ComboList::ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy) { - fx += m_pProperties->m_rtWidget.left, fy += m_pProperties->m_rtWidget.top; +CFX_PointF CFWL_ComboList::ClientToOuter(const CFX_PointF& point) { + CFX_PointF ret = point + CFX_PointF(m_pProperties->m_rtWidget.left, + m_pProperties->m_rtWidget.top); CFWL_Widget* pOwner = GetOwner(); - if (!pOwner) - return; - pOwner->TransformTo(m_pOuter, fx, fy); + return pOwner ? pOwner->TransformTo(m_pOuter, ret) : ret; } void CFWL_ComboList::OnProcessMessage(CFWL_Message* pMessage) { @@ -148,7 +147,10 @@ void CFWL_ComboList::OnDropListMouseMove(CFWL_MessageMouse* pMsg) { ChangeSelected(GetItemIndex(this, hItem)); } else if (m_bNotifyOwner) { - ClientToOuter(pMsg->m_fx, pMsg->m_fy); + CFX_PointF point = ClientToOuter(CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + pMsg->m_fx = point.x; + pMsg->m_fy = point.y; + CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter); pOuter->GetDelegate()->OnProcessMessage(pMsg); } @@ -165,7 +167,9 @@ void CFWL_ComboList::OnDropListLButtonDown(CFWL_MessageMouse* pMsg) { void CFWL_ComboList::OnDropListLButtonUp(CFWL_MessageMouse* pMsg) { CFWL_ComboBox* pOuter = static_cast<CFWL_ComboBox*>(m_pOuter); if (m_bNotifyOwner) { - ClientToOuter(pMsg->m_fx, pMsg->m_fy); + CFX_PointF point = ClientToOuter(CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + pMsg->m_fx = point.x; + pMsg->m_fy = point.y; pOuter->GetDelegate()->OnProcessMessage(pMsg); return; } diff --git a/xfa/fwl/cfwl_combolist.h b/xfa/fwl/cfwl_combolist.h index e1d5fd9b24..b7ba6b5780 100644 --- a/xfa/fwl/cfwl_combolist.h +++ b/xfa/fwl/cfwl_combolist.h @@ -29,7 +29,7 @@ class CFWL_ComboList : public CFWL_ListBox { void SetNotifyOwner(bool notify) { m_bNotifyOwner = notify; } private: - void ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy); + CFX_PointF ClientToOuter(const CFX_PointF& point); void OnDropListFocusChanged(CFWL_Message* pMsg, bool bSet); void OnDropListMouseMove(CFWL_MessageMouse* pMsg); void OnDropListLButtonDown(CFWL_MessageMouse* pMsg); diff --git a/xfa/fwl/cfwl_notedriver.cpp b/xfa/fwl/cfwl_notedriver.cpp index f4db9b14ab..6904759e59 100644 --- a/xfa/fwl/cfwl_notedriver.cpp +++ b/xfa/fwl/cfwl_notedriver.cpp @@ -341,8 +341,12 @@ bool CFWL_NoteDriver::DoMouse(CFWL_Message* pMessage, pMsg->m_dwCmd == FWL_MouseCommand::Enter) { return !!pMsg->m_pDstTarget; } - if (pMsg->m_pDstTarget != pMessageForm) - pMsg->m_pDstTarget->TransformTo(pMessageForm, pMsg->m_fx, pMsg->m_fy); + if (pMsg->m_pDstTarget != pMessageForm) { + CFX_PointF point = pMsg->m_pDstTarget->TransformTo( + pMessageForm, CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + pMsg->m_fx = point.x; + pMsg->m_fy = point.y; + } if (!DoMouseEx(pMsg, pMessageForm)) pMsg->m_pDstTarget = pMessageForm; return true; @@ -360,7 +364,10 @@ bool CFWL_NoteDriver::DoWheel(CFWL_Message* pMessage, if (!pDst) return false; - pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); + CFX_PointF point = + pMessageForm->TransformTo(pDst, CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + pMsg->m_fx = point.x; + pMsg->m_fy = point.y; pMsg->m_pDstTarget = pDst; return true; } @@ -380,8 +387,12 @@ bool CFWL_NoteDriver::DoMouseEx(CFWL_Message* pMessage, pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); } if (pTarget) { - if (pMessageForm != pTarget) - pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); + if (pMessageForm != pTarget) { + CFX_PointF point = pMessageForm->TransformTo( + pTarget, CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + pMsg->m_fx = point.x; + pMsg->m_fy = point.y; + } } if (!pTarget) return false; @@ -398,10 +409,10 @@ void CFWL_NoteDriver::MouseSecondary(CFWL_Message* pMessage) { CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage); if (m_pHover) { CFWL_MessageMouse msLeave(nullptr, m_pHover); - msLeave.m_fx = pMsg->m_fx; - msLeave.m_fy = pMsg->m_fy; - pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); - + CFX_PointF point = + pTarget->TransformTo(m_pHover, CFX_PointF(pMsg->m_fx, pMsg->m_fy)); + msLeave.m_fx = point.x; + msLeave.m_fy = point.y; msLeave.m_dwFlags = 0; msLeave.m_dwCmd = FWL_MouseCommand::Leave; DispatchMessage(&msLeave, nullptr); diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp index e9c6ddc7d8..3462ea792a 100644 --- a/xfa/fwl/cfwl_widget.cpp +++ b/xfa/fwl/cfwl_widget.cpp @@ -159,9 +159,8 @@ FWL_WidgetHit CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { return FWL_WidgetHit::Unknown; } -void CFWL_Widget::TransformTo(CFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { +CFX_PointF CFWL_Widget::TransformTo(CFWL_Widget* pWidget, + const CFX_PointF& point) { if (m_pWidgetMgr->IsFormDisabled()) { CFX_SizeF szOffset; if (IsParent(pWidget)) { @@ -171,50 +170,36 @@ void CFWL_Widget::TransformTo(CFWL_Widget* pWidget, szOffset.width = -szOffset.width; szOffset.height = -szOffset.height; } - fx += szOffset.width; - fy += szOffset.height; - return; + return point + CFX_PointF(szOffset.width, szOffset.height); } - CFX_RectF r; - CFX_Matrix m; + + CFX_PointF ret = point; CFWL_Widget* parent = GetParent(); - if (parent) { - r = GetWidgetRect(); - fx += r.left; - fy += r.top; - m = GetMatrix(); - m.TransformPoint(fx, fy); - } + if (parent) + ret = GetMatrix().Transform(ret + GetWidgetRect().TopLeft()); + CFWL_Widget* form1 = m_pWidgetMgr->GetSystemFormWidget(this); if (!form1) - return; + return ret; + + if (!pWidget) + return ret + form1->GetWidgetRect().TopLeft(); - if (!pWidget) { - r = form1->GetWidgetRect(); - fx += r.left; - fy += r.top; - return; - } CFWL_Widget* form2 = m_pWidgetMgr->GetSystemFormWidget(pWidget); if (!form2) - return; + return ret; if (form1 != form2) { - r = form1->GetWidgetRect(); - fx += r.left; - fy += r.top; - r = form2->GetWidgetRect(); - fx -= r.left; - fy -= r.top; + ret += form1->GetWidgetRect().TopLeft(); + ret -= form2->GetWidgetRect().TopLeft(); } + parent = pWidget->GetParent(); - if (parent) { - CFX_Matrix m1; - m1.SetReverse(pWidget->GetMatrix()); - m1.TransformPoint(fx, fy); - r = pWidget->GetWidgetRect(); - fx -= r.left; - fy -= r.top; - } + if (!parent) + return ret; + + CFX_Matrix m; + m.SetReverse(pWidget->GetMatrix()); + return m.Transform(ret) - pWidget->GetWidgetRect().TopLeft(); } CFX_Matrix CFWL_Widget::GetMatrix() { @@ -419,32 +404,31 @@ bool CFWL_Widget::GetPopupPosMenu(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF& rtAnchor, CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { bool bLeft = m_pProperties->m_rtWidget.left < 0; FX_FLOAT fRight = rtAnchor.right() + rtPopup.width; - TransformTo(nullptr, fx, fy); - if (fRight + fx > 0.0f || bLeft) { + CFX_PointF point = TransformTo(nullptr, CFX_PointF()); + if (fRight + point.x > 0.0f || bLeft) { rtPopup = CFX_RectF(rtAnchor.left - rtPopup.width, rtAnchor.top, rtPopup.width, rtPopup.height); } else { rtPopup = CFX_RectF(rtAnchor.right(), rtAnchor.top, rtPopup.width, rtPopup.height); } + rtPopup.Offset(point.x, point.y); + return true; + } + + FX_FLOAT fBottom = rtAnchor.bottom() + rtPopup.height; + CFX_PointF point = TransformTo(nullptr, point); + if (fBottom + point.y > 0.0f) { + rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, + rtPopup.width, rtPopup.height); } else { - FX_FLOAT fBottom = rtAnchor.bottom() + rtPopup.height; - TransformTo(nullptr, fx, fy); - if (fBottom + fy > 0.0f) { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, - rtPopup.width, rtPopup.height); - } else { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } + rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, + rtPopup.height); } - rtPopup.Offset(fx, fy); + rtPopup.Offset(point.x, point.y); return true; } @@ -452,9 +436,6 @@ bool CFWL_Widget::GetPopupPosComboBox(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF& rtAnchor, CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fPopHeight = rtPopup.height; if (rtPopup.height > fMaxHeight) fPopHeight = fMaxHeight; @@ -463,15 +444,15 @@ bool CFWL_Widget::GetPopupPosComboBox(FX_FLOAT fMinHeight, FX_FLOAT fWidth = std::max(rtAnchor.width, rtPopup.width); FX_FLOAT fBottom = rtAnchor.bottom() + fPopHeight; - TransformTo(nullptr, fx, fy); - if (fBottom + fy > 0.0f) { + CFX_PointF point = TransformTo(nullptr, CFX_PointF()); + if (fBottom + point.y > 0.0f) { rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); } else { rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); } - rtPopup.Offset(fx, fy); + rtPopup.Offset(point.x, point.y); return true; } @@ -479,18 +460,15 @@ bool CFWL_Widget::GetPopupPosGeneral(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF& rtAnchor, CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - - TransformTo(nullptr, fx, fy); - if (rtAnchor.bottom() + fy > 0.0f) { + CFX_PointF point = TransformTo(nullptr, CFX_PointF()); + if (rtAnchor.bottom() + point.y > 0.0f) { rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, rtPopup.height); } else { rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, rtPopup.height); } - rtPopup.Offset(fx, fy); + rtPopup.Offset(point.x, point.y); return true; } diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h index 74fa314bfd..a375005970 100644 --- a/xfa/fwl/cfwl_widget.h +++ b/xfa/fwl/cfwl_widget.h @@ -90,7 +90,7 @@ class CFWL_Widget : public IFWL_WidgetDelegate { m_iLock--; } - void TransformTo(CFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); + CFX_PointF TransformTo(CFWL_Widget* pWidget, const CFX_PointF& point); CFX_Matrix GetMatrix(); IFWL_ThemeProvider* GetThemeProvider() const; diff --git a/xfa/fwl/cfwl_widgetmgr.cpp b/xfa/fwl/cfwl_widgetmgr.cpp index 0af93dc38b..ea4cbde230 100644 --- a/xfa/fwl/cfwl_widgetmgr.cpp +++ b/xfa/fwl/cfwl_widgetmgr.cpp @@ -160,7 +160,10 @@ void CFWL_WidgetMgr::RepaintWidget(CFWL_Widget* pWidget, if (!pNative) return; - pWidget->TransformTo(pNative, transformedRect.left, transformedRect.top); + CFX_PointF pos = pWidget->TransformTo( + pNative, CFX_PointF(transformedRect.left, transformedRect.top)); + transformedRect.left = pos.x; + transformedRect.top = pos.y; } AddRedrawCounts(pNative); m_pAdapter->RepaintWidget(pNative); @@ -260,24 +263,21 @@ CFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(CFWL_Widget* parent, if (!parent) return nullptr; - FX_FLOAT x1; - FX_FLOAT y1; + CFX_PointF pos; CFWL_Widget* child = GetLastChildWidget(parent); while (child) { if ((child->GetStates() & FWL_WGTSTATE_Invisible) == 0) { - x1 = x; - y1 = y; CFX_Matrix m; m.SetIdentity(); CFX_Matrix matrixOnParent; m.SetReverse(matrixOnParent); - m.TransformPoint(x1, y1); + pos = m.Transform(CFX_PointF(x, y)); + CFX_RectF bounds = child->GetWidgetRect(); - if (bounds.Contains(x1, y1)) { - x1 -= bounds.left; - y1 -= bounds.top; - return GetWidgetAtPoint(child, x1, y1); + if (bounds.Contains(pos.x, pos.y)) { + pos -= bounds.TopLeft(); + return GetWidgetAtPoint(child, pos.x, pos.y); } } child = GetPriorSiblingWidget(child); @@ -484,7 +484,9 @@ void CFWL_WidgetMgr::DrawChild(CFWL_Widget* parent, widgetMatrix.Concat(*pMatrix); if (!bFormDisable) { - widgetMatrix.TransformPoint(clipBounds.left, clipBounds.top); + CFX_PointF pos = widgetMatrix.Transform(clipBounds.TopLeft()); + clipBounds.left = pos.x; + clipBounds.top = pos.y; clipBounds.Intersect(rtClip); if (clipBounds.IsEmpty()) continue; diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp index 3ee0a3cbe8..7a8cc646dd 100644 --- a/xfa/fxfa/app/xfa_ffwidget.cpp +++ b/xfa/fxfa/app/xfa_ffwidget.cpp @@ -316,15 +316,17 @@ bool CXFA_FFWidget::ReplaceSpellCheckWord(CFX_PointF pointf, const CFX_ByteStringC& bsReplace) { return false; } -void CXFA_FFWidget::Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy) { + +CFX_PointF CXFA_FFWidget::Rotate2Normal(const CFX_PointF& point) { CFX_Matrix mt = GetRotateMatrix(); - if (mt.IsIdentity()) { - return; - } + if (mt.IsIdentity()) + return point; + CFX_Matrix mtReverse; mtReverse.SetReverse(mt); - mtReverse.TransformPoint(fx, fy); + return mtReverse.Transform(point); } + static void XFA_GetMatrix(CFX_Matrix& m, int32_t iRotate, XFA_ATTRIBUTEENUM at, diff --git a/xfa/fxfa/app/xfa_ffwidgethandler.cpp b/xfa/fxfa/app/xfa_ffwidgethandler.cpp index 551d8f6595..bbca0409d3 100644 --- a/xfa/fxfa/app/xfa_ffwidgethandler.cpp +++ b/xfa/fxfa/app/xfa_ffwidgethandler.cpp @@ -43,8 +43,8 @@ bool CXFA_FFWidgetHandler::OnLButtonDown(CXFA_FFWidget* hWidget, FX_FLOAT fx, FX_FLOAT fy) { m_pDocView->LockUpdate(); - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnLButtonDown(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnLButtonDown(dwFlags, pos.x, pos.y); if (bRet && m_pDocView->SetFocus(hWidget)) { m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget( m_pDocView->GetDoc(), hWidget); @@ -59,9 +59,9 @@ bool CXFA_FFWidgetHandler::OnLButtonUp(CXFA_FFWidget* hWidget, FX_FLOAT fx, FX_FLOAT fy) { m_pDocView->LockUpdate(); - hWidget->Rotate2Normal(fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); m_pDocView->m_bLayoutEvent = true; - bool bRet = hWidget->OnLButtonUp(dwFlags, fx, fy); + bool bRet = hWidget->OnLButtonUp(dwFlags, pos.x, pos.y); m_pDocView->UnlockUpdate(); m_pDocView->UpdateDocView(); return bRet; @@ -71,8 +71,8 @@ bool CXFA_FFWidgetHandler::OnLButtonDblClk(CXFA_FFWidget* hWidget, uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnLButtonDblClk(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnLButtonDblClk(dwFlags, pos.x, pos.y); m_pDocView->RunInvalidate(); return bRet; } @@ -81,8 +81,8 @@ bool CXFA_FFWidgetHandler::OnMouseMove(CXFA_FFWidget* hWidget, uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnMouseMove(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnMouseMove(dwFlags, pos.x, pos.y); m_pDocView->RunInvalidate(); return bRet; } @@ -92,8 +92,8 @@ bool CXFA_FFWidgetHandler::OnMouseWheel(CXFA_FFWidget* hWidget, int16_t zDelta, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnMouseWheel(dwFlags, zDelta, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnMouseWheel(dwFlags, zDelta, pos.x, pos.y); m_pDocView->RunInvalidate(); return bRet; } @@ -102,8 +102,8 @@ bool CXFA_FFWidgetHandler::OnRButtonDown(CXFA_FFWidget* hWidget, uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnRButtonDown(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnRButtonDown(dwFlags, pos.x, pos.y); if (bRet && m_pDocView->SetFocus(hWidget)) { m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget( m_pDocView->GetDoc(), hWidget); @@ -116,8 +116,8 @@ bool CXFA_FFWidgetHandler::OnRButtonUp(CXFA_FFWidget* hWidget, uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnRButtonUp(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnRButtonUp(dwFlags, pos.x, pos.y); m_pDocView->RunInvalidate(); return bRet; } @@ -126,8 +126,8 @@ bool CXFA_FFWidgetHandler::OnRButtonDblClk(CXFA_FFWidget* hWidget, uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - bool bRet = hWidget->OnRButtonDblClk(dwFlags, fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + bool bRet = hWidget->OnRButtonDblClk(dwFlags, pos.x, pos.y); m_pDocView->RunInvalidate(); return bRet; } @@ -163,15 +163,15 @@ FWL_WidgetHit CXFA_FFWidgetHandler::OnHitTest(CXFA_FFWidget* hWidget, if (!(hWidget->GetStatus() & XFA_WidgetStatus_Visible)) return FWL_WidgetHit::Unknown; - hWidget->Rotate2Normal(fx, fy); - return hWidget->OnHitTest(fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + return hWidget->OnHitTest(pos.x, pos.y); } bool CXFA_FFWidgetHandler::OnSetCursor(CXFA_FFWidget* hWidget, FX_FLOAT fx, FX_FLOAT fy) { - hWidget->Rotate2Normal(fx, fy); - return hWidget->OnSetCursor(fx, fy); + CFX_PointF pos = hWidget->Rotate2Normal(CFX_PointF(fx, fy)); + return hWidget->OnSetCursor(pos.x, pos.y); } void CXFA_FFWidgetHandler::RenderWidget(CXFA_FFWidget* hWidget, diff --git a/xfa/fxfa/xfa_ffwidget.h b/xfa/fxfa/xfa_ffwidget.h index c7701d357e..57dfc639da 100644 --- a/xfa/fxfa/xfa_ffwidget.h +++ b/xfa/fxfa/xfa_ffwidget.h @@ -119,7 +119,7 @@ class CXFA_FFWidget : public CXFA_ContentLayoutItem { void AddInvalidateRect(const CFX_RectF* pRect = nullptr); bool GetCaptionText(CFX_WideString& wsCap); bool IsFocused(); - void Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy); + CFX_PointF Rotate2Normal(const CFX_PointF& point); CFX_Matrix GetRotateMatrix(); bool IsLayoutRectEmpty(); CXFA_FFWidget* GetParent(); |