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 "autoreflow.h" | 7 #include "autoreflow.h" |
8 #define approachto(a,b,c) (FXSYS_fabs((float)((a)-(b)))>(c) ? 0 : 1) | 8 #define approachto(a,b,c) (FXSYS_fabs((float)((a)-(b)))>(c) ? 0 : 1) |
9 int FPDF_ProcessInterObj(const CPDF_PageObject* pPrevObj, const CPDF_PageObject*
pObj) | 9 int FPDF_ProcessInterObj(const CPDF_PageObject* pPrevObj, const CPDF_PageObject*
pObj) |
10 { | 10 { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 pAppraceOrderObjs->GetNextObject(pos1); | 93 pAppraceOrderObjs->GetNextObject(pos1); |
94 } | 94 } |
95 break; | 95 break; |
96 } | 96 } |
97 } | 97 } |
98 pAppraceOrderObjs->InsertObject(pos1, pObj); | 98 pAppraceOrderObjs->InsertObject(pos1, pObj); |
99 } | 99 } |
100 } | 100 } |
101 IPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_AutoReflow(CPDF_
PageObjects* pPage, FX_BOOL bReadOrder) | 101 IPDF_LayoutProvider* IPDF_LayoutProvider::Create_LayoutProvider_AutoReflow(CPDF_
PageObjects* pPage, FX_BOOL bReadOrder) |
102 { | 102 { |
103 return FX_NEW CPDF_AutoReflowLayoutProvider(pPage, bReadOrder); | 103 return new CPDF_AutoReflowLayoutProvider(pPage, bReadOrder); |
104 } | 104 } |
105 CPDF_AutoReflowElement::CPDF_AutoReflowElement(LayoutType layoutType , CPDF_Auto
ReflowElement* pParent) | 105 CPDF_AutoReflowElement::CPDF_AutoReflowElement(LayoutType layoutType , CPDF_Auto
ReflowElement* pParent) |
106 { | 106 { |
107 m_ElmType = layoutType; | 107 m_ElmType = layoutType; |
108 m_pParentElm = pParent; | 108 m_pParentElm = pParent; |
109 if(pParent) { | 109 if(pParent) { |
110 pParent->m_ChildArray.Add(this); | 110 pParent->m_ChildArray.Add(this); |
111 } | 111 } |
112 m_SpaceBefore = 0; | 112 m_SpaceBefore = 0; |
113 } | 113 } |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 for(i = 0; i < count; i++) { | 244 for(i = 0; i < count; i++) { |
245 pCell = (CRF_CELL*)m_cellArray.GetAt(i); | 245 pCell = (CRF_CELL*)m_cellArray.GetAt(i); |
246 if(!pCell) { | 246 if(!pCell) { |
247 continue; | 247 continue; |
248 } | 248 } |
249 if(i < count - 1) { | 249 if(i < count - 1) { |
250 pNextCell = (CRF_CELL*)m_cellArray.GetAt(i + 1); | 250 pNextCell = (CRF_CELL*)m_cellArray.GetAt(i + 1); |
251 } else { | 251 } else { |
252 pNextCell = NULL; | 252 pNextCell = NULL; |
253 } | 253 } |
254 pCurrElm = NULL; | 254 pCurrElm = new CPDF_AutoReflowElement(LayoutParagraph, pParent); |
255 pCurrElm = FX_NEW CPDF_AutoReflowElement(LayoutParagraph, pParent); | |
256 if(pCurrElm->GetType() == LayoutParagraph && plastCell) { | 255 if(pCurrElm->GetType() == LayoutParagraph && plastCell) { |
257 int SpaceBefore = 0; | 256 int SpaceBefore = 0; |
258 if(pCell->m_CellWritingMode != plastCell->m_CellWritingMode ) { | 257 if(pCell->m_CellWritingMode != plastCell->m_CellWritingMode ) { |
259 SpaceBefore = 20; | 258 SpaceBefore = 20; |
260 } else if(pCell->m_CellWritingMode == WritingMode_LRTB) { | 259 } else if(pCell->m_CellWritingMode == WritingMode_LRTB) { |
261 SpaceBefore = plastCell->m_BBox.bottom - pCell->m_BBox.top; | 260 SpaceBefore = plastCell->m_BBox.bottom - pCell->m_BBox.top; |
262 } else if(pCell->m_CellWritingMode == WritingMode_TBRL) { | 261 } else if(pCell->m_CellWritingMode == WritingMode_TBRL) { |
263 SpaceBefore = plastCell->m_BBox.left - pCell->m_BBox.right; | 262 SpaceBefore = plastCell->m_BBox.left - pCell->m_BBox.right; |
264 } | 263 } |
265 if(SpaceBefore > 0) { | 264 if(SpaceBefore > 0) { |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 } | 553 } |
555 } | 554 } |
556 } | 555 } |
557 } else { | 556 } else { |
558 m_WritingMode = WritingMode; | 557 m_WritingMode = WritingMode; |
559 } | 558 } |
560 } | 559 } |
561 pPerObj = pObj; | 560 pPerObj = pObj; |
562 if(bNewLine) { | 561 if(bNewLine) { |
563 int c = pCell ? pCell->m_ObjList.GetCount() : 0; | 562 int c = pCell ? pCell->m_ObjList.GetCount() : 0; |
564 pCell = FX_NEW CRF_CELL; | 563 pCell = new CRF_CELL; |
565 pCell->m_CellWritingMode = m_WritingMode; | 564 pCell->m_CellWritingMode = m_WritingMode; |
566 pCell->m_BBox = ObjBBox; | 565 pCell->m_BBox = ObjBBox; |
567 if(pObj->m_Type == PDFPAGE_TEXT) { | 566 if(pObj->m_Type == PDFPAGE_TEXT) { |
568 FX_FLOAT x = ((CPDF_TextObject*)pObj)->GetPosX(), y = ((CPDF_Tex
tObject*)pObj)->GetPosY(); | 567 FX_FLOAT x = ((CPDF_TextObject*)pObj)->GetPosX(), y = ((CPDF_Tex
tObject*)pObj)->GetPosY(); |
569 m_PDFDisplayMatrix.Transform(x, y); | 568 m_PDFDisplayMatrix.Transform(x, y); |
570 if(x < ObjBBox.left) { | 569 if(x < ObjBBox.left) { |
571 pCell->m_BBox.left = (int)x; | 570 pCell->m_BBox.left = (int)x; |
572 } | 571 } |
573 } | 572 } |
574 pCell->m_ObjList.AddTail(pObj); | 573 pCell->m_ObjList.AddTail(pObj); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 return WritingMode_TBRL; | 711 return WritingMode_TBRL; |
713 } | 712 } |
714 } | 713 } |
715 } | 714 } |
716 } | 715 } |
717 return WritingMode_UNKNOW; | 716 return WritingMode_UNKNOW; |
718 } | 717 } |
719 LayoutStatus CPDF_AutoReflowLayoutProvider::StartLoad(IFX_Pause* pPause) | 718 LayoutStatus CPDF_AutoReflowLayoutProvider::StartLoad(IFX_Pause* pPause) |
720 { | 719 { |
721 m_pPause = pPause; | 720 m_pPause = pPause; |
722 m_pRoot = FX_NEW CPDF_AutoReflowElement(LayoutDocument); | 721 m_pRoot = new CPDF_AutoReflowElement(LayoutDocument); |
723 if(!m_pRoot) { | |
724 return LayoutError; | |
725 } | |
726 m_Step = 0; | 722 m_Step = 0; |
727 return Continue(); | 723 return Continue(); |
728 } | 724 } |
729 LayoutStatus CPDF_AutoReflowLayoutProvider::Continue() | 725 LayoutStatus CPDF_AutoReflowLayoutProvider::Continue() |
730 { | 726 { |
731 GenerateStructTree(); | 727 GenerateStructTree(); |
732 return m_Status; | 728 return m_Status; |
733 } | 729 } |
734 int CPDF_AutoReflowLayoutProvider::GetPosition() | 730 int CPDF_AutoReflowLayoutProvider::GetPosition() |
735 { | 731 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 pTextObj->GetItemInfo(i + 1, &Item); | 768 pTextObj->GetItemInfo(i + 1, &Item); |
773 return Item.m_OriginX; | 769 return Item.m_OriginX; |
774 } | 770 } |
775 } | 771 } |
776 return Item.m_OriginX; | 772 return Item.m_OriginX; |
777 } | 773 } |
778 CFX_AffineMatrix matrix; | 774 CFX_AffineMatrix matrix; |
779 FX_RECT rect = pObj->GetBBox(&matrix); | 775 FX_RECT rect = pObj->GetBBox(&matrix); |
780 return (FX_FLOAT)(rect.Width()); | 776 return (FX_FLOAT)(rect.Width()); |
781 } | 777 } |
OLD | NEW |