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

Side by Side Diff: core/src/fpdftext/fpdf_text_int.cpp

Issue 1709393002: Remove PageObject's m_Type and add As<Type> functions (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: address comments Created 4 years, 10 months 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 | « core/src/fpdfapi/fpdf_render/render_int.h ('k') | fpdfsdk/src/fpdf_transformpage.cpp » ('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 "core/src/fpdftext/text_int.h" 7 #include "core/src/fpdftext/text_int.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cctype> 10 #include <cctype>
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 std::vector<uint8_t> nHorizontalMask(nPageWidth); 758 std::vector<uint8_t> nHorizontalMask(nPageWidth);
759 std::vector<uint8_t> nVerticalMask(nPageHeight); 759 std::vector<uint8_t> nVerticalMask(nPageHeight);
760 uint8_t* pDataH = nHorizontalMask.data(); 760 uint8_t* pDataH = nHorizontalMask.data();
761 uint8_t* pDataV = nVerticalMask.data(); 761 uint8_t* pDataV = nVerticalMask.data();
762 int32_t index = 0; 762 int32_t index = 0;
763 FX_FLOAT fLineHeight = 0.0f; 763 FX_FLOAT fLineHeight = 0.0f;
764 if (m_pPage->GetPageObjectList()->empty()) 764 if (m_pPage->GetPageObjectList()->empty())
765 return -1; 765 return -1;
766 766
767 for (auto& pPageObj : *m_pPage->GetPageObjectList()) { 767 for (auto& pPageObj : *m_pPage->GetPageObjectList()) {
768 if (!pPageObj || pPageObj->m_Type != CPDF_PageObject::TEXT) 768 if (!pPageObj || !pPageObj->IsText())
769 continue; 769 continue;
770 770
771 int32_t minH = 771 int32_t minH =
772 (int32_t)pPageObj->m_Left < 0 ? 0 : (int32_t)pPageObj->m_Left; 772 (int32_t)pPageObj->m_Left < 0 ? 0 : (int32_t)pPageObj->m_Left;
773 int32_t maxH = (int32_t)pPageObj->m_Right > nPageWidth 773 int32_t maxH = (int32_t)pPageObj->m_Right > nPageWidth
774 ? nPageWidth 774 ? nPageWidth
775 : (int32_t)pPageObj->m_Right; 775 : (int32_t)pPageObj->m_Right;
776 int32_t minV = 776 int32_t minV =
777 (int32_t)pPageObj->m_Bottom < 0 ? 0 : (int32_t)pPageObj->m_Bottom; 777 (int32_t)pPageObj->m_Bottom < 0 ? 0 : (int32_t)pPageObj->m_Bottom;
778 int32_t maxV = (int32_t)pPageObj->m_Top > nPageHeight 778 int32_t maxV = (int32_t)pPageObj->m_Top > nPageHeight
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 } 839 }
840 840
841 void CPDF_TextPage::ProcessObject() { 841 void CPDF_TextPage::ProcessObject() {
842 if (m_pPage->GetPageObjectList()->empty()) 842 if (m_pPage->GetPageObjectList()->empty())
843 return; 843 return;
844 844
845 m_TextlineDir = FindTextlineFlowDirection(); 845 m_TextlineDir = FindTextlineFlowDirection();
846 const CPDF_PageObjectList* pObjList = m_pPage->GetPageObjectList(); 846 const CPDF_PageObjectList* pObjList = m_pPage->GetPageObjectList();
847 for (auto it = pObjList->begin(); it != pObjList->end(); ++it) { 847 for (auto it = pObjList->begin(); it != pObjList->end(); ++it) {
848 if (CPDF_PageObject* pObj = it->get()) { 848 if (CPDF_PageObject* pObj = it->get()) {
849 if (pObj->m_Type == CPDF_PageObject::TEXT) { 849 if (pObj->IsText()) {
850 CFX_Matrix matrix; 850 CFX_Matrix matrix;
851 ProcessTextObject(static_cast<CPDF_TextObject*>(pObj), matrix, pObjList, 851 ProcessTextObject(pObj->AsText(), matrix, pObjList, it);
852 it); 852 } else if (pObj->IsForm()) {
853 } else if (pObj->m_Type == CPDF_PageObject::FORM) {
854 CFX_Matrix formMatrix(1, 0, 0, 1, 0, 0); 853 CFX_Matrix formMatrix(1, 0, 0, 1, 0, 0);
855 ProcessFormObject(static_cast<CPDF_FormObject*>(pObj), formMatrix); 854 ProcessFormObject(pObj->AsForm(), formMatrix);
856 } 855 }
857 } 856 }
858 } 857 }
859 for (int i = 0; i < m_LineObj.GetSize(); i++) 858 for (int i = 0; i < m_LineObj.GetSize(); i++)
860 ProcessTextObject(m_LineObj.GetAt(i)); 859 ProcessTextObject(m_LineObj.GetAt(i));
861 860
862 m_LineObj.RemoveAll(); 861 m_LineObj.RemoveAll();
863 CloseTempLine(); 862 CloseTempLine();
864 } 863 }
865 864
866 void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj, 865 void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj,
867 const CFX_Matrix& formMatrix) { 866 const CFX_Matrix& formMatrix) {
868 CPDF_PageObjectList* pObjectList = pFormObj->m_pForm->GetPageObjectList(); 867 CPDF_PageObjectList* pObjectList = pFormObj->m_pForm->GetPageObjectList();
869 if (pObjectList->empty()) 868 if (pObjectList->empty())
870 return; 869 return;
871 870
872 CFX_Matrix curFormMatrix; 871 CFX_Matrix curFormMatrix;
873 curFormMatrix.Copy(pFormObj->m_FormMatrix); 872 curFormMatrix.Copy(pFormObj->m_FormMatrix);
874 curFormMatrix.Concat(formMatrix); 873 curFormMatrix.Concat(formMatrix);
875 874
876 for (auto it = pObjectList->begin(); it != pObjectList->end(); ++it) { 875 for (auto it = pObjectList->begin(); it != pObjectList->end(); ++it) {
877 if (CPDF_PageObject* pPageObj = it->get()) { 876 if (CPDF_PageObject* pPageObj = it->get()) {
878 if (pPageObj->m_Type == CPDF_PageObject::TEXT) { 877 if (pPageObj->IsText()) {
879 ProcessTextObject(static_cast<CPDF_TextObject*>(pPageObj), 878 ProcessTextObject(pPageObj->AsText(), curFormMatrix, pObjectList, it);
880 curFormMatrix, pObjectList, it); 879 } else if (pPageObj->IsForm()) {
881 } else if (pPageObj->m_Type == CPDF_PageObject::FORM) { 880 ProcessFormObject(pPageObj->AsForm(), curFormMatrix);
882 ProcessFormObject(static_cast<CPDF_FormObject*>(pPageObj),
883 curFormMatrix);
884 } 881 }
885 } 882 }
886 } 883 }
887 } 884 }
888 885
889 int CPDF_TextPage::GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const { 886 int CPDF_TextPage::GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const {
890 if (charCode == -1) { 887 if (charCode == -1) {
891 return 0; 888 return 0;
892 } 889 }
893 int w = pFont->GetCharWidthF(charCode); 890 int w = pFont->GetCharWidthF(charCode);
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 return TRUE; 1815 return TRUE;
1819 } 1816 }
1820 FX_BOOL CPDF_TextPage::IsSameAsPreTextObject( 1817 FX_BOOL CPDF_TextPage::IsSameAsPreTextObject(
1821 CPDF_TextObject* pTextObj, 1818 CPDF_TextObject* pTextObj,
1822 const CPDF_PageObjectList* pObjList, 1819 const CPDF_PageObjectList* pObjList,
1823 CPDF_PageObjectList::const_iterator iter) { 1820 CPDF_PageObjectList::const_iterator iter) {
1824 int i = 0; 1821 int i = 0;
1825 while (i < 5 && iter != pObjList->begin()) { 1822 while (i < 5 && iter != pObjList->begin()) {
1826 --iter; 1823 --iter;
1827 CPDF_PageObject* pOtherObj = iter->get(); 1824 CPDF_PageObject* pOtherObj = iter->get();
1828 if (pOtherObj == pTextObj || pOtherObj->m_Type != CPDF_PageObject::TEXT) 1825 if (pOtherObj == pTextObj || !pOtherObj->IsText())
1829 continue; 1826 continue;
1830 if (IsSameTextObject(static_cast<CPDF_TextObject*>(pOtherObj), pTextObj)) 1827 if (IsSameTextObject(pOtherObj->AsText(), pTextObj))
1831 return TRUE; 1828 return TRUE;
1832 ++i; 1829 ++i;
1833 } 1830 }
1834 return FALSE; 1831 return FALSE;
1835 } 1832 }
1836 1833
1837 FX_BOOL CPDF_TextPage::GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info) { 1834 FX_BOOL CPDF_TextPage::GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info) {
1838 const PAGECHAR_INFO* preChar; 1835 const PAGECHAR_INFO* preChar;
1839 if (!m_TempCharList.empty()) { 1836 if (!m_TempCharList.empty()) {
1840 preChar = &m_TempCharList.back(); 1837 preChar = &m_TempCharList.back();
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
2497 if (!m_bIsParsed || index < 0 || index >= m_LinkList.GetSize()) { 2494 if (!m_bIsParsed || index < 0 || index >= m_LinkList.GetSize()) {
2498 return; 2495 return;
2499 } 2496 }
2500 CPDF_LinkExt* link = NULL; 2497 CPDF_LinkExt* link = NULL;
2501 link = m_LinkList.GetAt(index); 2498 link = m_LinkList.GetAt(index);
2502 if (!link) { 2499 if (!link) {
2503 return; 2500 return;
2504 } 2501 }
2505 m_pTextPage->GetRectArray(link->m_Start, link->m_Count, rects); 2502 m_pTextPage->GetRectArray(link->m_Start, link->m_Count, rects);
2506 } 2503 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_render/render_int.h ('k') | fpdfsdk/src/fpdf_transformpage.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698