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

Side by Side Diff: xfa/fwl/cfwl_edit.cpp

Issue 2560873005: Cleanup CFWL_Widget code to return CFX_RectFs where appropriate (Closed)
Patch Set: Review feedback Created 4 years 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/fwl/cfwl_datetimepicker.cpp ('k') | xfa/fwl/cfwl_form.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/fwl/cfwl_edit.h" 7 #include "xfa/fwl/cfwl_edit.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { 422 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) {
423 CFWL_ScrollBar* pScroll = UpdateScroll(); 423 CFWL_ScrollBar* pScroll = UpdateScroll();
424 if (pScroll) { 424 if (pScroll) {
425 rtInvalid = pScroll->GetWidgetRect(); 425 rtInvalid = pScroll->GetWidgetRect();
426 bRepaintScroll = true; 426 bRepaintScroll = true;
427 } 427 }
428 } 428 }
429 if (bRepaintContent || bRepaintScroll) { 429 if (bRepaintContent || bRepaintScroll) {
430 if (bRepaintContent) 430 if (bRepaintContent)
431 rtInvalid.Union(m_rtEngine); 431 rtInvalid.Union(m_rtEngine);
432 Repaint(&rtInvalid); 432 RepaintRect(rtInvalid);
433 } 433 }
434 } 434 }
435 435
436 void CFWL_Edit::OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { 436 void CFWL_Edit::OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) {
437 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) 437 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
438 UpdateVAlignment(); 438 UpdateVAlignment();
439 439
440 CFX_RectF rtTemp;
441 GetClientRect(rtTemp);
442
443 CFWL_EventTextChanged event(this); 440 CFWL_EventTextChanged event(this);
444 event.wsPrevText = ChangeInfo.wsPrevText; 441 event.wsPrevText = ChangeInfo.wsPrevText;
445 DispatchEvent(&event); 442 DispatchEvent(&event);
446 443
447 LayoutScrollBar(); 444 LayoutScrollBar();
448 Repaint(&rtTemp); 445 RepaintRect(GetClientRect());
449 } 446 }
450 447
451 void CFWL_Edit::OnSelChanged() { 448 void CFWL_Edit::OnSelChanged() {
452 CFX_RectF rtTemp; 449 RepaintRect(GetClientRect());
453 GetClientRect(rtTemp);
454 Repaint(&rtTemp);
455 } 450 }
456 451
457 bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) { 452 bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) {
458 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); 453 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
459 if (!pPage) 454 if (!pPage)
460 return false; 455 return false;
461 456
462 pPage->LoadPage(nullptr, nullptr); 457 pPage->LoadPage(nullptr, nullptr);
463 return true; 458 return true;
464 } 459 }
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 851
857 void CFWL_Edit::UpdateCaret() { 852 void CFWL_Edit::UpdateCaret() {
858 CFX_RectF rtFDE; 853 CFX_RectF rtFDE;
859 m_EdtEngine.GetCaretRect(rtFDE); 854 m_EdtEngine.GetCaretRect(rtFDE);
860 855
861 rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX, 856 rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX,
862 m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset); 857 m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset);
863 CFX_RectF rtCaret; 858 CFX_RectF rtCaret;
864 rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height); 859 rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height);
865 860
866 CFX_RectF rtClient; 861 CFX_RectF rtClient = GetClientRect();
867 GetClientRect(rtClient);
868 rtCaret.Intersect(rtClient); 862 rtCaret.Intersect(rtClient);
869
870 if (rtCaret.left > rtClient.right()) { 863 if (rtCaret.left > rtClient.right()) {
871 FX_FLOAT right = rtCaret.right(); 864 FX_FLOAT right = rtCaret.right();
872 rtCaret.left = rtClient.right() - 1; 865 rtCaret.left = rtClient.right() - 1;
873 rtCaret.width = right - rtCaret.left; 866 rtCaret.width = right - rtCaret.left;
874 } 867 }
875 868
876 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && !rtCaret.IsEmpty()) 869 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && !rtCaret.IsEmpty())
877 ShowCaret(&rtCaret); 870 ShowCaret(&rtCaret);
878 else 871 else
879 HideCaret(&rtCaret); 872 HideCaret(&rtCaret);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1, 976 m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1,
984 m_DoRecords.end()); 977 m_DoRecords.end());
985 } 978 }
986 979
987 m_DoRecords.push_back(std::move(pRecord)); 980 m_DoRecords.push_back(std::move(pRecord));
988 m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; 981 m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1;
989 return m_iCurRecord; 982 return m_iCurRecord;
990 } 983 }
991 984
992 void CFWL_Edit::Layout() { 985 void CFWL_Edit::Layout() {
993 GetClientRect(m_rtClient); 986 m_rtClient = GetClientRect();
994 m_rtEngine = m_rtClient; 987 m_rtEngine = m_rtClient;
995 FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( 988 FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>(
996 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); 989 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
997 if (!pfWidth) 990 if (!pfWidth)
998 return; 991 return;
999 992
1000 FX_FLOAT fWidth = *pfWidth; 993 FX_FLOAT fWidth = *pfWidth;
1001 if (!m_pOuter) { 994 if (!m_pOuter) {
1002 CFX_RectF* pUIMargin = static_cast<CFX_RectF*>( 995 CFX_RectF* pUIMargin = static_cast<CFX_RectF*>(
1003 GetThemeCapacity(CFWL_WidgetCapacity::UIMargin)); 996 GetThemeCapacity(CFWL_WidgetCapacity::UIMargin));
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; 1148 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
1156 m_pHorzScrollBar = 1149 m_pHorzScrollBar =
1157 pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); 1150 pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this);
1158 } 1151 }
1159 1152
1160 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) { 1153 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) {
1161 if (m_pCaret) { 1154 if (m_pCaret) {
1162 m_pCaret->ShowCaret(); 1155 m_pCaret->ShowCaret();
1163 if (!pRect->IsEmpty()) 1156 if (!pRect->IsEmpty())
1164 m_pCaret->SetWidgetRect(*pRect); 1157 m_pCaret->SetWidgetRect(*pRect);
1165 Repaint(&m_rtEngine); 1158 RepaintRect(m_rtEngine);
1166 return; 1159 return;
1167 } 1160 }
1168 1161
1169 CFWL_Widget* pOuter = this; 1162 CFWL_Widget* pOuter = this;
1170 pRect->Offset(m_pProperties->m_rtWidget.left, m_pProperties->m_rtWidget.top); 1163 pRect->Offset(m_pProperties->m_rtWidget.left, m_pProperties->m_rtWidget.top);
1171 while (pOuter->GetOuter()) { 1164 while (pOuter->GetOuter()) {
1172 pOuter = pOuter->GetOuter(); 1165 pOuter = pOuter->GetOuter();
1173 1166
1174 CFX_RectF rtOuter = pOuter->GetWidgetRect(); 1167 CFX_RectF rtOuter = pOuter->GetWidgetRect();
1175 pRect->Offset(rtOuter.left, rtOuter.top); 1168 pRect->Offset(rtOuter.left, rtOuter.top);
(...skipping 13 matching lines...) Expand all
1189 pXFAWidget->GetRotateMatrix(mt); 1182 pXFAWidget->GetRotateMatrix(mt);
1190 1183
1191 CFX_RectF rt(*pRect); 1184 CFX_RectF rt(*pRect);
1192 mt.TransformRect(rt); 1185 mt.TransformRect(rt);
1193 pDocEnvironment->DisplayCaret(pXFAWidget, true, &rt); 1186 pDocEnvironment->DisplayCaret(pXFAWidget, true, &rt);
1194 } 1187 }
1195 1188
1196 void CFWL_Edit::HideCaret(CFX_RectF* pRect) { 1189 void CFWL_Edit::HideCaret(CFX_RectF* pRect) {
1197 if (m_pCaret) { 1190 if (m_pCaret) {
1198 m_pCaret->HideCaret(); 1191 m_pCaret->HideCaret();
1199 Repaint(&m_rtEngine); 1192 RepaintRect(m_rtEngine);
1200 return; 1193 return;
1201 } 1194 }
1202 1195
1203 CFWL_Widget* pOuter = this; 1196 CFWL_Widget* pOuter = this;
1204 while (pOuter->GetOuter()) 1197 while (pOuter->GetOuter())
1205 pOuter = pOuter->GetOuter(); 1198 pOuter = pOuter->GetOuter();
1206 1199
1207 CXFA_FFWidget* pXFAWidget = 1200 CXFA_FFWidget* pXFAWidget =
1208 static_cast<CXFA_FFWidget*>(pOuter->GetLayoutItem()); 1201 static_cast<CXFA_FFWidget*>(pOuter->GetLayoutItem());
1209 if (!pXFAWidget) 1202 if (!pXFAWidget)
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 ClearRecord(); 1377 ClearRecord();
1385 } 1378 }
1386 1379
1387 LayoutScrollBar(); 1380 LayoutScrollBar();
1388 if (!bRepaint) 1381 if (!bRepaint)
1389 return; 1382 return;
1390 1383
1391 CFX_RectF rtInvalidate; 1384 CFX_RectF rtInvalidate;
1392 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, 1385 rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width,
1393 m_pProperties->m_rtWidget.height); 1386 m_pProperties->m_rtWidget.height);
1394 Repaint(&rtInvalidate); 1387 RepaintRect(rtInvalidate);
1395 } 1388 }
1396 1389
1397 void CFWL_Edit::OnLButtonDown(CFWL_MessageMouse* pMsg) { 1390 void CFWL_Edit::OnLButtonDown(CFWL_MessageMouse* pMsg) {
1398 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) 1391 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
1399 return; 1392 return;
1400 1393
1401 m_bLButtonDown = true; 1394 m_bLButtonDown = true;
1402 SetGrab(true); 1395 SetGrab(true);
1403 DoButtonDown(pMsg); 1396 DoButtonDown(pMsg);
1404 int32_t nIndex = m_EdtEngine.GetCaretPos(); 1397 int32_t nIndex = m_EdtEngine.GetCaretPos();
1405 bool bRepaint = false; 1398 bool bRepaint = false;
1406 if (m_EdtEngine.CountSelRanges() > 0) { 1399 if (m_EdtEngine.CountSelRanges() > 0) {
1407 m_EdtEngine.ClearSelection(); 1400 m_EdtEngine.ClearSelection();
1408 bRepaint = true; 1401 bRepaint = true;
1409 } 1402 }
1410 1403
1411 if ((pMsg->m_dwFlags & FWL_KEYFLAG_Shift) && m_nSelStart != nIndex) { 1404 if ((pMsg->m_dwFlags & FWL_KEYFLAG_Shift) && m_nSelStart != nIndex) {
1412 int32_t iStart = std::min(m_nSelStart, nIndex); 1405 int32_t iStart = std::min(m_nSelStart, nIndex);
1413 int32_t iEnd = std::max(m_nSelStart, nIndex); 1406 int32_t iEnd = std::max(m_nSelStart, nIndex);
1414 m_EdtEngine.AddSelRange(iStart, iEnd - iStart); 1407 m_EdtEngine.AddSelRange(iStart, iEnd - iStart);
1415 bRepaint = true; 1408 bRepaint = true;
1416 } else { 1409 } else {
1417 m_nSelStart = nIndex; 1410 m_nSelStart = nIndex;
1418 } 1411 }
1419 if (bRepaint) 1412 if (bRepaint)
1420 Repaint(&m_rtEngine); 1413 RepaintRect(m_rtEngine);
1421 } 1414 }
1422 1415
1423 void CFWL_Edit::OnLButtonUp(CFWL_MessageMouse* pMsg) { 1416 void CFWL_Edit::OnLButtonUp(CFWL_MessageMouse* pMsg) {
1424 m_bLButtonDown = false; 1417 m_bLButtonDown = false;
1425 SetGrab(false); 1418 SetGrab(false);
1426 } 1419 }
1427 1420
1428 void CFWL_Edit::OnButtonDblClk(CFWL_MessageMouse* pMsg) { 1421 void CFWL_Edit::OnButtonDblClk(CFWL_MessageMouse* pMsg) {
1429 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); 1422 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
1430 if (!pPage) 1423 if (!pPage)
1431 return; 1424 return;
1432 1425
1433 CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); 1426 CFX_PointF pt(pMsg->m_fx, pMsg->m_fy);
1434 DeviceToEngine(pt); 1427 DeviceToEngine(pt);
1435 int32_t nCount = 0; 1428 int32_t nCount = 0;
1436 int32_t nIndex = pPage->SelectWord(pt, nCount); 1429 int32_t nIndex = pPage->SelectWord(pt, nCount);
1437 if (nIndex < 0) 1430 if (nIndex < 0)
1438 return; 1431 return;
1439 1432
1440 m_EdtEngine.AddSelRange(nIndex, nCount); 1433 m_EdtEngine.AddSelRange(nIndex, nCount);
1441 m_EdtEngine.SetCaretPos(nIndex + nCount - 1, false); 1434 m_EdtEngine.SetCaretPos(nIndex + nCount - 1, false);
1442 Repaint(&m_rtEngine); 1435 RepaintRect(m_rtEngine);
1443 } 1436 }
1444 1437
1445 void CFWL_Edit::OnMouseMove(CFWL_MessageMouse* pMsg) { 1438 void CFWL_Edit::OnMouseMove(CFWL_MessageMouse* pMsg) {
1446 if (m_nSelStart == -1 || !m_bLButtonDown) 1439 if (m_nSelStart == -1 || !m_bLButtonDown)
1447 return; 1440 return;
1448 1441
1449 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); 1442 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
1450 if (!pPage) 1443 if (!pPage)
1451 return; 1444 return;
1452 1445
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 return true; 1625 return true;
1633 1626
1634 pScrollBar->SetPos(fPos); 1627 pScrollBar->SetPos(fPos);
1635 pScrollBar->SetTrackPos(fPos); 1628 pScrollBar->SetTrackPos(fPos);
1636 UpdateOffset(pScrollBar, fPos - iCurPos); 1629 UpdateOffset(pScrollBar, fPos - iCurPos);
1637 UpdateCaret(); 1630 UpdateCaret();
1638 1631
1639 CFX_RectF rect = GetWidgetRect(); 1632 CFX_RectF rect = GetWidgetRect();
1640 CFX_RectF rtInvalidate; 1633 CFX_RectF rtInvalidate;
1641 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); 1634 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2);
1642 Repaint(&rtInvalidate); 1635 RepaintRect(rtInvalidate);
1643 return true; 1636 return true;
1644 } 1637 }
OLDNEW
« no previous file with comments | « xfa/fwl/cfwl_datetimepicker.cpp ('k') | xfa/fwl/cfwl_form.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698