summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/fxedit/fxet_edit.cpp414
-rw-r--r--fpdfsdk/fxedit/fxet_edit.h39
2 files changed, 179 insertions, 274 deletions
diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
index aa77e9fa5b..690f042afb 100644
--- a/fpdfsdk/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/fxedit/fxet_edit.cpp
@@ -29,6 +29,7 @@
#include "fpdfsdk/pdfwindow/PWL_Edit.h"
#include "fpdfsdk/pdfwindow/PWL_EditCtrl.h"
#include "third_party/base/ptr_util.h"
+#include "third_party/base/stl_util.h"
namespace {
@@ -274,8 +275,8 @@ CFX_Edit_Refresh::CFX_Edit_Refresh() {}
CFX_Edit_Refresh::~CFX_Edit_Refresh() {}
void CFX_Edit_Refresh::BeginRefresh() {
- m_RefreshRects.Empty();
- m_OldLineRects = m_NewLineRects;
+ m_RefreshRects.Clear();
+ m_OldLineRects = std::move(m_NewLineRects);
}
void CFX_Edit_Refresh::Push(const CPVT_WordRange& linerange,
@@ -306,7 +307,7 @@ const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const {
}
void CFX_Edit_Refresh::EndRefresh() {
- m_RefreshRects.Empty();
+ m_RefreshRects.Clear();
}
CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize)
@@ -326,55 +327,43 @@ bool CFX_Edit_Undo::CanUndo() const {
void CFX_Edit_Undo::Undo() {
m_bWorking = true;
-
if (m_nCurUndoPos > 0) {
- IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos - 1);
- pItem->Undo();
-
+ m_UndoItemStack[m_nCurUndoPos - 1]->Undo();
m_nCurUndoPos--;
m_bModified = (m_nCurUndoPos != 0);
}
-
m_bWorking = false;
}
bool CFX_Edit_Undo::CanRedo() const {
- return m_nCurUndoPos < m_UndoItemStack.GetSize();
+ return m_nCurUndoPos < m_UndoItemStack.size();
}
void CFX_Edit_Undo::Redo() {
m_bWorking = true;
-
- int32_t nStackSize = m_UndoItemStack.GetSize();
-
- if (m_nCurUndoPos < nStackSize) {
- IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos);
- pItem->Redo();
-
+ if (m_nCurUndoPos < m_UndoItemStack.size()) {
+ m_UndoItemStack[m_nCurUndoPos]->Redo();
m_nCurUndoPos++;
- m_bModified = (m_nCurUndoPos != 0);
+ m_bModified = true;
}
-
m_bWorking = false;
}
-void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem) {
+void CFX_Edit_Undo::AddItem(std::unique_ptr<IFX_Edit_UndoItem> pItem) {
ASSERT(!m_bWorking);
ASSERT(pItem);
ASSERT(m_nBufSize > 1);
-
- if (m_nCurUndoPos < m_UndoItemStack.GetSize())
+ if (m_nCurUndoPos < m_UndoItemStack.size())
RemoveTails();
- if (m_UndoItemStack.GetSize() >= m_nBufSize) {
+ if (m_UndoItemStack.size() >= m_nBufSize) {
RemoveHeads();
m_bVirgin = false;
}
- m_UndoItemStack.Add(pItem);
- m_nCurUndoPos = m_UndoItemStack.GetSize();
-
- m_bModified = (m_nCurUndoPos != 0);
+ m_UndoItemStack.push_back(std::move(pItem));
+ m_nCurUndoPos = m_UndoItemStack.size();
+ m_bModified = true;
}
bool CFX_Edit_Undo::IsModified() const {
@@ -382,33 +371,26 @@ bool CFX_Edit_Undo::IsModified() const {
}
void CFX_Edit_Undo::RemoveHeads() {
- ASSERT(m_UndoItemStack.GetSize() > 1);
-
- delete m_UndoItemStack.GetAt(0);
- m_UndoItemStack.RemoveAt(0);
+ ASSERT(m_UndoItemStack.size() > 1);
+ m_UndoItemStack.pop_front();
}
void CFX_Edit_Undo::RemoveTails() {
- for (int32_t i = m_UndoItemStack.GetSize() - 1; i >= m_nCurUndoPos; i--) {
- delete m_UndoItemStack.GetAt(i);
- m_UndoItemStack.RemoveAt(i);
- }
+ while (m_UndoItemStack.size() > m_nCurUndoPos)
+ m_UndoItemStack.pop_back();
}
void CFX_Edit_Undo::Reset() {
- for (int32_t i = 0, sz = m_UndoItemStack.GetSize(); i < sz; i++) {
- delete m_UndoItemStack.GetAt(i);
- }
+ m_UndoItemStack.clear();
m_nCurUndoPos = 0;
- m_UndoItemStack.RemoveAll();
}
CFX_Edit_UndoItem::CFX_Edit_UndoItem() : m_bFirst(true), m_bLast(true) {}
CFX_Edit_UndoItem::~CFX_Edit_UndoItem() {}
-CFX_WideString CFX_Edit_UndoItem::GetUndoTitle() {
- return L"";
+CFX_WideString CFX_Edit_UndoItem::GetUndoTitle() const {
+ return CFX_WideString();
}
void CFX_Edit_UndoItem::SetFirst(bool bFirst) {
@@ -426,49 +408,36 @@ bool CFX_Edit_UndoItem::IsLast() {
CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle)
: m_sTitle(sTitle) {}
-CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() {
- for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
- delete m_Items[i];
- }
-
- m_Items.RemoveAll();
-}
+CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() {}
-void CFX_Edit_GroupUndoItem::AddUndoItem(CFX_Edit_UndoItem* pUndoItem) {
+void CFX_Edit_GroupUndoItem::AddUndoItem(
+ std::unique_ptr<CFX_Edit_UndoItem> pUndoItem) {
pUndoItem->SetFirst(false);
pUndoItem->SetLast(false);
-
- m_Items.Add(pUndoItem);
-
if (m_sTitle.IsEmpty())
m_sTitle = pUndoItem->GetUndoTitle();
+
+ m_Items.push_back(std::move(pUndoItem));
}
void CFX_Edit_GroupUndoItem::UpdateItems() {
- if (m_Items.GetSize() > 0) {
- CFX_Edit_UndoItem* pFirstItem = m_Items[0];
- pFirstItem->SetFirst(true);
-
- CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1];
- pLastItem->SetLast(true);
+ if (!m_Items.empty()) {
+ m_Items.front()->SetFirst(true);
+ m_Items.back()->SetLast(true);
}
}
void CFX_Edit_GroupUndoItem::Undo() {
- for (int i = m_Items.GetSize() - 1; i >= 0; i--) {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- pUndoItem->Undo();
- }
+ for (auto iter = m_Items.rbegin(); iter != m_Items.rend(); ++iter)
+ (*iter)->Undo();
}
void CFX_Edit_GroupUndoItem::Redo() {
- for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- pUndoItem->Redo();
- }
+ for (auto iter = m_Items.begin(); iter != m_Items.end(); ++iter)
+ (*iter)->Redo();
}
-CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() {
+CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() const {
return m_sTitle;
}
@@ -2020,167 +1989,139 @@ bool CFX_Edit::InsertWord(uint16_t word,
const CPVT_WordProps* pWordProps,
bool bAddUndo,
bool bPaint) {
- if (IsTextOverflow())
+ if (IsTextOverflow() || !m_pVT->IsValid())
return false;
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
-
- SetCaret(m_pVT->InsertWord(
- m_wpCaret, word, GetCharSetFromUnicode(word, charset), pWordProps));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_InsertWord(this, m_wpOldCaret, m_wpCaret,
- word, charset, pWordProps));
- }
-
- if (bPaint)
- PaintInsertText(m_wpOldCaret, m_wpCaret);
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(m_pVT->InsertWord(m_wpCaret, word,
+ GetCharSetFromUnicode(word, charset), pWordProps));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
+ if (m_wpCaret == m_wpOldCaret)
+ return false;
- return true;
- }
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_InsertWord>(
+ this, m_wpOldCaret, m_wpCaret, word, charset, pWordProps));
}
+ if (bPaint)
+ PaintInsertText(m_wpOldCaret, m_wpCaret);
- return false;
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
+
+ return true;
}
bool CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps,
const CPVT_WordProps* pWordProps,
bool bAddUndo,
bool bPaint) {
- if (IsTextOverflow())
+ if (IsTextOverflow() || !m_pVT->IsValid())
return false;
- if (m_pVT->IsValid()) {
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->InsertSection(m_wpCaret, pSecProps, pWordProps));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(new CFXEU_InsertReturn(this, m_wpOldCaret, m_wpCaret,
- pSecProps, pWordProps));
- }
-
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
- ScrollToCaret();
- Refresh();
- SetCaretOrigin();
- SetCaretInfo();
- }
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(m_pVT->InsertSection(m_wpCaret, pSecProps, pWordProps));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
+ if (m_wpCaret == m_wpOldCaret)
+ return false;
- return true;
- }
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_InsertReturn>(
+ this, m_wpOldCaret, m_wpCaret, pSecProps, pWordProps));
}
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
+ ScrollToCaret();
+ Refresh();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
- return false;
+ return true;
}
bool CFX_Edit::Backspace(bool bAddUndo, bool bPaint) {
- if (m_pVT->IsValid()) {
- if (m_wpCaret == m_pVT->GetBeginWordPlace())
- return false;
-
- CPVT_Section section;
- CPVT_Word word;
-
- if (bAddUndo) {
- CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
- pIterator->SetAt(m_wpCaret);
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
-
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret) {
- if (bAddUndo && m_bEnableUndo) {
- if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
- AddEditUndoItem(new CFXEU_Backspace(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, section.WordProps));
- else
- AddEditUndoItem(new CFXEU_Backspace(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, word.WordProps));
- }
-
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpCaret, m_wpOldCaret));
- ScrollToCaret();
- Refresh();
- SetCaretOrigin();
- SetCaretInfo();
- }
+ if (!m_pVT->IsValid() || m_wpCaret == m_pVT->GetBeginWordPlace())
+ return false;
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
+ CPVT_Section section;
+ CPVT_Word word;
+ if (bAddUndo) {
+ CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+ pIterator->SetAt(m_wpCaret);
+ pIterator->GetSection(section);
+ pIterator->GetWord(word);
+ }
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
+ if (m_wpCaret == m_wpOldCaret)
+ return false;
- return true;
+ if (bAddUndo && m_bEnableUndo) {
+ if (m_wpCaret.SecCmp(m_wpOldCaret) != 0) {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_Backspace>(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, section.WordProps));
+ } else {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_Backspace>(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, word.WordProps));
}
}
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpCaret, m_wpOldCaret));
+ ScrollToCaret();
+ Refresh();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
- return false;
+ return true;
}
bool CFX_Edit::Delete(bool bAddUndo, bool bPaint) {
- if (m_pVT->IsValid()) {
- if (m_wpCaret == m_pVT->GetEndWordPlace())
- return false;
-
- CPVT_Section section;
- CPVT_Word word;
-
- if (bAddUndo) {
- CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
- pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
-
- m_pVT->UpdateWordPlace(m_wpCaret);
- bool bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
-
- SetCaret(m_pVT->DeleteWord(m_wpCaret));
- m_SelState.Set(m_wpCaret, m_wpCaret);
-
- if (bAddUndo && m_bEnableUndo) {
- if (bSecEnd)
- AddEditUndoItem(new CFXEU_Delete(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, section.WordProps, bSecEnd));
- else
- AddEditUndoItem(new CFXEU_Delete(
- this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
- section.SecProps, word.WordProps, bSecEnd));
- }
+ if (!m_pVT->IsValid() || m_wpCaret == m_pVT->GetEndWordPlace())
+ return false;
- if (bPaint) {
- RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
- ScrollToCaret();
- Refresh();
- SetCaretOrigin();
- SetCaretInfo();
+ CPVT_Section section;
+ CPVT_Word word;
+ if (bAddUndo) {
+ CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+ pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
+ pIterator->GetSection(section);
+ pIterator->GetWord(word);
+ }
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ bool bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
+ SetCaret(m_pVT->DeleteWord(m_wpCaret));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
+ if (bAddUndo && m_bEnableUndo) {
+ if (bSecEnd) {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_Delete>(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, section.WordProps, bSecEnd));
+ } else {
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_Delete>(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, word.WordProps, bSecEnd));
}
-
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
-
- return true;
}
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
+ ScrollToCaret();
+ Refresh();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
- return false;
+ return true;
}
bool CFX_Edit::Empty() {
@@ -2195,21 +2136,16 @@ bool CFX_Edit::Empty() {
}
bool CFX_Edit::Clear(bool bAddUndo, bool bPaint) {
- if (!m_pVT->IsValid())
- return false;
-
- if (!m_SelState.IsExist())
+ if (!m_pVT->IsValid() || !m_SelState.IsExist())
return false;
CPVT_WordRange range = m_SelState.ConvertToWordRange();
-
if (bAddUndo && m_bEnableUndo)
- AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_Clear>(this, range, GetSelText()));
SelectNone();
SetCaret(m_pVT->DeleteWords(range));
m_SelState.Set(m_wpCaret, m_wpCaret);
-
if (bPaint) {
RearrangePart(range);
ScrollToCaret();
@@ -2217,7 +2153,6 @@ bool CFX_Edit::Clear(bool bAddUndo, bool bPaint) {
SetCaretOrigin();
SetCaretInfo();
}
-
if (m_bOprNotify && m_pOprNotify)
m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
@@ -2238,10 +2173,9 @@ bool CFX_Edit::InsertText(const CFX_WideString& sText,
return false;
if (bAddUndo && m_bEnableUndo) {
- AddEditUndoItem(
- new CFXEU_InsertText(this, m_wpOldCaret, m_wpCaret, sText, charset));
+ AddEditUndoItem(pdfium::MakeUnique<CFXEU_InsertText>(
+ this, m_wpOldCaret, m_wpCaret, sText, charset));
}
-
if (bPaint)
PaintInsertText(m_wpOldCaret, m_wpCaret);
@@ -2407,53 +2341,36 @@ int32_t CFX_Edit::GetCharSetFromUnicode(uint16_t word, int32_t nOldCharset) {
return nOldCharset;
}
-void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem) {
- if (m_pGroupUndoItem) {
- m_pGroupUndoItem->AddUndoItem(pEditUndoItem);
- } else {
- m_Undo.AddItem(pEditUndoItem);
- }
+void CFX_Edit::AddEditUndoItem(
+ std::unique_ptr<CFX_Edit_UndoItem> pEditUndoItem) {
+ if (m_pGroupUndoItem)
+ m_pGroupUndoItem->AddUndoItem(std::move(pEditUndoItem));
+ else
+ m_Undo.AddItem(std::move(pEditUndoItem));
}
CFX_Edit_LineRectArray::CFX_Edit_LineRectArray() {}
-CFX_Edit_LineRectArray::~CFX_Edit_LineRectArray() {
- Empty();
-}
-
-void CFX_Edit_LineRectArray::Empty() {
- for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++)
- delete m_LineRects.GetAt(i);
+CFX_Edit_LineRectArray::~CFX_Edit_LineRectArray() {}
- m_LineRects.RemoveAll();
-}
-
-void CFX_Edit_LineRectArray::RemoveAll() {
- m_LineRects.RemoveAll();
-}
-
-void CFX_Edit_LineRectArray::operator=(CFX_Edit_LineRectArray& rects) {
- Empty();
- for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++)
- m_LineRects.Add(rects.GetAt(i));
-
- rects.RemoveAll();
+void CFX_Edit_LineRectArray::operator=(CFX_Edit_LineRectArray&& that) {
+ m_LineRects = std::move(that.m_LineRects);
}
void CFX_Edit_LineRectArray::Add(const CPVT_WordRange& wrLine,
const CFX_FloatRect& rcLine) {
- m_LineRects.Add(new CFX_Edit_LineRect(wrLine, rcLine));
+ m_LineRects.push_back(pdfium::MakeUnique<CFX_Edit_LineRect>(wrLine, rcLine));
}
int32_t CFX_Edit_LineRectArray::GetSize() const {
- return m_LineRects.GetSize();
+ return pdfium::CollectionSize<int32_t>(m_LineRects);
}
CFX_Edit_LineRect* CFX_Edit_LineRectArray::GetAt(int32_t nIndex) const {
- if (nIndex < 0 || nIndex >= m_LineRects.GetSize())
+ if (nIndex < 0 || nIndex >= GetSize())
return nullptr;
- return m_LineRects.GetAt(nIndex);
+ return m_LineRects[nIndex].get();
}
CFX_Edit_Select::CFX_Edit_Select() {}
@@ -2496,35 +2413,28 @@ bool CFX_Edit_Select::IsExist() const {
CFX_Edit_RectArray::CFX_Edit_RectArray() {}
-CFX_Edit_RectArray::~CFX_Edit_RectArray() {
- Empty();
-}
+CFX_Edit_RectArray::~CFX_Edit_RectArray() {}
-void CFX_Edit_RectArray::Empty() {
- for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++)
- delete m_Rects.GetAt(i);
-
- m_Rects.RemoveAll();
+void CFX_Edit_RectArray::Clear() {
+ m_Rects.clear();
}
void CFX_Edit_RectArray::Add(const CFX_FloatRect& rect) {
// check for overlapped area
- for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) {
- CFX_FloatRect* pRect = m_Rects.GetAt(i);
+ for (const auto& pRect : m_Rects) {
if (pRect && pRect->Contains(rect))
return;
}
-
- m_Rects.Add(new CFX_FloatRect(rect));
+ m_Rects.push_back(pdfium::MakeUnique<CFX_FloatRect>(rect));
}
int32_t CFX_Edit_RectArray::GetSize() const {
- return m_Rects.GetSize();
+ return pdfium::CollectionSize<int32_t>(m_Rects);
}
CFX_FloatRect* CFX_Edit_RectArray::GetAt(int32_t nIndex) const {
- if (nIndex < 0 || nIndex >= m_Rects.GetSize())
+ if (nIndex < 0 || nIndex >= GetSize())
return nullptr;
- return m_Rects.GetAt(nIndex);
+ return m_Rects[nIndex].get();
}
diff --git a/fpdfsdk/fxedit/fxet_edit.h b/fpdfsdk/fxedit/fxet_edit.h
index 2ab27d3a84..555c58b0a3 100644
--- a/fpdfsdk/fxedit/fxet_edit.h
+++ b/fpdfsdk/fxedit/fxet_edit.h
@@ -7,6 +7,7 @@
#ifndef FPDFSDK_FXEDIT_FXET_EDIT_H_
#define FPDFSDK_FXEDIT_FXET_EDIT_H_
+#include <deque>
#include <memory>
#include <vector>
@@ -40,16 +41,14 @@ class CFX_Edit_LineRectArray {
CFX_Edit_LineRectArray();
virtual ~CFX_Edit_LineRectArray();
- void Empty();
- void RemoveAll();
- void operator=(CFX_Edit_LineRectArray& rects);
+ void operator=(CFX_Edit_LineRectArray&& rects);
void Add(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine);
int32_t GetSize() const;
CFX_Edit_LineRect* GetAt(int32_t nIndex) const;
private:
- CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects;
+ std::vector<std::unique_ptr<CFX_Edit_LineRect>> m_LineRects;
};
class CFX_Edit_RectArray {
@@ -57,14 +56,14 @@ class CFX_Edit_RectArray {
CFX_Edit_RectArray();
virtual ~CFX_Edit_RectArray();
- void Empty();
+ void Clear();
void Add(const CFX_FloatRect& rect);
int32_t GetSize() const;
CFX_FloatRect* GetAt(int32_t nIndex) const;
private:
- CFX_ArrayTemplate<CFX_FloatRect*> m_Rects;
+ std::vector<std::unique_ptr<CFX_FloatRect>> m_Rects;
};
class CFX_Edit_Refresh {
@@ -99,7 +98,8 @@ class CFX_Edit_Select {
CPVT_WordRange ConvertToWordRange() const;
bool IsExist() const;
- CPVT_WordPlace BeginPos, EndPos;
+ CPVT_WordPlace BeginPos;
+ CPVT_WordPlace EndPos;
};
class CFX_Edit_Undo {
@@ -107,26 +107,21 @@ class CFX_Edit_Undo {
explicit CFX_Edit_Undo(int32_t nBufsize);
virtual ~CFX_Edit_Undo();
+ void AddItem(std::unique_ptr<IFX_Edit_UndoItem> pItem);
void Undo();
void Redo();
-
- void AddItem(IFX_Edit_UndoItem* pItem);
-
bool CanUndo() const;
bool CanRedo() const;
bool IsModified() const;
-
void Reset();
private:
void RemoveHeads();
void RemoveTails();
- private:
- CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack;
-
- int32_t m_nCurUndoPos;
- int32_t m_nBufSize;
+ std::deque<std::unique_ptr<IFX_Edit_UndoItem>> m_UndoItemStack;
+ size_t m_nCurUndoPos;
+ size_t m_nBufSize;
bool m_bModified;
bool m_bVirgin;
bool m_bWorking;
@@ -138,7 +133,7 @@ class IFX_Edit_UndoItem {
virtual void Undo() = 0;
virtual void Redo() = 0;
- virtual CFX_WideString GetUndoTitle() = 0;
+ virtual CFX_WideString GetUndoTitle() const = 0;
};
class CFX_Edit_UndoItem : public IFX_Edit_UndoItem {
@@ -146,7 +141,7 @@ class CFX_Edit_UndoItem : public IFX_Edit_UndoItem {
CFX_Edit_UndoItem();
~CFX_Edit_UndoItem() override;
- CFX_WideString GetUndoTitle() override;
+ CFX_WideString GetUndoTitle() const override;
void SetFirst(bool bFirst);
void SetLast(bool bLast);
@@ -165,14 +160,14 @@ class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem {
// IFX_Edit_UndoItem
void Undo() override;
void Redo() override;
- CFX_WideString GetUndoTitle() override;
+ CFX_WideString GetUndoTitle() const override;
- void AddUndoItem(CFX_Edit_UndoItem* pUndoItem);
+ void AddUndoItem(std::unique_ptr<CFX_Edit_UndoItem> pUndoItem);
void UpdateItems();
private:
CFX_WideString m_sTitle;
- CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items;
+ std::vector<std::unique_ptr<CFX_Edit_UndoItem>> m_Items;
};
class CFXEU_InsertWord : public CFX_Edit_UndoItem {
@@ -488,7 +483,7 @@ class CFX_Edit {
void SetCaretInfo();
void SetCaretOrigin();
- void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem);
+ void AddEditUndoItem(std::unique_ptr<CFX_Edit_UndoItem> pEditUndoItem);
private:
std::unique_ptr<CPDF_VariableText> m_pVT;