| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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/fpdfdoc/cpvt_generateap.h" | 7 #include "core/fpdfdoc/cpvt_generateap.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" | 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
| 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 rcAnnot.top - rcAnnot.bottom); | 100 rcAnnot.top - rcAnnot.bottom); |
| 101 rcBBox = CFX_FloatRect(0, 0, rcAnnot.right - rcAnnot.left, | 101 rcBBox = CFX_FloatRect(0, 0, rcAnnot.right - rcAnnot.left, |
| 102 rcAnnot.top - rcAnnot.bottom); | 102 rcAnnot.top - rcAnnot.bottom); |
| 103 break; | 103 break; |
| 104 case 270: | 104 case 270: |
| 105 matrix = CFX_Matrix(0, -1, 1, 0, 0, rcAnnot.top - rcAnnot.bottom); | 105 matrix = CFX_Matrix(0, -1, 1, 0, 0, rcAnnot.top - rcAnnot.bottom); |
| 106 rcBBox = CFX_FloatRect(0, 0, rcAnnot.top - rcAnnot.bottom, | 106 rcBBox = CFX_FloatRect(0, 0, rcAnnot.top - rcAnnot.bottom, |
| 107 rcAnnot.right - rcAnnot.left); | 107 rcAnnot.right - rcAnnot.left); |
| 108 break; | 108 break; |
| 109 } | 109 } |
| 110 int32_t nBorderStyle = PBS_SOLID; | 110 |
| 111 BorderStyle nBorderStyle = BorderStyle::SOLID; |
| 111 FX_FLOAT fBorderWidth = 1; | 112 FX_FLOAT fBorderWidth = 1; |
| 112 CPVT_Dash dsBorder(3, 0, 0); | 113 CPVT_Dash dsBorder(3, 0, 0); |
| 113 CPVT_Color crLeftTop, crRightBottom; | 114 CPVT_Color crLeftTop, crRightBottom; |
| 114 if (CPDF_Dictionary* pBSDict = pAnnotDict->GetDictBy("BS")) { | 115 if (CPDF_Dictionary* pBSDict = pAnnotDict->GetDictBy("BS")) { |
| 115 if (pBSDict->KeyExist("W")) | 116 if (pBSDict->KeyExist("W")) |
| 116 fBorderWidth = pBSDict->GetNumberBy("W"); | 117 fBorderWidth = pBSDict->GetNumberBy("W"); |
| 117 | 118 |
| 118 if (CPDF_Array* pArray = pBSDict->GetArrayBy("D")) { | 119 if (CPDF_Array* pArray = pBSDict->GetArrayBy("D")) { |
| 119 dsBorder = CPVT_Dash(pArray->GetIntegerAt(0), pArray->GetIntegerAt(1), | 120 dsBorder = CPVT_Dash(pArray->GetIntegerAt(0), pArray->GetIntegerAt(1), |
| 120 pArray->GetIntegerAt(2)); | 121 pArray->GetIntegerAt(2)); |
| 121 } | 122 } |
| 122 switch (pBSDict->GetStringBy("S").GetAt(0)) { | 123 switch (pBSDict->GetStringBy("S").GetAt(0)) { |
| 123 case 'S': | 124 case 'S': |
| 124 nBorderStyle = PBS_SOLID; | 125 nBorderStyle = BorderStyle::SOLID; |
| 125 break; | 126 break; |
| 126 case 'D': | 127 case 'D': |
| 127 nBorderStyle = PBS_DASH; | 128 nBorderStyle = BorderStyle::DASH; |
| 128 break; | 129 break; |
| 129 case 'B': | 130 case 'B': |
| 130 nBorderStyle = PBS_BEVELED; | 131 nBorderStyle = BorderStyle::BEVELED; |
| 131 fBorderWidth *= 2; | 132 fBorderWidth *= 2; |
| 132 crLeftTop = CPVT_Color(CPVT_Color::kGray, 1); | 133 crLeftTop = CPVT_Color(CPVT_Color::kGray, 1); |
| 133 crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.5); | 134 crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.5); |
| 134 break; | 135 break; |
| 135 case 'I': | 136 case 'I': |
| 136 nBorderStyle = PBS_INSET; | 137 nBorderStyle = BorderStyle::INSET; |
| 137 fBorderWidth *= 2; | 138 fBorderWidth *= 2; |
| 138 crLeftTop = CPVT_Color(CPVT_Color::kGray, 0.5); | 139 crLeftTop = CPVT_Color(CPVT_Color::kGray, 0.5); |
| 139 crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.75); | 140 crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.75); |
| 140 break; | 141 break; |
| 141 case 'U': | 142 case 'U': |
| 142 nBorderStyle = PBS_UNDERLINED; | 143 nBorderStyle = BorderStyle::UNDERLINE; |
| 143 break; | 144 break; |
| 144 } | 145 } |
| 145 } | 146 } |
| 146 CPVT_Color crBorder, crBG; | 147 CPVT_Color crBorder, crBG; |
| 147 if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictBy("MK")) { | 148 if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictBy("MK")) { |
| 148 if (CPDF_Array* pArray = pMKDict->GetArrayBy("BC")) | 149 if (CPDF_Array* pArray = pMKDict->GetArrayBy("BC")) |
| 149 crBorder = CPVT_Color::ParseColor(*pArray); | 150 crBorder = CPVT_Color::ParseColor(*pArray); |
| 150 if (CPDF_Array* pArray = pMKDict->GetArrayBy("BG")) | 151 if (CPDF_Array* pArray = pMKDict->GetArrayBy("BG")) |
| 151 crBG = CPVT_Color::ParseColor(*pArray); | 152 crBG = CPVT_Color::ParseColor(*pArray); |
| 152 } | 153 } |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 220.0f / 255.0f), | 312 220.0f / 255.0f), |
| 312 TRUE); | 313 TRUE); |
| 313 if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) { | 314 if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) { |
| 314 sAppStream << "q\n" << sButton; | 315 sAppStream << "q\n" << sButton; |
| 315 sAppStream << rcButton.left << " " << rcButton.bottom << " " | 316 sAppStream << rcButton.left << " " << rcButton.bottom << " " |
| 316 << rcButton.Width() << " " << rcButton.Height() << " re f\n"; | 317 << rcButton.Width() << " " << rcButton.Height() << " re f\n"; |
| 317 sAppStream << "Q\n"; | 318 sAppStream << "Q\n"; |
| 318 CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP( | 319 CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP( |
| 319 rcButton, 2, CPVT_Color(CPVT_Color::kGray, 0), | 320 rcButton, 2, CPVT_Color(CPVT_Color::kGray, 0), |
| 320 CPVT_Color(CPVT_Color::kGray, 1), | 321 CPVT_Color(CPVT_Color::kGray, 1), |
| 321 CPVT_Color(CPVT_Color::kGray, 0.5), PBS_BEVELED, | 322 CPVT_Color(CPVT_Color::kGray, 0.5), BorderStyle::BEVELED, |
| 322 CPVT_Dash(3, 0, 0)); | 323 CPVT_Dash(3, 0, 0)); |
| 323 if (sButtonBorder.GetLength() > 0) | 324 if (sButtonBorder.GetLength() > 0) |
| 324 sAppStream << "q\n" << sButtonBorder << "Q\n"; | 325 sAppStream << "q\n" << sButtonBorder << "Q\n"; |
| 325 | 326 |
| 326 CFX_FloatPoint ptCenter = | 327 CFX_FloatPoint ptCenter = |
| 327 CFX_FloatPoint((rcButton.left + rcButton.right) / 2, | 328 CFX_FloatPoint((rcButton.left + rcButton.right) / 2, |
| 328 (rcButton.top + rcButton.bottom) / 2); | 329 (rcButton.top + rcButton.bottom) / 2); |
| 329 if (IsFloatBigger(rcButton.Width(), 6) && | 330 if (IsFloatBigger(rcButton.Width(), 6) && |
| 330 IsFloatBigger(rcButton.Height(), 6)) { | 331 IsFloatBigger(rcButton.Height(), 6)) { |
| 331 sAppStream << "q\n" | 332 sAppStream << "q\n" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 return sEditStream.MakeString(); | 583 return sEditStream.MakeString(); |
| 583 } | 584 } |
| 584 | 585 |
| 585 // Static. | 586 // Static. |
| 586 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( | 587 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( |
| 587 const CFX_FloatRect& rect, | 588 const CFX_FloatRect& rect, |
| 588 FX_FLOAT fWidth, | 589 FX_FLOAT fWidth, |
| 589 const CPVT_Color& color, | 590 const CPVT_Color& color, |
| 590 const CPVT_Color& crLeftTop, | 591 const CPVT_Color& crLeftTop, |
| 591 const CPVT_Color& crRightBottom, | 592 const CPVT_Color& crRightBottom, |
| 592 int32_t nStyle, | 593 BorderStyle nStyle, |
| 593 const CPVT_Dash& dash) { | 594 const CPVT_Dash& dash) { |
| 594 CFX_ByteTextBuf sAppStream; | 595 CFX_ByteTextBuf sAppStream; |
| 595 CFX_ByteString sColor; | 596 CFX_ByteString sColor; |
| 596 FX_FLOAT fLeft = rect.left; | 597 FX_FLOAT fLeft = rect.left; |
| 597 FX_FLOAT fRight = rect.right; | 598 FX_FLOAT fRight = rect.right; |
| 598 FX_FLOAT fTop = rect.top; | 599 FX_FLOAT fTop = rect.top; |
| 599 FX_FLOAT fBottom = rect.bottom; | 600 FX_FLOAT fBottom = rect.bottom; |
| 600 if (fWidth > 0.0f) { | 601 if (fWidth > 0.0f) { |
| 601 FX_FLOAT fHalfWidth = fWidth / 2.0f; | 602 FX_FLOAT fHalfWidth = fWidth / 2.0f; |
| 602 switch (nStyle) { | 603 switch (nStyle) { |
| 603 default: | 604 default: |
| 604 case PBS_SOLID: | 605 case BorderStyle::SOLID: |
| 605 sColor = GenerateColorAP(color, TRUE); | 606 sColor = GenerateColorAP(color, TRUE); |
| 606 if (sColor.GetLength() > 0) { | 607 if (sColor.GetLength() > 0) { |
| 607 sAppStream << sColor; | 608 sAppStream << sColor; |
| 608 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " | 609 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " |
| 609 << fTop - fBottom << " re\n"; | 610 << fTop - fBottom << " re\n"; |
| 610 sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " | 611 sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " |
| 611 << fRight - fLeft - fWidth * 2 << " " | 612 << fRight - fLeft - fWidth * 2 << " " |
| 612 << fTop - fBottom - fWidth * 2 << " re\n"; | 613 << fTop - fBottom - fWidth * 2 << " re\n"; |
| 613 sAppStream << "f*\n"; | 614 sAppStream << "f*\n"; |
| 614 } | 615 } |
| 615 break; | 616 break; |
| 616 case PBS_DASH: | 617 case BorderStyle::DASH: |
| 617 sColor = GenerateColorAP(color, FALSE); | 618 sColor = GenerateColorAP(color, FALSE); |
| 618 if (sColor.GetLength() > 0) { | 619 if (sColor.GetLength() > 0) { |
| 619 sAppStream << sColor; | 620 sAppStream << sColor; |
| 620 sAppStream << fWidth << " w" | 621 sAppStream << fWidth << " w" |
| 621 << " [" << dash.nDash << " " << dash.nGap << "] " | 622 << " [" << dash.nDash << " " << dash.nGap << "] " |
| 622 << dash.nPhase << " d\n"; | 623 << dash.nPhase << " d\n"; |
| 623 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 | 624 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 |
| 624 << " m\n"; | 625 << " m\n"; |
| 625 sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 | 626 sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 |
| 626 << " l\n"; | 627 << " l\n"; |
| 627 sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 | 628 sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 |
| 628 << " l\n"; | 629 << " l\n"; |
| 629 sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 | 630 sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 |
| 630 << " l\n"; | 631 << " l\n"; |
| 631 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 | 632 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 |
| 632 << " l S\n"; | 633 << " l S\n"; |
| 633 } | 634 } |
| 634 break; | 635 break; |
| 635 case PBS_BEVELED: | 636 case BorderStyle::BEVELED: |
| 636 case PBS_INSET: | 637 case BorderStyle::INSET: |
| 637 sColor = GenerateColorAP(crLeftTop, TRUE); | 638 sColor = GenerateColorAP(crLeftTop, TRUE); |
| 638 if (sColor.GetLength() > 0) { | 639 if (sColor.GetLength() > 0) { |
| 639 sAppStream << sColor; | 640 sAppStream << sColor; |
| 640 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth | 641 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth |
| 641 << " m\n"; | 642 << " m\n"; |
| 642 sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth | 643 sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth |
| 643 << " l\n"; | 644 << " l\n"; |
| 644 sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth | 645 sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth |
| 645 << " l\n"; | 646 << " l\n"; |
| 646 sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 | 647 sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 669 sColor = GenerateColorAP(color, TRUE); | 670 sColor = GenerateColorAP(color, TRUE); |
| 670 if (sColor.GetLength() > 0) { | 671 if (sColor.GetLength() > 0) { |
| 671 sAppStream << sColor; | 672 sAppStream << sColor; |
| 672 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " | 673 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " |
| 673 << fTop - fBottom << " re\n"; | 674 << fTop - fBottom << " re\n"; |
| 674 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " | 675 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " |
| 675 << fRight - fLeft - fHalfWidth * 2 << " " | 676 << fRight - fLeft - fHalfWidth * 2 << " " |
| 676 << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; | 677 << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; |
| 677 } | 678 } |
| 678 break; | 679 break; |
| 679 case PBS_UNDERLINED: | 680 case BorderStyle::UNDERLINE: |
| 680 sColor = GenerateColorAP(color, FALSE); | 681 sColor = GenerateColorAP(color, FALSE); |
| 681 if (sColor.GetLength() > 0) { | 682 if (sColor.GetLength() > 0) { |
| 682 sAppStream << sColor; | 683 sAppStream << sColor; |
| 683 sAppStream << fWidth << " w\n"; | 684 sAppStream << fWidth << " w\n"; |
| 684 sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; | 685 sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; |
| 685 sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; | 686 sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; |
| 686 } | 687 } |
| 687 break; | 688 break; |
| 688 } | 689 } |
| 689 } | 690 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 int32_t nFontIndex, | 756 int32_t nFontIndex, |
| 756 FX_FLOAT fFontSize) { | 757 FX_FLOAT fFontSize) { |
| 757 CFX_ByteTextBuf sRet; | 758 CFX_ByteTextBuf sRet; |
| 758 if (pFontMap) { | 759 if (pFontMap) { |
| 759 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); | 760 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); |
| 760 if (sFontAlias.GetLength() > 0 && fFontSize > 0) | 761 if (sFontAlias.GetLength() > 0 && fFontSize > 0) |
| 761 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; | 762 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; |
| 762 } | 763 } |
| 763 return sRet.MakeString(); | 764 return sRet.MakeString(); |
| 764 } | 765 } |
| OLD | NEW |