| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fwl/core/ifwl_edit.h" | 7 #include "xfa/fwl/core/ifwl_edit.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "third_party/base/ptr_util.h" | 13 #include "third_party/base/ptr_util.h" |
| 14 #include "third_party/base/stl_util.h" | 14 #include "third_party/base/stl_util.h" |
| 15 #include "xfa/fde/cfde_txtedtengine.h" | 15 #include "xfa/fde/cfde_txtedtengine.h" |
| 16 #include "xfa/fde/fde_gedevice.h" | 16 #include "xfa/fde/fde_gedevice.h" |
| 17 #include "xfa/fde/fde_render.h" | 17 #include "xfa/fde/fde_render.h" |
| 18 #include "xfa/fde/ifde_txtedtpage.h" | 18 #include "xfa/fde/ifde_txtedtpage.h" |
| 19 #include "xfa/fgas/font/fgas_gefont.h" | 19 #include "xfa/fgas/font/fgas_gefont.h" |
| 20 #include "xfa/fwl/core/cfwl_evtcheckword.h" |
| 21 #include "xfa/fwl/core/cfwl_evttextchanged.h" |
| 22 #include "xfa/fwl/core/cfwl_evttextfull.h" |
| 23 #include "xfa/fwl/core/cfwl_evtvalidate.h" |
| 20 #include "xfa/fwl/core/cfwl_msgkey.h" | 24 #include "xfa/fwl/core/cfwl_msgkey.h" |
| 21 #include "xfa/fwl/core/cfwl_msgmouse.h" | 25 #include "xfa/fwl/core/cfwl_msgmouse.h" |
| 22 #include "xfa/fwl/core/cfwl_themebackground.h" | 26 #include "xfa/fwl/core/cfwl_themebackground.h" |
| 23 #include "xfa/fwl/core/cfwl_themepart.h" | 27 #include "xfa/fwl/core/cfwl_themepart.h" |
| 24 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 28 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
| 25 #include "xfa/fwl/core/ifwl_app.h" | 29 #include "xfa/fwl/core/ifwl_app.h" |
| 26 #include "xfa/fwl/core/ifwl_caret.h" | 30 #include "xfa/fwl/core/ifwl_caret.h" |
| 27 #include "xfa/fwl/core/ifwl_themeprovider.h" | 31 #include "xfa/fwl/core/ifwl_themeprovider.h" |
| 28 #include "xfa/fxfa/xfa_ffdoc.h" | 32 #include "xfa/fxfa/xfa_ffdoc.h" |
| 29 #include "xfa/fxfa/xfa_ffwidget.h" | 33 #include "xfa/fxfa/xfa_ffwidget.h" |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 } | 193 } |
| 190 } | 194 } |
| 191 | 195 |
| 192 void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics, | 196 void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics, |
| 193 const CFX_Matrix* pMatrix) { | 197 const CFX_Matrix* pMatrix) { |
| 194 pGraphics->SaveGraphState(); | 198 pGraphics->SaveGraphState(); |
| 195 if (pMatrix) | 199 if (pMatrix) |
| 196 pGraphics->ConcatMatrix(const_cast<CFX_Matrix*>(pMatrix)); | 200 pGraphics->ConcatMatrix(const_cast<CFX_Matrix*>(pMatrix)); |
| 197 | 201 |
| 198 CFX_Color crLine(0xFFFF0000); | 202 CFX_Color crLine(0xFFFF0000); |
| 199 CFWL_EvtEdtCheckWord checkWordEvent; | 203 CFWL_EvtCheckWord checkWordEvent; |
| 200 checkWordEvent.m_pSrcTarget = this; | 204 checkWordEvent.m_pSrcTarget = this; |
| 201 | 205 |
| 202 CFX_ByteString sLatinWord; | 206 CFX_ByteString sLatinWord; |
| 203 CFX_Path pathSpell; | 207 CFX_Path pathSpell; |
| 204 pathSpell.Create(); | 208 pathSpell.Create(); |
| 205 | 209 |
| 206 int32_t nStart = 0; | 210 int32_t nStart = 0; |
| 207 FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 211 FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; |
| 208 FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 212 FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; |
| 209 | 213 |
| 210 CFX_WideString wsSpell; | 214 CFX_WideString wsSpell; |
| 211 GetText(wsSpell); | 215 GetText(wsSpell); |
| 212 int32_t nContentLen = wsSpell.GetLength(); | 216 int32_t nContentLen = wsSpell.GetLength(); |
| 213 for (int i = 0; i < nContentLen; i++) { | 217 for (int i = 0; i < nContentLen; i++) { |
| 214 if (FX_EDIT_ISLATINWORD(wsSpell[i])) { | 218 if (FX_EDIT_ISLATINWORD(wsSpell[i])) { |
| 215 if (sLatinWord.IsEmpty()) | 219 if (sLatinWord.IsEmpty()) |
| 216 nStart = i; | 220 nStart = i; |
| 217 sLatinWord += (FX_CHAR)wsSpell[i]; | 221 sLatinWord += (FX_CHAR)wsSpell[i]; |
| 218 continue; | 222 continue; |
| 219 } | 223 } |
| 220 checkWordEvent.bsWord = sLatinWord; | 224 checkWordEvent.bsWord = sLatinWord; |
| 221 checkWordEvent.bCheckWord = true; | 225 checkWordEvent.bCheckWord = true; |
| 222 DispatchEvent(&checkWordEvent); | 226 DispatchEvent(&checkWordEvent); |
| 227 |
| 223 if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { | 228 if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { |
| 224 AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, | 229 AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, |
| 225 fOffSetY); | 230 fOffSetY); |
| 226 } | 231 } |
| 227 sLatinWord.clear(); | 232 sLatinWord.clear(); |
| 228 } | 233 } |
| 229 | 234 |
| 230 checkWordEvent.bsWord = sLatinWord; | 235 checkWordEvent.bsWord = sLatinWord; |
| 231 checkWordEvent.bCheckWord = true; | 236 checkWordEvent.bCheckWord = true; |
| 232 DispatchEvent(&checkWordEvent); | 237 DispatchEvent(&checkWordEvent); |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 } | 448 } |
| 444 | 449 |
| 445 void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, | 450 void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, |
| 446 FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { | 451 FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { |
| 447 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) | 452 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) |
| 448 UpdateVAlignment(); | 453 UpdateVAlignment(); |
| 449 | 454 |
| 450 CFX_RectF rtTemp; | 455 CFX_RectF rtTemp; |
| 451 GetClientRect(rtTemp); | 456 GetClientRect(rtTemp); |
| 452 | 457 |
| 453 CFWL_EvtEdtTextChanged event; | 458 CFWL_EvtTextChanged event; |
| 454 event.m_pSrcTarget = this; | 459 event.m_pSrcTarget = this; |
| 455 event.nChangeType = ChangeInfo.nChangeType; | 460 event.nChangeType = ChangeInfo.nChangeType; |
| 456 event.wsInsert = ChangeInfo.wsInsert; | 461 event.wsInsert = ChangeInfo.wsInsert; |
| 457 event.wsDelete = ChangeInfo.wsDelete; | 462 event.wsDelete = ChangeInfo.wsDelete; |
| 458 event.wsPrevText = ChangeInfo.wsPrevText; | 463 event.wsPrevText = ChangeInfo.wsPrevText; |
| 459 DispatchEvent(&event); | 464 DispatchEvent(&event); |
| 460 | 465 |
| 461 LayoutScrollBar(); | 466 LayoutScrollBar(); |
| 462 Repaint(&rtTemp); | 467 Repaint(&rtTemp); |
| 463 } | 468 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 493 void IFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, | 498 void IFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, |
| 494 IFDE_TxtEdtDoRecord* pRecord) { | 499 IFDE_TxtEdtDoRecord* pRecord) { |
| 495 AddDoRecord(pRecord); | 500 AddDoRecord(pRecord); |
| 496 } | 501 } |
| 497 | 502 |
| 498 bool IFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { | 503 bool IFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { |
| 499 IFWL_Widget* pDst = GetOuter(); | 504 IFWL_Widget* pDst = GetOuter(); |
| 500 if (!pDst) | 505 if (!pDst) |
| 501 pDst = this; | 506 pDst = this; |
| 502 | 507 |
| 503 CFWL_EvtEdtValidate event; | 508 CFWL_EvtValidate event; |
| 504 event.pDstWidget = pDst; | 509 event.pDstWidget = pDst; |
| 505 event.m_pSrcTarget = this; | 510 event.m_pSrcTarget = this; |
| 506 event.wsInsert = wsText; | 511 event.wsInsert = wsText; |
| 507 event.bValidate = true; | 512 event.bValidate = true; |
| 508 DispatchEvent(&event); | 513 DispatchEvent(&event); |
| 509 return event.bValidate; | 514 return event.bValidate; |
| 510 } | 515 } |
| 511 | 516 |
| 512 void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { | 517 void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { |
| 513 m_fScrollOffsetY = fScrollOffset; | 518 m_fScrollOffsetY = fScrollOffset; |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 m_pCaret.reset(); | 1271 m_pCaret.reset(); |
| 1267 } | 1272 } |
| 1268 } | 1273 } |
| 1269 | 1274 |
| 1270 void IFWL_Edit::ClearRecord() { | 1275 void IFWL_Edit::ClearRecord() { |
| 1271 m_iCurRecord = -1; | 1276 m_iCurRecord = -1; |
| 1272 m_DoRecords.clear(); | 1277 m_DoRecords.clear(); |
| 1273 } | 1278 } |
| 1274 | 1279 |
| 1275 void IFWL_Edit::ProcessInsertError(int32_t iError) { | 1280 void IFWL_Edit::ProcessInsertError(int32_t iError) { |
| 1276 switch (iError) { | 1281 if (iError != -2) |
| 1277 case -2: { | 1282 return; |
| 1278 CFWL_EvtEdtTextFull textFullEvent; | 1283 |
| 1279 textFullEvent.m_pSrcTarget = this; | 1284 CFWL_EvtTextFull textFullEvent; |
| 1280 DispatchEvent(&textFullEvent); | 1285 textFullEvent.m_pSrcTarget = this; |
| 1281 break; | 1286 DispatchEvent(&textFullEvent); |
| 1282 } | |
| 1283 default: | |
| 1284 break; | |
| 1285 } | |
| 1286 } | 1287 } |
| 1287 | 1288 |
| 1288 void IFWL_Edit::OnProcessMessage(CFWL_Message* pMessage) { | 1289 void IFWL_Edit::OnProcessMessage(CFWL_Message* pMessage) { |
| 1289 if (!pMessage) | 1290 if (!pMessage) |
| 1290 return; | 1291 return; |
| 1291 | 1292 |
| 1292 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); | 1293 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); |
| 1293 switch (dwMsgCode) { | 1294 switch (dwMsgCode) { |
| 1294 case CFWL_MessageType::SetFocus: | 1295 case CFWL_MessageType::SetFocus: |
| 1295 case CFWL_MessageType::KillFocus: | 1296 case CFWL_MessageType::KillFocus: |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1650 UpdateOffset(pScrollBar, fPos - iCurPos); | 1651 UpdateOffset(pScrollBar, fPos - iCurPos); |
| 1651 UpdateCaret(); | 1652 UpdateCaret(); |
| 1652 | 1653 |
| 1653 CFX_RectF rect; | 1654 CFX_RectF rect; |
| 1654 GetWidgetRect(rect); | 1655 GetWidgetRect(rect); |
| 1655 CFX_RectF rtInvalidate; | 1656 CFX_RectF rtInvalidate; |
| 1656 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); | 1657 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); |
| 1657 Repaint(&rtInvalidate); | 1658 Repaint(&rtInvalidate); |
| 1658 return true; | 1659 return true; |
| 1659 } | 1660 } |
| OLD | NEW |