| 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 "fpdfsdk/fxedit/include/fxet_edit.h" | 7 #include "fpdfsdk/fxedit/include/fxet_edit.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 m_RefreshRects.Add(pOldRect->m_rcLine); | 342 m_RefreshRects.Add(pOldRect->m_rcLine); |
| 343 } | 343 } |
| 344 | 344 |
| 345 { | 345 { |
| 346 for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++) | 346 for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++) |
| 347 if (CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i)) | 347 if (CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i)) |
| 348 m_RefreshRects.Add(pNewRect->m_rcLine); | 348 m_RefreshRects.Add(pNewRect->m_rcLine); |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 | 351 |
| 352 void CFX_Edit_Refresh::Analyse(int32_t nAlignment) { | |
| 353 FX_BOOL bLineTopChanged = FALSE; | |
| 354 CFX_FloatRect rcResult; | |
| 355 FX_FLOAT fWidthDiff; | |
| 356 | |
| 357 int32_t szMax = std::max(m_OldLineRects.GetSize(), m_NewLineRects.GetSize()); | |
| 358 int32_t i = 0; | |
| 359 | |
| 360 while (i < szMax) { | |
| 361 CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i); | |
| 362 CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i); | |
| 363 | |
| 364 if (pOldRect) { | |
| 365 if (pNewRect) { | |
| 366 if (bLineTopChanged) { | |
| 367 rcResult = pOldRect->m_rcLine; | |
| 368 rcResult.Union(pNewRect->m_rcLine); | |
| 369 m_RefreshRects.Add(rcResult); | |
| 370 } else { | |
| 371 if (*pNewRect != *pOldRect) { | |
| 372 if (!pNewRect->IsSameTop(*pOldRect) || | |
| 373 !pNewRect->IsSameHeight(*pOldRect)) { | |
| 374 bLineTopChanged = TRUE; | |
| 375 continue; | |
| 376 } | |
| 377 | |
| 378 if (nAlignment == 0) { | |
| 379 if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos) { | |
| 380 rcResult = pOldRect->m_rcLine; | |
| 381 rcResult.Union(pNewRect->m_rcLine); | |
| 382 m_RefreshRects.Add(rcResult); | |
| 383 } else { | |
| 384 if (!pNewRect->IsSameLeft(*pOldRect)) { | |
| 385 rcResult = pOldRect->m_rcLine; | |
| 386 rcResult.Union(pNewRect->m_rcLine); | |
| 387 } else { | |
| 388 fWidthDiff = | |
| 389 pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width(); | |
| 390 rcResult = pNewRect->m_rcLine; | |
| 391 if (fWidthDiff > 0.0f) { | |
| 392 rcResult.left = rcResult.right - fWidthDiff; | |
| 393 } else { | |
| 394 rcResult.left = rcResult.right; | |
| 395 rcResult.right -= fWidthDiff; | |
| 396 } | |
| 397 } | |
| 398 m_RefreshRects.Add(rcResult); | |
| 399 } | |
| 400 } else { | |
| 401 rcResult = pOldRect->m_rcLine; | |
| 402 rcResult.Union(pNewRect->m_rcLine); | |
| 403 m_RefreshRects.Add(rcResult); | |
| 404 } | |
| 405 } | |
| 406 } | |
| 407 } else { | |
| 408 m_RefreshRects.Add(pOldRect->m_rcLine); | |
| 409 } | |
| 410 } else { | |
| 411 if (pNewRect) { | |
| 412 m_RefreshRects.Add(pNewRect->m_rcLine); | |
| 413 } | |
| 414 } | |
| 415 i++; | |
| 416 } | |
| 417 } | |
| 418 | |
| 419 void CFX_Edit_Refresh::AddRefresh(const CFX_FloatRect& rect) { | 352 void CFX_Edit_Refresh::AddRefresh(const CFX_FloatRect& rect) { |
| 420 m_RefreshRects.Add(rect); | 353 m_RefreshRects.Add(rect); |
| 421 } | 354 } |
| 422 | 355 |
| 423 const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const { | 356 const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const { |
| 424 return &m_RefreshRects; | 357 return &m_RefreshRects; |
| 425 } | 358 } |
| 426 | 359 |
| 427 void CFX_Edit_Refresh::EndRefresh() { | 360 void CFX_Edit_Refresh::EndRefresh() { |
| 428 m_RefreshRects.Empty(); | 361 m_RefreshRects.Empty(); |
| (...skipping 2790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3219 int32_t CFX_Edit_RectArray::GetSize() const { | 3152 int32_t CFX_Edit_RectArray::GetSize() const { |
| 3220 return m_Rects.GetSize(); | 3153 return m_Rects.GetSize(); |
| 3221 } | 3154 } |
| 3222 | 3155 |
| 3223 CFX_FloatRect* CFX_Edit_RectArray::GetAt(int32_t nIndex) const { | 3156 CFX_FloatRect* CFX_Edit_RectArray::GetAt(int32_t nIndex) const { |
| 3224 if (nIndex < 0 || nIndex >= m_Rects.GetSize()) | 3157 if (nIndex < 0 || nIndex >= m_Rects.GetSize()) |
| 3225 return nullptr; | 3158 return nullptr; |
| 3226 | 3159 |
| 3227 return m_Rects.GetAt(nIndex); | 3160 return m_Rects.GetAt(nIndex); |
| 3228 } | 3161 } |
| OLD | NEW |