| Index: xfa/fwl/basewidget/fwl_editimp.cpp
|
| diff --git a/xfa/fwl/basewidget/fwl_editimp.cpp b/xfa/fwl/basewidget/fwl_editimp.cpp
|
| index 86c6fe88747efb59df1d2659a48783513f3f1c56..17aef3bb1659fb79662dc0ed34f4689cb0e17f4a 100644
|
| --- a/xfa/fwl/basewidget/fwl_editimp.cpp
|
| +++ b/xfa/fwl/basewidget/fwl_editimp.cpp
|
| @@ -29,6 +29,28 @@
|
| #include "xfa/fxfa/include/xfa_ffwidget.h"
|
| #include "xfa/fxgraphics/cfx_path.h"
|
|
|
| +namespace {
|
| +
|
| +bool FX_EDIT_ISLATINWORD(FX_WCHAR c) {
|
| + return c == 0x2D || (c <= 0x005A && c >= 0x0041) ||
|
| + (c <= 0x007A && c >= 0x0061) || (c <= 0x02AF && c >= 0x00C0) ||
|
| + c == 0x0027;
|
| +}
|
| +
|
| +void AddSquigglyPath(CFX_Path* pPathData,
|
| + FX_FLOAT fStartX,
|
| + FX_FLOAT fEndX,
|
| + FX_FLOAT fY,
|
| + FX_FLOAT fStep) {
|
| + pPathData->MoveTo(fStartX, fY);
|
| + int i = 1;
|
| + for (FX_FLOAT fx = fStartX + fStep; fx < fEndX; fx += fStep, ++i) {
|
| + pPathData->LineTo(fx, fY + (i & 1) * fStep);
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // static
|
| IFWL_Edit* IFWL_Edit::Create(const CFWL_WidgetImpProperties& properties,
|
| IFWL_Widget* pOuter) {
|
| @@ -298,44 +320,27 @@ FWL_ERR CFWL_EditImp::Update() {
|
| InitCaret();
|
| return FWL_ERR_Succeeded;
|
| }
|
| +
|
| uint32_t CFWL_EditImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
|
| if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
|
| if (IsShowScrollBar(TRUE)) {
|
| CFX_RectF rect;
|
| m_pVertScrollBar->GetWidgetRect(rect);
|
| - if (rect.Contains(fx, fy)) {
|
| + if (rect.Contains(fx, fy))
|
| return FWL_WGTHITTEST_VScrollBar;
|
| - }
|
| }
|
| if (IsShowScrollBar(FALSE)) {
|
| CFX_RectF rect;
|
| m_pHorzScrollBar->GetWidgetRect(rect);
|
| - if (rect.Contains(fx, fy)) {
|
| + if (rect.Contains(fx, fy))
|
| return FWL_WGTHITTEST_HScrollBar;
|
| - }
|
| }
|
| }
|
| - if (m_rtClient.Contains(fx, fy)) {
|
| + if (m_rtClient.Contains(fx, fy))
|
| return FWL_WGTHITTEST_Edit;
|
| - }
|
| return FWL_WGTHITTEST_Unknown;
|
| }
|
| -#define FX_EDIT_ISLATINWORD(u) \
|
| - (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \
|
| - (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \
|
| - u == 0x0027)
|
| -static void AddSquigglyPath(CFX_Path& PathData,
|
| - FX_FLOAT fStartX,
|
| - FX_FLOAT fEndX,
|
| - FX_FLOAT fY,
|
| - FX_FLOAT fStep) {
|
| - PathData.MoveTo(fStartX, fY);
|
| - FX_FLOAT fx;
|
| - int32_t i;
|
| - for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) {
|
| - PathData.LineTo(fx, fY + (i & 1) * fStep);
|
| - }
|
| -}
|
| +
|
| void CFWL_EditImp::AddSpellCheckObj(CFX_Path& PathData,
|
| int32_t nStart,
|
| int32_t nCount,
|
| @@ -358,7 +363,7 @@ void CFWL_EditImp::AddSpellCheckObj(CFX_Path& PathData,
|
| fStep = txtEdtParams->fFontSize / 16.0f;
|
| fStartX = rectText.left + fOffSetX;
|
| fEndX = fStartX + rectText.Width();
|
| - AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep);
|
| + AddSquigglyPath(&PathData, fStartX, fEndX, fY, fStep);
|
| }
|
| }
|
| int32_t CFWL_EditImp::GetWordAtPoint(CFX_PointF pointf, int32_t& nCount) {
|
| @@ -1215,57 +1220,48 @@ FX_BOOL CFWL_EditImp::UpdateOffset() {
|
| IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
|
| if (!pPage)
|
| return FALSE;
|
| +
|
| CFX_RectF rtFDE = pPage->GetContentsBox();
|
| rtFDE.Offset(fOffSetX, fOffSetY);
|
| if (rtFDE.right() < rtEidt.right() && m_fScrollOffsetX > 0) {
|
| m_fScrollOffsetX += rtFDE.right() - rtEidt.right();
|
| - if (m_fScrollOffsetX < 0) {
|
| - m_fScrollOffsetX = 0;
|
| - }
|
| + m_fScrollOffsetX = std::max(m_fScrollOffsetX, 0.0f);
|
| }
|
| if (rtFDE.bottom() < rtEidt.bottom() && m_fScrollOffsetY > 0) {
|
| m_fScrollOffsetY += rtFDE.bottom() - rtEidt.bottom();
|
| - if (m_fScrollOffsetY < 0) {
|
| - m_fScrollOffsetY = 0;
|
| - }
|
| + m_fScrollOffsetY = std::max(m_fScrollOffsetY, 0.0f);
|
| }
|
| return FALSE;
|
| - } else {
|
| - FX_FLOAT offsetX = 0.0;
|
| - FX_FLOAT offsetY = 0.0;
|
| - if (rtCaret.left < rtEidt.left) {
|
| - offsetX = rtCaret.left - rtEidt.left;
|
| - }
|
| - if (rtCaret.right() > rtEidt.right()) {
|
| - offsetX = rtCaret.right() - rtEidt.right();
|
| - }
|
| - if (rtCaret.top < rtEidt.top) {
|
| - offsetY = rtCaret.top - rtEidt.top;
|
| - }
|
| - if (rtCaret.bottom() > rtEidt.bottom()) {
|
| - offsetY = rtCaret.bottom() - rtEidt.bottom();
|
| - }
|
| - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption)) {
|
| - m_fScrollOffsetX += offsetX;
|
| - }
|
| - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption)) {
|
| - m_fScrollOffsetY += offsetY;
|
| - }
|
| - if (m_fFontSize > m_rtEngine.height) {
|
| - m_fScrollOffsetY = 0;
|
| - }
|
| - return TRUE;
|
| }
|
| +
|
| + FX_FLOAT offsetX = 0.0;
|
| + FX_FLOAT offsetY = 0.0;
|
| + if (rtCaret.left < rtEidt.left)
|
| + offsetX = rtCaret.left - rtEidt.left;
|
| + if (rtCaret.right() > rtEidt.right())
|
| + offsetX = rtCaret.right() - rtEidt.right();
|
| + if (rtCaret.top < rtEidt.top)
|
| + offsetY = rtCaret.top - rtEidt.top;
|
| + if (rtCaret.bottom() > rtEidt.bottom())
|
| + offsetY = rtCaret.bottom() - rtEidt.bottom();
|
| + if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption))
|
| + m_fScrollOffsetX += offsetX;
|
| + if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption))
|
| + m_fScrollOffsetY += offsetY;
|
| + if (m_fFontSize > m_rtEngine.height)
|
| + m_fScrollOffsetY = 0;
|
| + return TRUE;
|
| }
|
| +
|
| FX_BOOL CFWL_EditImp::UpdateOffset(IFWL_ScrollBar* pScrollBar,
|
| FX_FLOAT fPosChanged) {
|
| - if (pScrollBar == m_pHorzScrollBar.get()) {
|
| + if (pScrollBar == m_pHorzScrollBar.get())
|
| m_fScrollOffsetX += fPosChanged;
|
| - } else {
|
| + else
|
| m_fScrollOffsetY += fPosChanged;
|
| - }
|
| return TRUE;
|
| }
|
| +
|
| void CFWL_EditImp::UpdateVAlignment() {
|
| IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
|
| if (!pPage)
|
| @@ -1592,10 +1588,12 @@ void CFWL_EditImp::LayoutScrollBar() {
|
| UpdateScroll();
|
| }
|
| }
|
| +
|
| void CFWL_EditImp::DeviceToEngine(CFX_PointF& pt) {
|
| - pt.x += -m_rtEngine.left + m_fScrollOffsetX;
|
| - pt.y += -m_rtEngine.top - m_fVAlignOffset + m_fScrollOffsetY;
|
| + pt.x += m_fScrollOffsetX - m_rtEngine.left;
|
| + pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset;
|
| }
|
| +
|
| void CFWL_EditImp::InitScrollBar(FX_BOOL bVert) {
|
| if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) {
|
| return;
|
| @@ -1619,14 +1617,15 @@ void CFWL_EditImp::InitEngine() {
|
| FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget,
|
| FX_BOOL bVisible,
|
| const CFX_RectF* pRtAnchor) {
|
| - CXFA_FFWidget* pXFAWidget = (CXFA_FFWidget*)pWidget->GetPrivateData(pWidget);
|
| - if (!pXFAWidget) {
|
| + CXFA_FFWidget* pXFAWidget =
|
| + static_cast<CXFA_FFWidget*>(pWidget->GetPrivateData(pWidget));
|
| + if (!pXFAWidget)
|
| return FALSE;
|
| - }
|
| +
|
| IXFA_DocProvider* pDocProvider = pXFAWidget->GetDoc()->GetDocProvider();
|
| - if (!pDocProvider) {
|
| + if (!pDocProvider)
|
| return FALSE;
|
| - }
|
| +
|
| if (bVisible) {
|
| CFX_Matrix mt;
|
| pXFAWidget->GetRotateMatrix(mt);
|
|
|