Clean up CXFA_FFTabOrderPageWidgetIterator. - Use shorter, non-Hungarian variable names in CreateSpaceOrderWidgetArray() and CreateTabOrderWidgetArray(). - Change CreateSpaceOrderWidgetArray() to return a vector instead of taking it as an out-parameter. - Stop using pdfium::CollectionSize() in CreateTabOrderWidgetArray() and consistently use size_t for sizes and indices. Change-Id: I3bed4616bfab9abe3df9ea4b42661721df42d236 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/70253 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp index 3e3a7a4..6ff6ee8 100644 --- a/xfa/fxfa/cxfa_ffpageview.cpp +++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -342,47 +342,36 @@ void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { m_TabOrderWidgetArray.clear(); - std::vector<CXFA_FFWidget*> SpaceOrderWidgetArray; - CreateSpaceOrderWidgetArray(&SpaceOrderWidgetArray); - if (SpaceOrderWidgetArray.empty()) + const std::vector<CXFA_FFWidget*> widgets = CreateSpaceOrderWidgetArray(); + if (widgets.empty()) return; - int32_t nWidgetCount = pdfium::CollectionSize<int32_t>(SpaceOrderWidgetArray); - CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0]; - while (pdfium::CollectionSize<int32_t>(m_TabOrderWidgetArray) < - nWidgetCount) { - if (!pdfium::Contains(m_TabOrderWidgetArray, hWidget->GetLayoutItem())) { - m_TabOrderWidgetArray.emplace_back(hWidget->GetLayoutItem()); - CXFA_Node* pNode = hWidget->GetNode(); - if (pNode->GetFFWidgetType() == XFA_FFWidgetType::kExclGroup) { - auto it = std::find(SpaceOrderWidgetArray.begin(), - SpaceOrderWidgetArray.end(), hWidget); - int32_t iWidgetIndex = it != SpaceOrderWidgetArray.end() - ? it - SpaceOrderWidgetArray.begin() + 1 - : 0; + CXFA_FFWidget* widget = widgets[0]; + while (m_TabOrderWidgetArray.size() < widgets.size()) { + if (!pdfium::Contains(m_TabOrderWidgetArray, widget->GetLayoutItem())) { + m_TabOrderWidgetArray.emplace_back(widget->GetLayoutItem()); + CXFA_Node* node = widget->GetNode(); + if (node->GetFFWidgetType() == XFA_FFWidgetType::kExclGroup) { + auto it = std::find(widgets.begin(), widgets.end(), widget); + size_t index = it != widgets.end() ? it - widgets.begin() + 1 : 0; while (true) { - CXFA_FFWidget* radio = - SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; - if (radio->GetNode()->GetExclGroupIfExists() != pNode) + CXFA_FFWidget* radio = widgets[index % widgets.size()]; + if (radio->GetNode()->GetExclGroupIfExists() != node) break; - if (!pdfium::Contains(m_TabOrderWidgetArray, - hWidget->GetLayoutItem())) { + if (!pdfium::Contains(m_TabOrderWidgetArray, widget->GetLayoutItem())) m_TabOrderWidgetArray.emplace_back(radio->GetLayoutItem()); - } - iWidgetIndex++; + ++index; } } - if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) { - hWidget = hTraverseWidget; + CXFA_FFWidget* next_widget = GetTraverseWidget(widget); + if (next_widget) { + widget = next_widget; continue; } } - auto it = std::find(SpaceOrderWidgetArray.begin(), - SpaceOrderWidgetArray.end(), hWidget); - int32_t iWidgetIndex = it != SpaceOrderWidgetArray.end() - ? it - SpaceOrderWidgetArray.begin() + 1 - : 0; - hWidget = SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; + auto it = std::find(widgets.begin(), widgets.end(), widget); + size_t index = it != widgets.end() ? it - widgets.begin() + 1 : 0; + widget = widgets[index % widgets.size()]; } } @@ -440,16 +429,17 @@ pContainer->AppendTabParam(pParam.get()); } -void CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray( - std::vector<CXFA_FFWidget*>* WidgetArray) { +std::vector<CXFA_FFWidget*> +CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray() { + std::vector<CXFA_FFWidget*> widgets; CXFA_LayoutItemIterator sIterator(m_pPageViewLayout.Get()); auto pParam = std::make_unique<CXFA_TabParam>(nullptr); bool bCurrentItem = false; bool bContentArea = false; OrderContainer(&sIterator, nullptr, pParam.get(), &bCurrentItem, &bContentArea, false); - WidgetArray->insert(WidgetArray->end(), pParam->GetChildren().begin(), - pParam->GetChildren().end()); + widgets.insert(widgets.end(), pParam->GetChildren().begin(), + pParam->GetChildren().end()); sIterator.Reset(); bCurrentItem = false; @@ -457,8 +447,9 @@ pParam->ClearChildren(); OrderContainer(&sIterator, nullptr, pParam.get(), &bCurrentItem, &bContentArea, true); - WidgetArray->insert(WidgetArray->end(), pParam->GetChildren().begin(), - pParam->GetChildren().end()); + widgets.insert(widgets.end(), pParam->GetChildren().begin(), + pParam->GetChildren().end()); + return widgets; } CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget(
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h index 1025046..5599af0 100644 --- a/xfa/fxfa/cxfa_ffpageview.h +++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -98,7 +98,7 @@ CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName, CXFA_FFWidget* pRefWidget); void CreateTabOrderWidgetArray(); - void CreateSpaceOrderWidgetArray(std::vector<CXFA_FFWidget*>* WidgetArray); + std::vector<CXFA_FFWidget*> CreateSpaceOrderWidgetArray(); CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); void OrderContainer(CXFA_LayoutItemIterator* sIterator, CXFA_LayoutItem* pViewItem,