Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: xfa/fde/cfde_txtedtengine.cpp

Issue 2467203003: Remove FX_BOOL from xfa. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fde/cfde_txtedtengine.h ('k') | xfa/fde/cfde_txtedtpage.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fde/cfde_txtedtengine.h" 7 #include "xfa/fde/cfde_txtedtengine.h"
8 8
9 #include "xfa/fde/cfde_txtedtbuf.h" 9 #include "xfa/fde/cfde_txtedtbuf.h"
10 #include "xfa/fde/cfde_txtedtbufiter.h" 10 #include "xfa/fde/cfde_txtedtbufiter.h"
(...skipping 18 matching lines...) Expand all
29 fPlateHeight(0), 29 fPlateHeight(0),
30 nLineCount(0), 30 nLineCount(0),
31 dwLayoutStyles(0), 31 dwLayoutStyles(0),
32 dwAlignment(0), 32 dwAlignment(0),
33 dwMode(0), 33 dwMode(0),
34 pFont(nullptr), 34 pFont(nullptr),
35 fFontSize(10.0f), 35 fFontSize(10.0f),
36 dwFontColor(0xff000000), 36 dwFontColor(0xff000000),
37 fLineSpace(10.0f), 37 fLineSpace(10.0f),
38 fTabWidth(36), 38 fTabWidth(36),
39 bTabEquidistant(FALSE), 39 bTabEquidistant(false),
40 wDefChar(0xFEFF), 40 wDefChar(0xFEFF),
41 wLineBreakChar('\n'), 41 wLineBreakChar('\n'),
42 nCharRotation(0), 42 nCharRotation(0),
43 nLineEnd(0), 43 nLineEnd(0),
44 nHorzScale(100), 44 nHorzScale(100),
45 fCharSpace(0), 45 fCharSpace(0),
46 pEventSink(nullptr) {} 46 pEventSink(nullptr) {}
47 47
48 FDE_TXTEDT_TEXTCHANGE_INFO::FDE_TXTEDT_TEXTCHANGE_INFO() {} 48 FDE_TXTEDT_TEXTCHANGE_INFO::FDE_TXTEDT_TEXTCHANGE_INFO() {}
49 49
50 FDE_TXTEDT_TEXTCHANGE_INFO::~FDE_TXTEDT_TEXTCHANGE_INFO() {} 50 FDE_TXTEDT_TEXTCHANGE_INFO::~FDE_TXTEDT_TEXTCHANGE_INFO() {}
51 51
52 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() 52 CFDE_TxtEdtEngine::CFDE_TxtEdtEngine()
53 : m_pTxtBuf(new CFDE_TxtEdtBuf()), 53 : m_pTxtBuf(new CFDE_TxtEdtBuf()),
54 m_nPageLineCount(20), 54 m_nPageLineCount(20),
55 m_nLineCount(0), 55 m_nLineCount(0),
56 m_nAnchorPos(-1), 56 m_nAnchorPos(-1),
57 m_nLayoutPos(0), 57 m_nLayoutPos(0),
58 m_fCaretPosReserve(0.0), 58 m_fCaretPosReserve(0.0),
59 m_nCaret(0), 59 m_nCaret(0),
60 m_bBefore(TRUE), 60 m_bBefore(true),
61 m_nCaretPage(0), 61 m_nCaretPage(0),
62 m_dwFindFlags(0), 62 m_dwFindFlags(0),
63 m_bLock(FALSE), 63 m_bLock(false),
64 m_nLimit(0), 64 m_nLimit(0),
65 m_wcAliasChar(L'*'), 65 m_wcAliasChar(L'*'),
66 m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto), 66 m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto),
67 m_bAutoLineEnd(TRUE), 67 m_bAutoLineEnd(true),
68 m_wLineEnd(kUnicodeParagraphSeparator) { 68 m_wLineEnd(kUnicodeParagraphSeparator) {
69 FXSYS_memset(&m_rtCaret, 0, sizeof(CFX_RectF)); 69 FXSYS_memset(&m_rtCaret, 0, sizeof(CFX_RectF));
70 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); 70 m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto);
71 } 71 }
72 72
73 CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() { 73 CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() {
74 RemoveAllParags(); 74 RemoveAllParags();
75 RemoveAllPages(); 75 RemoveAllPages();
76 m_Param.pEventSink = nullptr; 76 m_Param.pEventSink = nullptr;
77 ClearSelection(); 77 ClearSelection();
(...skipping 25 matching lines...) Expand all
103 return nullptr; 103 return nullptr;
104 } 104 }
105 return m_PagePtrArray[nIndex]; 105 return m_PagePtrArray[nIndex];
106 } 106 }
107 107
108 void CFDE_TxtEdtEngine::SetTextByStream(IFX_Stream* pStream) { 108 void CFDE_TxtEdtEngine::SetTextByStream(IFX_Stream* pStream) {
109 ResetEngine(); 109 ResetEngine();
110 int32_t nIndex = 0; 110 int32_t nIndex = 0;
111 if (pStream && pStream->GetLength()) { 111 if (pStream && pStream->GetLength()) {
112 int32_t nStreamLength = pStream->GetLength(); 112 int32_t nStreamLength = pStream->GetLength();
113 FX_BOOL bValid = TRUE; 113 bool bValid = true;
114 if (m_nLimit > 0 && nStreamLength > m_nLimit) { 114 if (m_nLimit > 0 && nStreamLength > m_nLimit) {
115 bValid = FALSE; 115 bValid = false;
116 } 116 }
117 FX_BOOL bPreIsCR = FALSE; 117 bool bPreIsCR = false;
118 if (bValid) { 118 if (bValid) {
119 uint8_t bom[4]; 119 uint8_t bom[4];
120 int32_t nPos = pStream->GetBOM(bom); 120 int32_t nPos = pStream->GetBOM(bom);
121 pStream->Seek(FX_STREAMSEEK_Begin, nPos); 121 pStream->Seek(FX_STREAMSEEK_Begin, nPos);
122 int32_t nPlateSize = std::min(nStreamLength, m_pTxtBuf->GetChunkSize()); 122 int32_t nPlateSize = std::min(nStreamLength, m_pTxtBuf->GetChunkSize());
123 FX_WCHAR* lpwstr = FX_Alloc(FX_WCHAR, nPlateSize); 123 FX_WCHAR* lpwstr = FX_Alloc(FX_WCHAR, nPlateSize);
124 FX_BOOL bEos = false; 124 bool bEos = false;
125 while (!bEos) { 125 while (!bEos) {
126 int32_t nRead = pStream->ReadString(lpwstr, nPlateSize, bEos); 126 int32_t nRead = pStream->ReadString(lpwstr, nPlateSize, bEos);
127 bPreIsCR = ReplaceParagEnd(lpwstr, nRead, bPreIsCR); 127 bPreIsCR = ReplaceParagEnd(lpwstr, nRead, bPreIsCR);
128 m_pTxtBuf->Insert(nIndex, lpwstr, nRead); 128 m_pTxtBuf->Insert(nIndex, lpwstr, nRead);
129 nIndex += nRead; 129 nIndex += nRead;
130 } 130 }
131 FX_Free(lpwstr); 131 FX_Free(lpwstr);
132 } 132 }
133 } 133 }
134 m_pTxtBuf->Insert(nIndex, &m_wLineEnd, 1); 134 m_pTxtBuf->Insert(nIndex, &m_wLineEnd, 1);
135 RebuildParagraphs(); 135 RebuildParagraphs();
136 } 136 }
137 137
138 void CFDE_TxtEdtEngine::SetText(const CFX_WideString& wsText) { 138 void CFDE_TxtEdtEngine::SetText(const CFX_WideString& wsText) {
139 ResetEngine(); 139 ResetEngine();
140 int32_t nLength = wsText.GetLength(); 140 int32_t nLength = wsText.GetLength();
141 if (nLength > 0) { 141 if (nLength > 0) {
142 CFX_WideString wsTemp; 142 CFX_WideString wsTemp;
143 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); 143 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength);
144 FXSYS_memcpy(lpBuffer, wsText.c_str(), nLength * sizeof(FX_WCHAR)); 144 FXSYS_memcpy(lpBuffer, wsText.c_str(), nLength * sizeof(FX_WCHAR));
145 ReplaceParagEnd(lpBuffer, nLength, FALSE); 145 ReplaceParagEnd(lpBuffer, nLength, false);
146 wsTemp.ReleaseBuffer(nLength); 146 wsTemp.ReleaseBuffer(nLength);
147 if (m_nLimit > 0 && nLength > m_nLimit) { 147 if (m_nLimit > 0 && nLength > m_nLimit) {
148 wsTemp.Delete(m_nLimit, nLength - m_nLimit); 148 wsTemp.Delete(m_nLimit, nLength - m_nLimit);
149 nLength = m_nLimit; 149 nLength = m_nLimit;
150 } 150 }
151 m_pTxtBuf->SetText(wsTemp); 151 m_pTxtBuf->SetText(wsTemp);
152 } 152 }
153 m_pTxtBuf->Insert(nLength, &m_wLineEnd, 1); 153 m_pTxtBuf->Insert(nLength, &m_wLineEnd, 1);
154 RebuildParagraphs(); 154 RebuildParagraphs();
155 } 155 }
(...skipping 22 matching lines...) Expand all
178 return m_nCaret; 178 return m_nCaret;
179 } 179 }
180 180
181 int32_t CFDE_TxtEdtEngine::GetCaretPos() const { 181 int32_t CFDE_TxtEdtEngine::GetCaretPos() const {
182 if (IsLocked()) { 182 if (IsLocked()) {
183 return 0; 183 return 0;
184 } 184 }
185 return m_nCaret + (m_bBefore ? 0 : 1); 185 return m_nCaret + (m_bBefore ? 0 : 1);
186 } 186 }
187 187
188 int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { 188 int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, bool bBefore) {
189 if (IsLocked()) { 189 if (IsLocked()) {
190 return 0; 190 return 0;
191 } 191 }
192 ASSERT(nIndex >= 0 && nIndex <= GetTextBufLength()); 192 ASSERT(nIndex >= 0 && nIndex <= GetTextBufLength());
193 if (m_PagePtrArray.GetSize() <= m_nCaretPage) { 193 if (m_PagePtrArray.GetSize() <= m_nCaretPage) {
194 return 0; 194 return 0;
195 } 195 }
196 m_bBefore = bBefore; 196 m_bBefore = bBefore;
197 m_nCaret = nIndex; 197 m_nCaret = nIndex;
198 MovePage2Char(m_nCaret); 198 MovePage2Char(m_nCaret);
199 GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore); 199 GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore);
200 if (!m_bBefore) { 200 if (!m_bBefore) {
201 m_nCaret++; 201 m_nCaret++;
202 m_bBefore = TRUE; 202 m_bBefore = true;
203 } 203 }
204 m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) 204 m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
205 ? m_rtCaret.top 205 ? m_rtCaret.top
206 : m_rtCaret.left; 206 : m_rtCaret.left;
207 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0); 207 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
208 m_nAnchorPos = -1; 208 m_nAnchorPos = -1;
209 return m_nCaret; 209 return m_nCaret;
210 } 210 }
211 211
212 int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, 212 int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
213 FX_BOOL bShift, 213 bool bShift,
214 FX_BOOL bCtrl) { 214 bool bCtrl) {
215 if (IsLocked()) { 215 if (IsLocked()) {
216 return 0; 216 return 0;
217 } 217 }
218 if (m_PagePtrArray.GetSize() <= m_nCaretPage) { 218 if (m_PagePtrArray.GetSize() <= m_nCaretPage) {
219 return 0; 219 return 0;
220 } 220 }
221 FX_BOOL bSelChange = FALSE; 221 bool bSelChange = false;
222 if (IsSelect()) { 222 if (IsSelect()) {
223 ClearSelection(); 223 ClearSelection();
224 bSelChange = TRUE; 224 bSelChange = true;
225 } 225 }
226 if (bShift) { 226 if (bShift) {
227 if (m_nAnchorPos == -1) { 227 if (m_nAnchorPos == -1) {
228 m_nAnchorPos = m_nCaret; 228 m_nAnchorPos = m_nCaret;
229 } 229 }
230 } else { 230 } else {
231 m_nAnchorPos = -1; 231 m_nAnchorPos = -1;
232 } 232 }
233 FX_BOOL bVertical = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical; 233 bool bVertical = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical;
234 switch (eMoveCaret) { 234 switch (eMoveCaret) {
235 case MC_Left: { 235 case MC_Left: {
236 if (bVertical) { 236 if (bVertical) {
237 CFX_PointF ptCaret; 237 CFX_PointF ptCaret;
238 if (MoveUp(ptCaret)) { 238 if (MoveUp(ptCaret)) {
239 UpdateCaretIndex(ptCaret); 239 UpdateCaretIndex(ptCaret);
240 } 240 }
241 } else { 241 } else {
242 FX_BOOL bBefore = TRUE; 242 bool bBefore = true;
243 int32_t nIndex = MoveBackward(bBefore); 243 int32_t nIndex = MoveBackward(bBefore);
244 if (nIndex >= 0) { 244 if (nIndex >= 0) {
245 UpdateCaretRect(nIndex, bBefore); 245 UpdateCaretRect(nIndex, bBefore);
246 } 246 }
247 } 247 }
248 } break; 248 } break;
249 case MC_Right: { 249 case MC_Right: {
250 if (bVertical) { 250 if (bVertical) {
251 CFX_PointF ptCaret; 251 CFX_PointF ptCaret;
252 if (MoveDown(ptCaret)) { 252 if (MoveDown(ptCaret)) {
253 UpdateCaretIndex(ptCaret); 253 UpdateCaretIndex(ptCaret);
254 } 254 }
255 } else { 255 } else {
256 FX_BOOL bBefore = TRUE; 256 bool bBefore = true;
257 int32_t nIndex = MoveForward(bBefore); 257 int32_t nIndex = MoveForward(bBefore);
258 if (nIndex >= 0) { 258 if (nIndex >= 0) {
259 UpdateCaretRect(nIndex, bBefore); 259 UpdateCaretRect(nIndex, bBefore);
260 } 260 }
261 } 261 }
262 } break; 262 } break;
263 case MC_Up: { 263 case MC_Up: {
264 if (bVertical) { 264 if (bVertical) {
265 FX_BOOL bBefore = TRUE; 265 bool bBefore = true;
266 int32_t nIndex = MoveBackward(bBefore); 266 int32_t nIndex = MoveBackward(bBefore);
267 if (nIndex >= 0) { 267 if (nIndex >= 0) {
268 UpdateCaretRect(nIndex, bBefore); 268 UpdateCaretRect(nIndex, bBefore);
269 } 269 }
270 } else { 270 } else {
271 CFX_PointF ptCaret; 271 CFX_PointF ptCaret;
272 if (MoveUp(ptCaret)) { 272 if (MoveUp(ptCaret)) {
273 UpdateCaretIndex(ptCaret); 273 UpdateCaretIndex(ptCaret);
274 } 274 }
275 } 275 }
276 } break; 276 } break;
277 case MC_Down: { 277 case MC_Down: {
278 if (bVertical) { 278 if (bVertical) {
279 FX_BOOL bBefore = TRUE; 279 bool bBefore = true;
280 int32_t nIndex = MoveForward(bBefore); 280 int32_t nIndex = MoveForward(bBefore);
281 if (nIndex >= 0) { 281 if (nIndex >= 0) {
282 UpdateCaretRect(nIndex, bBefore); 282 UpdateCaretRect(nIndex, bBefore);
283 } 283 }
284 } else { 284 } else {
285 CFX_PointF ptCaret; 285 CFX_PointF ptCaret;
286 if (MoveDown(ptCaret)) { 286 if (MoveDown(ptCaret)) {
287 UpdateCaretIndex(ptCaret); 287 UpdateCaretIndex(ptCaret);
288 } 288 }
289 } 289 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 FXSYS_abs(m_nAnchorPos - m_nCaret)); 322 FXSYS_abs(m_nAnchorPos - m_nCaret));
323 m_Param.pEventSink->On_SelChanged(this); 323 m_Param.pEventSink->On_SelChanged(this);
324 } 324 }
325 if (bSelChange) { 325 if (bSelChange) {
326 m_Param.pEventSink->On_SelChanged(this); 326 m_Param.pEventSink->On_SelChanged(this);
327 } 327 }
328 return m_nCaret; 328 return m_nCaret;
329 } 329 }
330 330
331 void CFDE_TxtEdtEngine::Lock() { 331 void CFDE_TxtEdtEngine::Lock() {
332 m_bLock = TRUE; 332 m_bLock = true;
333 } 333 }
334 334
335 void CFDE_TxtEdtEngine::Unlock() { 335 void CFDE_TxtEdtEngine::Unlock() {
336 m_bLock = FALSE; 336 m_bLock = false;
337 } 337 }
338 338
339 FX_BOOL CFDE_TxtEdtEngine::IsLocked() const { 339 bool CFDE_TxtEdtEngine::IsLocked() const {
340 return m_bLock; 340 return m_bLock;
341 } 341 }
342 342
343 int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart, 343 int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
344 const FX_WCHAR* lpText, 344 const FX_WCHAR* lpText,
345 int32_t nLength) { 345 int32_t nLength) {
346 if (IsLocked()) { 346 if (IsLocked()) {
347 return FDE_TXTEDT_MODIFY_RET_F_Locked; 347 return FDE_TXTEDT_MODIFY_RET_F_Locked;
348 } 348 }
349 CFX_WideString wsTemp; 349 CFX_WideString wsTemp;
350 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); 350 FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength);
351 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); 351 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR));
352 ReplaceParagEnd(lpBuffer, nLength, FALSE); 352 ReplaceParagEnd(lpBuffer, nLength, false);
353 wsTemp.ReleaseBuffer(nLength); 353 wsTemp.ReleaseBuffer(nLength);
354 FX_BOOL bPart = FALSE; 354 bool bPart = false;
355 if (m_nLimit > 0) { 355 if (m_nLimit > 0) {
356 int32_t nTotalLength = GetTextBufLength(); 356 int32_t nTotalLength = GetTextBufLength();
357 int32_t nCount = m_SelRangePtrArr.GetSize(); 357 int32_t nCount = m_SelRangePtrArr.GetSize();
358 for (int32_t i = 0; i < nCount; i++) { 358 for (int32_t i = 0; i < nCount; i++) {
359 FDE_TXTEDTSELRANGE* lpSelRange = m_SelRangePtrArr.GetAt(i); 359 FDE_TXTEDTSELRANGE* lpSelRange = m_SelRangePtrArr.GetAt(i);
360 nTotalLength -= lpSelRange->nCount; 360 nTotalLength -= lpSelRange->nCount;
361 } 361 }
362 int32_t nExpectLength = nTotalLength + nLength; 362 int32_t nExpectLength = nTotalLength + nLength;
363 if (nTotalLength == m_nLimit) { 363 if (nTotalLength == m_nLimit) {
364 return FDE_TXTEDT_MODIFY_RET_F_Full; 364 return FDE_TXTEDT_MODIFY_RET_F_Full;
365 } 365 }
366 if (nExpectLength > m_nLimit) { 366 if (nExpectLength > m_nLimit) {
367 nLength -= (nExpectLength - m_nLimit); 367 nLength -= (nExpectLength - m_nLimit);
368 bPart = TRUE; 368 bPart = true;
369 } 369 }
370 } 370 }
371 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) || 371 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) ||
372 (m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz)) { 372 (m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz)) {
373 int32_t nTemp = nLength; 373 int32_t nTemp = nLength;
374 if (m_Param.dwMode & FDE_TEXTEDITMODE_Password) { 374 if (m_Param.dwMode & FDE_TEXTEDITMODE_Password) {
375 CFX_WideString wsText; 375 CFX_WideString wsText;
376 while (nLength > 0) { 376 while (nLength > 0) {
377 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); 377 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength);
378 int32_t nTotal = wsText.GetLength(); 378 int32_t nTotal = wsText.GetLength();
(...skipping 14 matching lines...) Expand all
393 if (IsFitArea(wsText)) { 393 if (IsFitArea(wsText)) {
394 break; 394 break;
395 } 395 }
396 nLength--; 396 nLength--;
397 } 397 }
398 } 398 }
399 if (nLength == 0) { 399 if (nLength == 0) {
400 return FDE_TXTEDT_MODIFY_RET_F_Full; 400 return FDE_TXTEDT_MODIFY_RET_F_Full;
401 } 401 }
402 if (nLength < nTemp) { 402 if (nLength < nTemp) {
403 bPart = TRUE; 403 bPart = true;
404 } 404 }
405 } 405 }
406 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { 406 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
407 CFX_WideString wsText; 407 CFX_WideString wsText;
408 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); 408 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength);
409 if (!m_Param.pEventSink->On_Validate(this, wsText)) { 409 if (!m_Param.pEventSink->On_Validate(this, wsText)) {
410 return FDE_TXTEDT_MODIFY_RET_F_Invalidate; 410 return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
411 } 411 }
412 } 412 }
413 if (IsSelect()) { 413 if (IsSelect()) {
414 DeleteSelect(); 414 DeleteSelect();
415 } 415 }
416 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) 416 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
417 m_Param.pEventSink->On_AddDoRecord( 417 m_Param.pEventSink->On_AddDoRecord(
418 this, 418 this,
419 new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength)); 419 new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength));
420 420
421 GetText(m_ChangeInfo.wsPrevText, 0); 421 GetText(m_ChangeInfo.wsPrevText, 0);
422 Inner_Insert(m_nCaret, lpBuffer, nLength); 422 Inner_Insert(m_nCaret, lpBuffer, nLength);
423 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; 423 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
424 m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength); 424 m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength);
425 nStart = m_nCaret; 425 nStart = m_nCaret;
426 nStart += nLength; 426 nStart += nLength;
427 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1); 427 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1);
428 FX_BOOL bBefore = TRUE; 428 bool bBefore = true;
429 if (wChar != L'\n' && wChar != L'\r') { 429 if (wChar != L'\n' && wChar != L'\r') {
430 nStart--; 430 nStart--;
431 bBefore = FALSE; 431 bBefore = false;
432 } 432 }
433 SetCaretPos(nStart, bBefore); 433 SetCaretPos(nStart, bBefore);
434 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 434 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
435 return bPart ? FDE_TXTEDT_MODIFY_RET_S_Part : FDE_TXTEDT_MODIFY_RET_S_Normal; 435 return bPart ? FDE_TXTEDT_MODIFY_RET_S_Part : FDE_TXTEDT_MODIFY_RET_S_Normal;
436 } 436 }
437 437
438 int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, FX_BOOL bBackspace) { 438 int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, bool bBackspace) {
439 if (IsLocked()) { 439 if (IsLocked()) {
440 return FDE_TXTEDT_MODIFY_RET_F_Locked; 440 return FDE_TXTEDT_MODIFY_RET_F_Locked;
441 } 441 }
442 if (IsSelect()) { 442 if (IsSelect()) {
443 DeleteSelect(); 443 DeleteSelect();
444 return FDE_TXTEDT_MODIFY_RET_S_Normal; 444 return FDE_TXTEDT_MODIFY_RET_S_Normal;
445 } 445 }
446 446
447 int32_t nCount = 1; 447 int32_t nCount = 1;
448 if (bBackspace) { 448 if (bBackspace) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 } 500 }
501 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { 501 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
502 CFX_WideString wsText; 502 CFX_WideString wsText;
503 GetPreDeleteText(wsText, nStart, nCount); 503 GetPreDeleteText(wsText, nStart, nCount);
504 if (!m_Param.pEventSink->On_Validate(this, wsText)) { 504 if (!m_Param.pEventSink->On_Validate(this, wsText)) {
505 return FDE_TXTEDT_MODIFY_RET_F_Invalidate; 505 return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
506 } 506 }
507 } 507 }
508 DeleteRange_DoRecord(nStart, nCount); 508 DeleteRange_DoRecord(nStart, nCount);
509 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 509 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
510 SetCaretPos(nStart, TRUE); 510 SetCaretPos(nStart, true);
511 return FDE_TXTEDT_MODIFY_RET_S_Normal; 511 return FDE_TXTEDT_MODIFY_RET_S_Normal;
512 } 512 }
513 513
514 int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart, 514 int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart,
515 int32_t nLength, 515 int32_t nLength,
516 const CFX_WideString& wsReplace) { 516 const CFX_WideString& wsReplace) {
517 if (IsLocked()) { 517 if (IsLocked()) {
518 return FDE_TXTEDT_MODIFY_RET_F_Locked; 518 return FDE_TXTEDT_MODIFY_RET_F_Locked;
519 } 519 }
520 if (nStart < 0 || (nStart + nLength > GetTextBufLength())) { 520 if (nStart < 0 || (nStart + nLength > GetTextBufLength())) {
(...skipping 15 matching lines...) Expand all
536 if (nLength > 0) { 536 if (nLength > 0) {
537 Inner_DeleteRange(nStart, nLength); 537 Inner_DeleteRange(nStart, nLength);
538 } 538 }
539 int32_t nTextLength = wsReplace.GetLength(); 539 int32_t nTextLength = wsReplace.GetLength();
540 if (nTextLength > 0) { 540 if (nTextLength > 0) {
541 Inner_Insert(nStart, wsReplace.c_str(), nTextLength); 541 Inner_Insert(nStart, wsReplace.c_str(), nTextLength);
542 } 542 }
543 m_ChangeInfo.wsInsert = CFX_WideString(wsReplace.c_str(), nTextLength); 543 m_ChangeInfo.wsInsert = CFX_WideString(wsReplace.c_str(), nTextLength);
544 nStart += nTextLength; 544 nStart += nTextLength;
545 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1); 545 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1);
546 FX_BOOL bBefore = TRUE; 546 bool bBefore = true;
547 if (wChar != L'\n' && wChar != L'\r') { 547 if (wChar != L'\n' && wChar != L'\r') {
548 nStart--; 548 nStart--;
549 bBefore = FALSE; 549 bBefore = false;
550 } 550 }
551 SetCaretPos(nStart, bBefore); 551 SetCaretPos(nStart, bBefore);
552 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); 552 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
553 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); 553 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
554 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 554 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
555 return FDE_TXTEDT_MODIFY_RET_S_Normal; 555 return FDE_TXTEDT_MODIFY_RET_S_Normal;
556 } 556 }
557 557
558 void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) { 558 void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) {
559 m_nLimit = nLimit; 559 m_nLimit = nLimit;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 lpTemp = m_SelRangePtrArr[nSize - 1]; 594 lpTemp = m_SelRangePtrArr[nSize - 1];
595 if (nStart >= lpTemp->nStart + lpTemp->nCount) { 595 if (nStart >= lpTemp->nStart + lpTemp->nCount) {
596 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; 596 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE;
597 lpSelRange->nStart = nStart; 597 lpSelRange->nStart = nStart;
598 lpSelRange->nCount = nCount; 598 lpSelRange->nCount = nCount;
599 m_SelRangePtrArr.Add(lpSelRange); 599 m_SelRangePtrArr.Add(lpSelRange);
600 m_Param.pEventSink->On_SelChanged(this); 600 m_Param.pEventSink->On_SelChanged(this);
601 return; 601 return;
602 } 602 }
603 int32_t nEnd = nStart + nCount - 1; 603 int32_t nEnd = nStart + nCount - 1;
604 FX_BOOL bBegin = FALSE; 604 bool bBegin = false;
605 int32_t nRangeBgn = 0; 605 int32_t nRangeBgn = 0;
606 int32_t nRangeCnt = 0; 606 int32_t nRangeCnt = 0;
607 for (int32_t i = 0; i < nSize; i++) { 607 for (int32_t i = 0; i < nSize; i++) {
608 lpTemp = m_SelRangePtrArr[i]; 608 lpTemp = m_SelRangePtrArr[i];
609 int32_t nTempBgn = lpTemp->nStart; 609 int32_t nTempBgn = lpTemp->nStart;
610 int32_t nTempEnd = nTempBgn + lpTemp->nCount - 1; 610 int32_t nTempEnd = nTempBgn + lpTemp->nCount - 1;
611 if (bBegin) { 611 if (bBegin) {
612 if (nEnd < nTempBgn) { 612 if (nEnd < nTempBgn) {
613 break; 613 break;
614 } else if (nStart >= nTempBgn && nStart <= nTempEnd) { 614 } else if (nStart >= nTempBgn && nStart <= nTempEnd) {
615 nRangeCnt++; 615 nRangeCnt++;
616 break; 616 break;
617 } 617 }
618 nRangeCnt++; 618 nRangeCnt++;
619 } else { 619 } else {
620 if (nStart <= nTempEnd) { 620 if (nStart <= nTempEnd) {
621 nRangeBgn = i; 621 nRangeBgn = i;
622 if (nEnd < nTempBgn) { 622 if (nEnd < nTempBgn) {
623 break; 623 break;
624 } 624 }
625 nRangeCnt = 1; 625 nRangeCnt = 1;
626 bBegin = TRUE; 626 bBegin = true;
627 } 627 }
628 } 628 }
629 } 629 }
630 if (nRangeCnt == 0) { 630 if (nRangeCnt == 0) {
631 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE; 631 FDE_TXTEDTSELRANGE* lpSelRange = new FDE_TXTEDTSELRANGE;
632 lpSelRange->nStart = nStart; 632 lpSelRange->nStart = nStart;
633 lpSelRange->nCount = nCount; 633 lpSelRange->nCount = nCount;
634 m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange); 634 m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange);
635 } else { 635 } else {
636 lpTemp = m_SelRangePtrArr[nRangeBgn]; 636 lpTemp = m_SelRangePtrArr[nRangeBgn];
(...skipping 20 matching lines...) Expand all
657 657
658 void CFDE_TxtEdtEngine::ClearSelection() { 658 void CFDE_TxtEdtEngine::ClearSelection() {
659 int32_t nCount = m_SelRangePtrArr.GetSize(); 659 int32_t nCount = m_SelRangePtrArr.GetSize();
660 for (int i = 0; i < nCount; ++i) 660 for (int i = 0; i < nCount; ++i)
661 delete m_SelRangePtrArr[i]; 661 delete m_SelRangePtrArr[i];
662 m_SelRangePtrArr.RemoveAll(); 662 m_SelRangePtrArr.RemoveAll();
663 if (nCount && m_Param.pEventSink) 663 if (nCount && m_Param.pEventSink)
664 m_Param.pEventSink->On_SelChanged(this); 664 m_Param.pEventSink->On_SelChanged(this);
665 } 665 }
666 666
667 FX_BOOL CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) { 667 bool CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
668 if (IsLocked()) 668 if (IsLocked())
669 return FALSE; 669 return false;
670 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) 670 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
671 return FALSE; 671 return false;
672 return pDoRecord->Redo(); 672 return pDoRecord->Redo();
673 } 673 }
674 674
675 FX_BOOL CFDE_TxtEdtEngine::Undo(const IFDE_TxtEdtDoRecord* pDoRecord) { 675 bool CFDE_TxtEdtEngine::Undo(const IFDE_TxtEdtDoRecord* pDoRecord) {
676 if (IsLocked()) 676 if (IsLocked())
677 return FALSE; 677 return false;
678 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) 678 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
679 return FALSE; 679 return false;
680 return pDoRecord->Undo(); 680 return pDoRecord->Undo();
681 } 681 }
682 682
683 int32_t CFDE_TxtEdtEngine::StartLayout() { 683 int32_t CFDE_TxtEdtEngine::StartLayout() {
684 Lock(); 684 Lock();
685 RemoveAllPages(); 685 RemoveAllPages();
686 m_nLayoutPos = 0; 686 m_nLayoutPos = 0;
687 m_nLineCount = 0; 687 m_nLineCount = 0;
688 return 0; 688 return 0;
689 } 689 }
(...skipping 22 matching lines...) Expand all
712 m_nCaret = nLength; 712 m_nCaret = nLength;
713 } 713 }
714 int32_t nIndex = m_nCaret; 714 int32_t nIndex = m_nCaret;
715 if (!m_bBefore) { 715 if (!m_bBefore) {
716 nIndex--; 716 nIndex--;
717 } 717 }
718 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); 718 m_rtCaret.Set(0, 0, 1, m_Param.fFontSize);
719 Unlock(); 719 Unlock();
720 } 720 }
721 721
722 FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { 722 bool CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) {
723 return m_pTxtBuf->Optimize(pPause); 723 return m_pTxtBuf->Optimize(pPause);
724 } 724 }
725 725
726 CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { 726 CFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const {
727 return m_pTxtBuf.get(); 727 return m_pTxtBuf.get();
728 } 728 }
729 729
730 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { 730 int32_t CFDE_TxtEdtEngine::GetTextBufLength() const {
731 return m_pTxtBuf->GetTextLength() - 1; 731 return m_pTxtBuf->GetTextLength() - 1;
732 } 732 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 m_ParagPtrArray[i]->IncrementStartIndex(nLength); 841 m_ParagPtrArray[i]->IncrementStartIndex(nLength);
842 842
843 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; 843 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
844 int32_t nReserveLineCount = pParag->GetLineCount(); 844 int32_t nReserveLineCount = pParag->GetLineCount();
845 int32_t nReserveCharStart = pParag->GetStartIndex(); 845 int32_t nReserveCharStart = pParag->GetStartIndex();
846 int32_t nLeavePart = ParagPos.nCharIndex; 846 int32_t nLeavePart = ParagPos.nCharIndex;
847 int32_t nCutPart = pParag->GetTextLength() - ParagPos.nCharIndex; 847 int32_t nCutPart = pParag->GetTextLength() - ParagPos.nCharIndex;
848 int32_t nTextStart = 0; 848 int32_t nTextStart = 0;
849 FX_WCHAR wCurChar = L' '; 849 FX_WCHAR wCurChar = L' ';
850 const FX_WCHAR* lpPos = lpText; 850 const FX_WCHAR* lpPos = lpText;
851 FX_BOOL bFirst = TRUE; 851 bool bFirst = true;
852 int32_t nParagIndex = ParagPos.nParagIndex; 852 int32_t nParagIndex = ParagPos.nParagIndex;
853 for (i = 0; i < nLength; i++, lpPos++) { 853 for (i = 0; i < nLength; i++, lpPos++) {
854 wCurChar = *lpPos; 854 wCurChar = *lpPos;
855 if (wCurChar == m_wLineEnd) { 855 if (wCurChar == m_wLineEnd) {
856 if (bFirst) { 856 if (bFirst) {
857 pParag->SetTextLength(nLeavePart + (i - nTextStart + 1)); 857 pParag->SetTextLength(nLeavePart + (i - nTextStart + 1));
858 pParag->SetLineCount(-1); 858 pParag->SetLineCount(-1);
859 nReserveCharStart += pParag->GetTextLength(); 859 nReserveCharStart += pParag->GetTextLength();
860 bFirst = FALSE; 860 bFirst = false;
861 } else { 861 } else {
862 pParag = new CFDE_TxtEdtParag(this); 862 pParag = new CFDE_TxtEdtParag(this);
863 pParag->SetLineCount(-1); 863 pParag->SetLineCount(-1);
864 pParag->SetTextLength(i - nTextStart + 1); 864 pParag->SetTextLength(i - nTextStart + 1);
865 pParag->SetStartIndex(nReserveCharStart); 865 pParag->SetStartIndex(nReserveCharStart);
866 m_ParagPtrArray.InsertAt(++nParagIndex, pParag); 866 m_ParagPtrArray.InsertAt(++nParagIndex, pParag);
867 nReserveCharStart += pParag->GetTextLength(); 867 nReserveCharStart += pParag->GetTextLength();
868 } 868 }
869 nTextStart = i + 1; 869 nTextStart = i + 1;
870 } 870 }
871 } 871 }
872 if (bFirst) { 872 if (bFirst) {
873 pParag->IncrementTextLength(nLength); 873 pParag->IncrementTextLength(nLength);
874 pParag->SetLineCount(-1); 874 pParag->SetLineCount(-1);
875 bFirst = FALSE; 875 bFirst = false;
876 } else { 876 } else {
877 pParag = new CFDE_TxtEdtParag(this); 877 pParag = new CFDE_TxtEdtParag(this);
878 pParag->SetLineCount(-1); 878 pParag->SetLineCount(-1);
879 pParag->SetTextLength(nLength - nTextStart + nCutPart); 879 pParag->SetTextLength(nLength - nTextStart + nCutPart);
880 pParag->SetStartIndex(nReserveCharStart); 880 pParag->SetStartIndex(nReserveCharStart);
881 m_ParagPtrArray.InsertAt(++nParagIndex, pParag); 881 m_ParagPtrArray.InsertAt(++nParagIndex, pParag);
882 } 882 }
883 m_pTxtBuf->Insert(nStart, lpText, nLength); 883 m_pTxtBuf->Insert(nStart, lpText, nLength);
884 int32_t nTotalLineCount = 0; 884 int32_t nTotalLineCount = 0;
885 for (i = ParagPos.nParagIndex; i <= nParagIndex; i++) { 885 for (i = ParagPos.nParagIndex; i <= nParagIndex; i++) {
(...skipping 10 matching lines...) Expand all
896 if (nCount == -1) { 896 if (nCount == -1) {
897 nCount = m_pTxtBuf->GetTextLength() - nStart; 897 nCount = m_pTxtBuf->GetTextLength() - nStart;
898 } 898 }
899 int32_t nEnd = nStart + nCount - 1; 899 int32_t nEnd = nStart + nCount - 1;
900 ASSERT(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength()); 900 ASSERT(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength());
901 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); 901 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
902 FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd; 902 FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd;
903 TextPos2ParagPos(nStart, ParagPosBgn); 903 TextPos2ParagPos(nStart, ParagPosBgn);
904 TextPos2ParagPos(nEnd, ParagPosEnd); 904 TextPos2ParagPos(nEnd, ParagPosEnd);
905 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPosEnd.nParagIndex]; 905 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPosEnd.nParagIndex];
906 FX_BOOL bLastParag = FALSE; 906 bool bLastParag = false;
907 if (ParagPosEnd.nCharIndex == pParag->GetTextLength() - 1) { 907 if (ParagPosEnd.nCharIndex == pParag->GetTextLength() - 1) {
908 if (ParagPosEnd.nParagIndex < m_ParagPtrArray.GetSize() - 1) { 908 if (ParagPosEnd.nParagIndex < m_ParagPtrArray.GetSize() - 1) {
909 ParagPosEnd.nParagIndex++; 909 ParagPosEnd.nParagIndex++;
910 } else { 910 } else {
911 bLastParag = TRUE; 911 bLastParag = true;
912 } 912 }
913 } 913 }
914 int32_t nTotalLineCount = 0; 914 int32_t nTotalLineCount = 0;
915 int32_t nTotalCharCount = 0; 915 int32_t nTotalCharCount = 0;
916 int32_t i = 0; 916 int32_t i = 0;
917 for (i = ParagPosBgn.nParagIndex; i <= ParagPosEnd.nParagIndex; i++) { 917 for (i = ParagPosBgn.nParagIndex; i <= ParagPosEnd.nParagIndex; i++) {
918 CFDE_TxtEdtParag* pTextParag = m_ParagPtrArray[i]; 918 CFDE_TxtEdtParag* pTextParag = m_ParagPtrArray[i];
919 pTextParag->CalcLines(); 919 pTextParag->CalcLines();
920 nTotalLineCount += pTextParag->GetLineCount(); 920 nTotalLineCount += pTextParag->GetLineCount();
921 nTotalCharCount += pTextParag->GetTextLength(); 921 nTotalCharCount += pTextParag->GetTextLength();
(...skipping 20 matching lines...) Expand all
942 UpdatePages(); 942 UpdatePages();
943 int32_t nPageCount = CountPages(); 943 int32_t nPageCount = CountPages();
944 if (m_nCaretPage >= nPageCount) { 944 if (m_nCaretPage >= nPageCount) {
945 m_nCaretPage = nPageCount - 1; 945 m_nCaretPage = nPageCount - 1;
946 } 946 }
947 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); 947 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
948 } 948 }
949 949
950 void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart, 950 void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
951 int32_t nCount, 951 int32_t nCount,
952 FX_BOOL bSel) { 952 bool bSel) {
953 ASSERT(nStart >= 0); 953 ASSERT(nStart >= 0);
954 if (nCount == -1) { 954 if (nCount == -1) {
955 nCount = GetTextLength() - nStart; 955 nCount = GetTextLength() - nStart;
956 } 956 }
957 ASSERT((nStart + nCount) <= m_pTxtBuf->GetTextLength()); 957 ASSERT((nStart + nCount) <= m_pTxtBuf->GetTextLength());
958 958
959 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { 959 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
960 CFX_WideString wsRange; 960 CFX_WideString wsRange;
961 m_pTxtBuf->GetRange(wsRange, nStart, nCount); 961 m_pTxtBuf->GetRange(wsRange, nStart, nCount);
962 m_Param.pEventSink->On_AddDoRecord( 962 m_Param.pEventSink->On_AddDoRecord(
963 this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, 963 this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret,
964 wsRange, bSel)); 964 wsRange, bSel));
965 } 965 }
966 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; 966 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
967 GetText(m_ChangeInfo.wsDelete, nStart, nCount); 967 GetText(m_ChangeInfo.wsDelete, nStart, nCount);
968 Inner_DeleteRange(nStart, nCount); 968 Inner_DeleteRange(nStart, nCount);
969 } 969 }
970 970
971 void CFDE_TxtEdtEngine::ResetEngine() { 971 void CFDE_TxtEdtEngine::ResetEngine() {
972 RemoveAllPages(); 972 RemoveAllPages();
973 RemoveAllParags(); 973 RemoveAllParags();
974 ClearSelection(); 974 ClearSelection();
975 m_nCaret = 0; 975 m_nCaret = 0;
976 m_pTxtBuf->Clear(FALSE); 976 m_pTxtBuf->Clear(false);
977 m_nCaret = 0; 977 m_nCaret = 0;
978 } 978 }
979 979
980 void CFDE_TxtEdtEngine::RebuildParagraphs() { 980 void CFDE_TxtEdtEngine::RebuildParagraphs() {
981 RemoveAllParags(); 981 RemoveAllParags();
982 FX_WCHAR wChar = L' '; 982 FX_WCHAR wChar = L' ';
983 int32_t nParagStart = 0; 983 int32_t nParagStart = 0;
984 int32_t nIndex = 0; 984 int32_t nIndex = 0;
985 std::unique_ptr<IFX_CharIter> pIter(new CFDE_TxtEdtBufIter(m_pTxtBuf.get())); 985 std::unique_ptr<IFX_CharIter> pIter(new CFDE_TxtEdtBufIter(m_pTxtBuf.get()));
986 pIter->SetAt(0); 986 pIter->SetAt(0);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 m_pTextBreak->SetFontSize(m_Param.fFontSize); 1139 m_pTextBreak->SetFontSize(m_Param.fFontSize);
1140 m_pTextBreak->SetTabWidth(m_Param.fTabWidth, m_Param.bTabEquidistant); 1140 m_pTextBreak->SetTabWidth(m_Param.fTabWidth, m_Param.bTabEquidistant);
1141 m_pTextBreak->SetDefaultChar(m_Param.wDefChar); 1141 m_pTextBreak->SetDefaultChar(m_Param.wDefChar);
1142 m_pTextBreak->SetParagraphBreakChar(m_Param.wLineBreakChar); 1142 m_pTextBreak->SetParagraphBreakChar(m_Param.wLineBreakChar);
1143 m_pTextBreak->SetCharRotation(m_Param.nCharRotation); 1143 m_pTextBreak->SetCharRotation(m_Param.nCharRotation);
1144 m_pTextBreak->SetLineBreakTolerance(m_Param.fFontSize * 0.2f); 1144 m_pTextBreak->SetLineBreakTolerance(m_Param.fFontSize * 0.2f);
1145 m_pTextBreak->SetHorizontalScale(m_Param.nHorzScale); 1145 m_pTextBreak->SetHorizontalScale(m_Param.nHorzScale);
1146 m_pTextBreak->SetCharSpace(m_Param.fCharSpace); 1146 m_pTextBreak->SetCharSpace(m_Param.fCharSpace);
1147 } 1147 }
1148 1148
1149 FX_BOOL CFDE_TxtEdtEngine::ReplaceParagEnd(FX_WCHAR*& lpText, 1149 bool CFDE_TxtEdtEngine::ReplaceParagEnd(FX_WCHAR*& lpText,
1150 int32_t& nLength, 1150 int32_t& nLength,
1151 FX_BOOL bPreIsCR) { 1151 bool bPreIsCR) {
1152 for (int32_t i = 0; i < nLength; i++) { 1152 for (int32_t i = 0; i < nLength; i++) {
1153 FX_WCHAR wc = lpText[i]; 1153 FX_WCHAR wc = lpText[i];
1154 switch (wc) { 1154 switch (wc) {
1155 case L'\r': { 1155 case L'\r': {
1156 lpText[i] = m_wLineEnd; 1156 lpText[i] = m_wLineEnd;
1157 bPreIsCR = TRUE; 1157 bPreIsCR = true;
1158 } break; 1158 } break;
1159 case L'\n': { 1159 case L'\n': {
1160 if (bPreIsCR == TRUE) { 1160 if (bPreIsCR == true) {
1161 int32_t nNext = i + 1; 1161 int32_t nNext = i + 1;
1162 if (nNext < nLength) { 1162 if (nNext < nLength) {
1163 FXSYS_memmove(lpText + i, lpText + nNext, 1163 FXSYS_memmove(lpText + i, lpText + nNext,
1164 (nLength - nNext) * sizeof(FX_WCHAR)); 1164 (nLength - nNext) * sizeof(FX_WCHAR));
1165 } 1165 }
1166 i--; 1166 i--;
1167 nLength--; 1167 nLength--;
1168 bPreIsCR = FALSE; 1168 bPreIsCR = false;
1169 if (m_bAutoLineEnd) { 1169 if (m_bAutoLineEnd) {
1170 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CRLF; 1170 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CRLF;
1171 m_bAutoLineEnd = FALSE; 1171 m_bAutoLineEnd = false;
1172 } 1172 }
1173 } else { 1173 } else {
1174 lpText[i] = m_wLineEnd; 1174 lpText[i] = m_wLineEnd;
1175 if (m_bAutoLineEnd) { 1175 if (m_bAutoLineEnd) {
1176 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_LF; 1176 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_LF;
1177 m_bAutoLineEnd = FALSE; 1177 m_bAutoLineEnd = false;
1178 } 1178 }
1179 } 1179 }
1180 } break; 1180 } break;
1181 default: { 1181 default: {
1182 if (bPreIsCR && m_bAutoLineEnd) { 1182 if (bPreIsCR && m_bAutoLineEnd) {
1183 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CR; 1183 m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CR;
1184 m_bAutoLineEnd = FALSE; 1184 m_bAutoLineEnd = false;
1185 } 1185 }
1186 bPreIsCR = FALSE; 1186 bPreIsCR = false;
1187 } break; 1187 } break;
1188 } 1188 }
1189 } 1189 }
1190 return bPreIsCR; 1190 return bPreIsCR;
1191 } 1191 }
1192 1192
1193 void CFDE_TxtEdtEngine::RecoverParagEnd(CFX_WideString& wsText) { 1193 void CFDE_TxtEdtEngine::RecoverParagEnd(CFX_WideString& wsText) {
1194 FX_WCHAR wc = (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CR) ? L'\n' : L'\r'; 1194 FX_WCHAR wc = (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CR) ? L'\n' : L'\r';
1195 if (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CRLF) { 1195 if (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CRLF) {
1196 CFX_ArrayTemplate<int32_t> PosArr; 1196 CFX_ArrayTemplate<int32_t> PosArr;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 if (nBgn == nEnd) 1296 if (nBgn == nEnd)
1297 nMid = nBgn; 1297 nMid = nBgn;
1298 1298
1299 ASSERT(nIndex >= m_ParagPtrArray[nMid]->GetStartIndex() && 1299 ASSERT(nIndex >= m_ParagPtrArray[nMid]->GetStartIndex() &&
1300 (nIndex < m_ParagPtrArray[nMid]->GetStartIndex() + 1300 (nIndex < m_ParagPtrArray[nMid]->GetStartIndex() +
1301 m_ParagPtrArray[nMid]->GetTextLength())); 1301 m_ParagPtrArray[nMid]->GetTextLength()));
1302 ParagPos.nParagIndex = nMid; 1302 ParagPos.nParagIndex = nMid;
1303 ParagPos.nCharIndex = nIndex - m_ParagPtrArray[nMid]->GetStartIndex(); 1303 ParagPos.nCharIndex = nIndex - m_ParagPtrArray[nMid]->GetStartIndex();
1304 } 1304 }
1305 1305
1306 int32_t CFDE_TxtEdtEngine::MoveForward(FX_BOOL& bBefore) { 1306 int32_t CFDE_TxtEdtEngine::MoveForward(bool& bBefore) {
1307 if (m_nCaret == m_pTxtBuf->GetTextLength() - 1) 1307 if (m_nCaret == m_pTxtBuf->GetTextLength() - 1)
1308 return -1; 1308 return -1;
1309 1309
1310 int32_t nCaret = m_nCaret; 1310 int32_t nCaret = m_nCaret;
1311 if ((nCaret + 1 < m_pTxtBuf->GetTextLength()) && 1311 if ((nCaret + 1 < m_pTxtBuf->GetTextLength()) &&
1312 (m_pTxtBuf->GetCharByIndex(nCaret) == L'\r') && 1312 (m_pTxtBuf->GetCharByIndex(nCaret) == L'\r') &&
1313 (m_pTxtBuf->GetCharByIndex(nCaret + 1) == L'\n')) { 1313 (m_pTxtBuf->GetCharByIndex(nCaret + 1) == L'\n')) {
1314 nCaret++; 1314 nCaret++;
1315 } 1315 }
1316 nCaret++; 1316 nCaret++;
1317 bBefore = TRUE; 1317 bBefore = true;
1318 return nCaret; 1318 return nCaret;
1319 } 1319 }
1320 1320
1321 int32_t CFDE_TxtEdtEngine::MoveBackward(FX_BOOL& bBefore) { 1321 int32_t CFDE_TxtEdtEngine::MoveBackward(bool& bBefore) {
1322 if (m_nCaret == 0) 1322 if (m_nCaret == 0)
1323 return FALSE; 1323 return false;
1324 1324
1325 int32_t nCaret = m_nCaret; 1325 int32_t nCaret = m_nCaret;
1326 if (nCaret > 2 && m_pTxtBuf->GetCharByIndex(nCaret - 1) == L'\n' && 1326 if (nCaret > 2 && m_pTxtBuf->GetCharByIndex(nCaret - 1) == L'\n' &&
1327 m_pTxtBuf->GetCharByIndex(nCaret - 2) == L'\r') { 1327 m_pTxtBuf->GetCharByIndex(nCaret - 2) == L'\r') {
1328 nCaret--; 1328 nCaret--;
1329 } 1329 }
1330 nCaret--; 1330 nCaret--;
1331 bBefore = TRUE; 1331 bBefore = true;
1332 return nCaret; 1332 return nCaret;
1333 } 1333 }
1334 1334
1335 FX_BOOL CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) { 1335 bool CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) {
1336 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); 1336 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage);
1337 const CFX_RectF& rtContent = pPage->GetContentsBox(); 1337 const CFX_RectF& rtContent = pPage->GetContentsBox();
1338 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { 1338 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
1339 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 - m_Param.fLineSpace; 1339 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 - m_Param.fLineSpace;
1340 ptCaret.y = m_fCaretPosReserve; 1340 ptCaret.y = m_fCaretPosReserve;
1341 FX_BOOL bLineReserve = 1341 bool bLineReserve =
1342 !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve); 1342 !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve);
1343 if (ptCaret.x < rtContent.left) { 1343 if (ptCaret.x < rtContent.left) {
1344 if (bLineReserve) { 1344 if (bLineReserve) {
1345 if (m_nCaretPage == CountPages() - 1) { 1345 if (m_nCaretPage == CountPages() - 1) {
1346 return FALSE; 1346 return false;
1347 } 1347 }
1348 } else { 1348 } else {
1349 if (m_nCaretPage == 0) { 1349 if (m_nCaretPage == 0) {
1350 return FALSE; 1350 return false;
1351 } 1351 }
1352 } 1352 }
1353 if (bLineReserve) { 1353 if (bLineReserve) {
1354 m_nCaretPage++; 1354 m_nCaretPage++;
1355 } else { 1355 } else {
1356 m_nCaretPage--; 1356 m_nCaretPage--;
1357 } 1357 }
1358 ptCaret.x -= rtContent.left; 1358 ptCaret.x -= rtContent.left;
1359 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); 1359 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
1360 ptCaret.x += pCurPage->GetContentsBox().right(); 1360 ptCaret.x += pCurPage->GetContentsBox().right();
1361 } 1361 }
1362 } else { 1362 } else {
1363 ptCaret.x = m_fCaretPosReserve; 1363 ptCaret.x = m_fCaretPosReserve;
1364 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace; 1364 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace;
1365 if (ptCaret.y < rtContent.top) { 1365 if (ptCaret.y < rtContent.top) {
1366 if (m_nCaretPage == 0) { 1366 if (m_nCaretPage == 0) {
1367 return FALSE; 1367 return false;
1368 } 1368 }
1369 ptCaret.y -= rtContent.top; 1369 ptCaret.y -= rtContent.top;
1370 m_nCaretPage--; 1370 m_nCaretPage--;
1371 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); 1371 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
1372 ptCaret.y += pCurPage->GetContentsBox().bottom(); 1372 ptCaret.y += pCurPage->GetContentsBox().bottom();
1373 } 1373 }
1374 } 1374 }
1375 return TRUE; 1375 return true;
1376 } 1376 }
1377 1377
1378 FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { 1378 bool CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) {
1379 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); 1379 IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage);
1380 const CFX_RectF& rtContent = pPage->GetContentsBox(); 1380 const CFX_RectF& rtContent = pPage->GetContentsBox();
1381 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { 1381 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
1382 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace; 1382 ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace;
1383 ptCaret.y = m_fCaretPosReserve; 1383 ptCaret.y = m_fCaretPosReserve;
1384 if (ptCaret.x >= rtContent.right()) { 1384 if (ptCaret.x >= rtContent.right()) {
1385 FX_BOOL bLineReserve = 1385 bool bLineReserve =
1386 !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve); 1386 !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve);
1387 if (bLineReserve) { 1387 if (bLineReserve) {
1388 if (m_nCaretPage == 0) { 1388 if (m_nCaretPage == 0) {
1389 return FALSE; 1389 return false;
1390 } 1390 }
1391 } else { 1391 } else {
1392 if (m_nCaretPage == CountPages() - 1) { 1392 if (m_nCaretPage == CountPages() - 1) {
1393 return FALSE; 1393 return false;
1394 } 1394 }
1395 } 1395 }
1396 if (bLineReserve) { 1396 if (bLineReserve) {
1397 m_nCaretPage--; 1397 m_nCaretPage--;
1398 } else { 1398 } else {
1399 m_nCaretPage++; 1399 m_nCaretPage++;
1400 } 1400 }
1401 ptCaret.x -= rtContent.right(); 1401 ptCaret.x -= rtContent.right();
1402 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); 1402 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
1403 ptCaret.x += pCurPage->GetContentsBox().left; 1403 ptCaret.x += pCurPage->GetContentsBox().left;
1404 } 1404 }
1405 } else { 1405 } else {
1406 ptCaret.x = m_fCaretPosReserve; 1406 ptCaret.x = m_fCaretPosReserve;
1407 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace; 1407 ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace;
1408 if (ptCaret.y >= rtContent.bottom()) { 1408 if (ptCaret.y >= rtContent.bottom()) {
1409 if (m_nCaretPage == CountPages() - 1) { 1409 if (m_nCaretPage == CountPages() - 1) {
1410 return FALSE; 1410 return false;
1411 } 1411 }
1412 ptCaret.y -= rtContent.bottom(); 1412 ptCaret.y -= rtContent.bottom();
1413 m_nCaretPage++; 1413 m_nCaretPage++;
1414 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); 1414 IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage);
1415 ptCaret.y += pCurPage->GetContentsBox().top; 1415 ptCaret.y += pCurPage->GetContentsBox().top;
1416 } 1416 }
1417 } 1417 }
1418 return TRUE; 1418 return true;
1419 } 1419 }
1420 1420
1421 FX_BOOL CFDE_TxtEdtEngine::MoveLineStart() { 1421 bool CFDE_TxtEdtEngine::MoveLineStart() {
1422 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; 1422 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1;
1423 FDE_TXTEDTPARAGPOS ParagPos; 1423 FDE_TXTEDTPARAGPOS ParagPos;
1424 TextPos2ParagPos(nIndex, ParagPos); 1424 TextPos2ParagPos(nIndex, ParagPos);
1425 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; 1425 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
1426 pParag->LoadParag(); 1426 pParag->LoadParag();
1427 int32_t nLineCount = pParag->GetLineCount(); 1427 int32_t nLineCount = pParag->GetLineCount();
1428 int32_t i = 0; 1428 int32_t i = 0;
1429 int32_t nStart = 0; 1429 int32_t nStart = 0;
1430 int32_t nCount = 0; 1430 int32_t nCount = 0;
1431 for (; i < nLineCount; i++) { 1431 for (; i < nLineCount; i++) {
1432 pParag->GetLineRange(i, nStart, nCount); 1432 pParag->GetLineRange(i, nStart, nCount);
1433 if (nIndex >= nStart && nIndex < nStart + nCount) { 1433 if (nIndex >= nStart && nIndex < nStart + nCount) {
1434 break; 1434 break;
1435 } 1435 }
1436 } 1436 }
1437 UpdateCaretRect(nStart, TRUE); 1437 UpdateCaretRect(nStart, true);
1438 pParag->UnloadParag(); 1438 pParag->UnloadParag();
1439 return TRUE; 1439 return true;
1440 } 1440 }
1441 1441
1442 FX_BOOL CFDE_TxtEdtEngine::MoveLineEnd() { 1442 bool CFDE_TxtEdtEngine::MoveLineEnd() {
1443 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; 1443 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1;
1444 FDE_TXTEDTPARAGPOS ParagPos; 1444 FDE_TXTEDTPARAGPOS ParagPos;
1445 TextPos2ParagPos(nIndex, ParagPos); 1445 TextPos2ParagPos(nIndex, ParagPos);
1446 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; 1446 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
1447 pParag->LoadParag(); 1447 pParag->LoadParag();
1448 int32_t nLineCount = pParag->GetLineCount(); 1448 int32_t nLineCount = pParag->GetLineCount();
1449 int32_t i = 0; 1449 int32_t i = 0;
1450 int32_t nStart = 0; 1450 int32_t nStart = 0;
1451 int32_t nCount = 0; 1451 int32_t nCount = 0;
1452 for (; i < nLineCount; i++) { 1452 for (; i < nLineCount; i++) {
1453 pParag->GetLineRange(i, nStart, nCount); 1453 pParag->GetLineRange(i, nStart, nCount);
1454 if (nIndex >= nStart && nIndex < nStart + nCount) { 1454 if (nIndex >= nStart && nIndex < nStart + nCount) {
1455 break; 1455 break;
1456 } 1456 }
1457 } 1457 }
1458 nIndex = nStart + nCount - 1; 1458 nIndex = nStart + nCount - 1;
1459 ASSERT(nIndex <= GetTextBufLength()); 1459 ASSERT(nIndex <= GetTextBufLength());
1460 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex); 1460 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex);
1461 FX_BOOL bBefore = FALSE; 1461 bool bBefore = false;
1462 if (nIndex <= GetTextBufLength()) { 1462 if (nIndex <= GetTextBufLength()) {
1463 if (wChar == L'\r') { 1463 if (wChar == L'\r') {
1464 bBefore = TRUE; 1464 bBefore = true;
1465 } else if (wChar == L'\n' && nIndex > nStart) { 1465 } else if (wChar == L'\n' && nIndex > nStart) {
1466 bBefore = TRUE; 1466 bBefore = true;
1467 nIndex--; 1467 nIndex--;
1468 wChar = m_pTxtBuf->GetCharByIndex(nIndex); 1468 wChar = m_pTxtBuf->GetCharByIndex(nIndex);
1469 if (wChar != L'\r') { 1469 if (wChar != L'\r') {
1470 nIndex++; 1470 nIndex++;
1471 } 1471 }
1472 } 1472 }
1473 } 1473 }
1474 UpdateCaretRect(nIndex, bBefore); 1474 UpdateCaretRect(nIndex, bBefore);
1475 pParag->UnloadParag(); 1475 pParag->UnloadParag();
1476 return TRUE; 1476 return true;
1477 } 1477 }
1478 1478
1479 FX_BOOL CFDE_TxtEdtEngine::MoveParagStart() { 1479 bool CFDE_TxtEdtEngine::MoveParagStart() {
1480 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; 1480 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1;
1481 FDE_TXTEDTPARAGPOS ParagPos; 1481 FDE_TXTEDTPARAGPOS ParagPos;
1482 TextPos2ParagPos(nIndex, ParagPos); 1482 TextPos2ParagPos(nIndex, ParagPos);
1483 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; 1483 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
1484 UpdateCaretRect(pParag->GetStartIndex(), TRUE); 1484 UpdateCaretRect(pParag->GetStartIndex(), true);
1485 return TRUE; 1485 return true;
1486 } 1486 }
1487 1487
1488 FX_BOOL CFDE_TxtEdtEngine::MoveParagEnd() { 1488 bool CFDE_TxtEdtEngine::MoveParagEnd() {
1489 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; 1489 int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1;
1490 FDE_TXTEDTPARAGPOS ParagPos; 1490 FDE_TXTEDTPARAGPOS ParagPos;
1491 TextPos2ParagPos(nIndex, ParagPos); 1491 TextPos2ParagPos(nIndex, ParagPos);
1492 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; 1492 CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
1493 nIndex = pParag->GetStartIndex() + pParag->GetTextLength() - 1; 1493 nIndex = pParag->GetStartIndex() + pParag->GetTextLength() - 1;
1494 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex); 1494 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex);
1495 if (wChar == L'\n' && nIndex > 0) { 1495 if (wChar == L'\n' && nIndex > 0) {
1496 nIndex--; 1496 nIndex--;
1497 wChar = m_pTxtBuf->GetCharByIndex(nIndex); 1497 wChar = m_pTxtBuf->GetCharByIndex(nIndex);
1498 if (wChar != L'\r') { 1498 if (wChar != L'\r') {
1499 nIndex++; 1499 nIndex++;
1500 } 1500 }
1501 } 1501 }
1502 UpdateCaretRect(nIndex, TRUE); 1502 UpdateCaretRect(nIndex, true);
1503 return TRUE; 1503 return true;
1504 } 1504 }
1505 1505
1506 FX_BOOL CFDE_TxtEdtEngine::MoveHome() { 1506 bool CFDE_TxtEdtEngine::MoveHome() {
1507 UpdateCaretRect(0, TRUE); 1507 UpdateCaretRect(0, true);
1508 return TRUE; 1508 return true;
1509 } 1509 }
1510 1510
1511 FX_BOOL CFDE_TxtEdtEngine::MoveEnd() { 1511 bool CFDE_TxtEdtEngine::MoveEnd() {
1512 UpdateCaretRect(GetTextBufLength(), TRUE); 1512 UpdateCaretRect(GetTextBufLength(), true);
1513 return TRUE; 1513 return true;
1514 } 1514 }
1515 1515
1516 FX_BOOL CFDE_TxtEdtEngine::IsFitArea(CFX_WideString& wsText) { 1516 bool CFDE_TxtEdtEngine::IsFitArea(CFX_WideString& wsText) {
1517 std::unique_ptr<CFDE_TextOut> pTextOut(new CFDE_TextOut); 1517 std::unique_ptr<CFDE_TextOut> pTextOut(new CFDE_TextOut);
1518 pTextOut->SetLineSpace(m_Param.fLineSpace); 1518 pTextOut->SetLineSpace(m_Param.fLineSpace);
1519 pTextOut->SetFont(m_Param.pFont); 1519 pTextOut->SetFont(m_Param.pFont);
1520 pTextOut->SetFontSize(m_Param.fFontSize); 1520 pTextOut->SetFontSize(m_Param.fFontSize);
1521 CFX_RectF rcText; 1521 CFX_RectF rcText;
1522 FXSYS_memset(&rcText, 0, sizeof(rcText)); 1522 FXSYS_memset(&rcText, 0, sizeof(rcText));
1523 uint32_t dwStyle = 0; 1523 uint32_t dwStyle = 0;
1524 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines)) 1524 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines))
1525 dwStyle |= FDE_TTOSTYLE_SingleLine; 1525 dwStyle |= FDE_TTOSTYLE_SingleLine;
1526 1526
1527 if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) { 1527 if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) {
1528 dwStyle |= FDE_TTOSTYLE_LineWrap; 1528 dwStyle |= FDE_TTOSTYLE_LineWrap;
1529 rcText.width = m_Param.fPlateWidth; 1529 rcText.width = m_Param.fPlateWidth;
1530 } else { 1530 } else {
1531 rcText.width = 65535; 1531 rcText.width = 65535;
1532 } 1532 }
1533 pTextOut->SetStyles(dwStyle); 1533 pTextOut->SetStyles(dwStyle);
1534 wsText += L"\n"; 1534 wsText += L"\n";
1535 pTextOut->CalcLogicSize(wsText.c_str(), wsText.GetLength(), rcText); 1535 pTextOut->CalcLogicSize(wsText.c_str(), wsText.GetLength(), rcText);
1536 wsText.Delete(wsText.GetLength() - 1); 1536 wsText.Delete(wsText.GetLength() - 1);
1537 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz) && 1537 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz) &&
1538 (rcText.width > m_Param.fPlateWidth)) { 1538 (rcText.width > m_Param.fPlateWidth)) {
1539 return FALSE; 1539 return false;
1540 } 1540 }
1541 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) && 1541 if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) &&
1542 (rcText.height > m_Param.fLineSpace * m_Param.nLineCount)) { 1542 (rcText.height > m_Param.fLineSpace * m_Param.nLineCount)) {
1543 return FALSE; 1543 return false;
1544 } 1544 }
1545 return TRUE; 1545 return true;
1546 } 1546 }
1547 1547
1548 void CFDE_TxtEdtEngine::UpdateCaretRect(int32_t nIndex, FX_BOOL bBefore) { 1548 void CFDE_TxtEdtEngine::UpdateCaretRect(int32_t nIndex, bool bBefore) {
1549 MovePage2Char(nIndex); 1549 MovePage2Char(nIndex);
1550 GetCaretRect(m_rtCaret, m_nCaretPage, nIndex, bBefore); 1550 GetCaretRect(m_rtCaret, m_nCaretPage, nIndex, bBefore);
1551 m_nCaret = nIndex; 1551 m_nCaret = nIndex;
1552 m_bBefore = bBefore; 1552 m_bBefore = bBefore;
1553 if (!m_bBefore) { 1553 if (!m_bBefore) {
1554 m_nCaret++; 1554 m_nCaret++;
1555 m_bBefore = TRUE; 1555 m_bBefore = true;
1556 } 1556 }
1557 m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) 1557 m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
1558 ? m_rtCaret.top 1558 ? m_rtCaret.top
1559 : m_rtCaret.left; 1559 : m_rtCaret.left;
1560 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0); 1560 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
1561 } 1561 }
1562 1562
1563 void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret, 1563 void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
1564 int32_t nPageIndex, 1564 int32_t nPageIndex,
1565 int32_t nCaret, 1565 int32_t nCaret,
1566 FX_BOOL bBefore) { 1566 bool bBefore) {
1567 IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage]; 1567 IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
1568 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); 1568 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
1569 FX_BOOL bCombText = !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText); 1569 bool bCombText = !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText);
1570 int32_t nIndexInpage = nCaret - pPage->GetCharStart(); 1570 int32_t nIndexInpage = nCaret - pPage->GetCharStart();
1571 if (bBefore && bCombText && nIndexInpage > 0) { 1571 if (bBefore && bCombText && nIndexInpage > 0) {
1572 nIndexInpage--; 1572 nIndexInpage--;
1573 bBefore = FALSE; 1573 bBefore = false;
1574 } 1574 }
1575 int32_t nBIDILevel = pPage->GetCharRect(nIndexInpage, rtCaret, bCombText); 1575 int32_t nBIDILevel = pPage->GetCharRect(nIndexInpage, rtCaret, bCombText);
1576 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { 1576 if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) {
1577 if ((!FX_IsOdd(nBIDILevel) && !bBefore) || 1577 if ((!FX_IsOdd(nBIDILevel) && !bBefore) ||
1578 (FX_IsOdd(nBIDILevel) && bBefore)) { 1578 (FX_IsOdd(nBIDILevel) && bBefore)) {
1579 rtCaret.Offset(0, rtCaret.height - 1.0f); 1579 rtCaret.Offset(0, rtCaret.height - 1.0f);
1580 } 1580 }
1581 if (rtCaret.height == 0 && rtCaret.top > 1.0f) 1581 if (rtCaret.height == 0 && rtCaret.top > 1.0f)
1582 rtCaret.top -= 1.0f; 1582 rtCaret.top -= 1.0f;
1583 1583
(...skipping 11 matching lines...) Expand all
1595 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); 1595 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
1596 } 1596 }
1597 1597
1598 void CFDE_TxtEdtEngine::UpdateCaretIndex(const CFX_PointF& ptCaret) { 1598 void CFDE_TxtEdtEngine::UpdateCaretIndex(const CFX_PointF& ptCaret) {
1599 IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage]; 1599 IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
1600 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); 1600 m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
1601 m_nCaret = pPage->GetCharIndex(ptCaret, m_bBefore); 1601 m_nCaret = pPage->GetCharIndex(ptCaret, m_bBefore);
1602 GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore); 1602 GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore);
1603 if (!m_bBefore) { 1603 if (!m_bBefore) {
1604 m_nCaret++; 1604 m_nCaret++;
1605 m_bBefore = TRUE; 1605 m_bBefore = true;
1606 } 1606 }
1607 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage); 1607 m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage);
1608 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); 1608 m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
1609 } 1609 }
1610 1610
1611 FX_BOOL CFDE_TxtEdtEngine::IsSelect() { 1611 bool CFDE_TxtEdtEngine::IsSelect() {
1612 return m_SelRangePtrArr.GetSize() > 0; 1612 return m_SelRangePtrArr.GetSize() > 0;
1613 } 1613 }
1614 1614
1615 void CFDE_TxtEdtEngine::DeleteSelect() { 1615 void CFDE_TxtEdtEngine::DeleteSelect() {
1616 int32_t nCountRange = CountSelRanges(); 1616 int32_t nCountRange = CountSelRanges();
1617 if (nCountRange > 0) { 1617 if (nCountRange > 0) {
1618 int32_t nSelStart = 0; 1618 int32_t nSelStart = 0;
1619 while (nCountRange > 0) { 1619 while (nCountRange > 0) {
1620 int32_t nSelCount = GetSelRange(--nCountRange, nSelStart); 1620 int32_t nSelCount = GetSelRange(--nCountRange, nSelStart);
1621 delete m_SelRangePtrArr[nCountRange]; 1621 delete m_SelRangePtrArr[nCountRange];
1622 m_SelRangePtrArr.RemoveAt(nCountRange); 1622 m_SelRangePtrArr.RemoveAt(nCountRange);
1623 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); 1623 DeleteRange_DoRecord(nSelStart, nSelCount, true);
1624 } 1624 }
1625 ClearSelection(); 1625 ClearSelection();
1626 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 1626 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
1627 m_Param.pEventSink->On_SelChanged(this); 1627 m_Param.pEventSink->On_SelChanged(this);
1628 SetCaretPos(nSelStart, TRUE); 1628 SetCaretPos(nSelStart, true);
1629 return; 1629 return;
1630 } 1630 }
1631 } 1631 }
OLDNEW
« no previous file with comments | « xfa/fde/cfde_txtedtengine.h ('k') | xfa/fde/cfde_txtedtpage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698