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 "../../../include/fpdfapi/fpdf_render.h" | 7 #include "../../../include/fpdfapi/fpdf_render.h" |
8 #include "../../../include/fpdfapi/fpdf_pageobj.h" | 8 #include "../../../include/fpdfapi/fpdf_pageobj.h" |
9 #include "../../../include/fxge/fx_ge.h" | 9 #include "../../../include/fxge/fx_ge.h" |
10 #include "../fpdf_page/pageint.h" | 10 #include "../fpdf_page/pageint.h" |
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
658 left *= 2; | 658 left *= 2; |
659 bottom *= 2; | 659 bottom *= 2; |
660 Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f, D1.fi rst_half(), m2f); | 660 Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f, D1.fi rst_half(), m2f); |
661 Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(), D 1.second_half(), m2s); | 661 Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(), D 1.second_half(), m2s); |
662 Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f, D2.first_half()); | 662 Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f, D2.first_half()); |
663 Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half (), m2s, D2.second_half()); | 663 Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half (), m2s, D2.second_half()); |
664 } | 664 } |
665 } | 665 } |
666 } | 666 } |
667 }; | 667 }; |
668 | |
669 static FX_BOOL _CheckCoonTensorPara(CPDF_MeshStream& stream) | |
Tom Sepez
2014/07/22 17:28:51
nit: const CPDF_MeshStream&
| |
670 { | |
671 FX_BOOL bCoorBits = ( stream.m_nCoordBits == 1 || | |
672 stream.m_nCoordBits == 2 || | |
673 stream.m_nCoordBits == 4 || | |
674 stream.m_nCoordBits == 8 || | |
675 stream.m_nCoordBits == 12 || | |
676 stream.m_nCoordBits == 16 || | |
677 stream.m_nCoordBits == 24 || | |
678 stream.m_nCoordBits == 32 ); | |
679 | |
680 FX_BOOL bCompBits = ( stream.m_nCompBits == 1 || | |
681 stream.m_nCompBits == 2 || | |
682 stream.m_nCompBits == 4 || | |
683 stream.m_nCompBits == 8 || | |
684 stream.m_nCompBits == 12 || | |
685 stream.m_nCompBits == 16 ); | |
686 | |
687 FX_BOOL bFlagBits = ( stream.m_nFlagBits == 2 || | |
688 stream.m_nFlagBits == 4 || | |
689 stream.m_nFlagBits == 8 ); | |
690 | |
691 return bCoorBits && bCompBits && bFlagBits; | |
692 } | |
693 | |
668 static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_Aff ineMatrix* pObject2Bitmap, | 694 static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_Aff ineMatrix* pObject2Bitmap, |
669 CPDF_Stream* pShadingStream, CPDF_Function** pF uncs, int nFuncs, | 695 CPDF_Stream* pShadingStream, CPDF_Function** pF uncs, int nFuncs, |
670 CPDF_ColorSpace* pCS, int fill_mode, int alpha) | 696 CPDF_ColorSpace* pCS, int fill_mode, int alpha) |
671 { | 697 { |
672 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); | 698 ASSERT(pBitmap->GetFormat() == FXDIB_Argb); |
673 if (pShadingStream->GetType() != PDFOBJ_STREAM) { | 699 if (pShadingStream->GetType() != PDFOBJ_STREAM) { |
674 return; | 700 return; |
675 } | 701 } |
676 CFX_FxgeDevice device; | 702 CFX_FxgeDevice device; |
677 device.Attach(pBitmap); | 703 device.Attach(pBitmap); |
678 CPDF_MeshStream stream; | 704 CPDF_MeshStream stream; |
679 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) { | 705 if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) { |
680 return; | 706 return; |
681 } | 707 } |
708 if (!_CheckCoonTensorPara(stream)){ | |
Tom Sepez
2014/07/22 17:27:21
nit: space before { to match existing style in fil
| |
709 return; | |
710 } | |
682 CPDF_PatchDrawer patch; | 711 CPDF_PatchDrawer patch; |
683 patch.alpha = alpha; | 712 patch.alpha = alpha; |
684 patch.pDevice = &device; | 713 patch.pDevice = &device; |
685 patch.fill_mode = fill_mode; | 714 patch.fill_mode = fill_mode; |
686 patch.path.SetPointCount(13); | 715 patch.path.SetPointCount(13); |
687 FX_PATHPOINT* pPoints = patch.path.GetPoints(); | 716 FX_PATHPOINT* pPoints = patch.path.GetPoints(); |
688 pPoints[0].m_Flag = FXPT_MOVETO; | 717 pPoints[0].m_Flag = FXPT_MOVETO; |
689 for (int i = 1; i < 13; i ++) { | 718 for (int i = 1; i < 13; i ++) { |
690 pPoints[i].m_Flag = FXPT_BEZIERTO; | 719 pPoints[i].m_Flag = FXPT_BEZIERTO; |
691 } | 720 } |
692 CFX_FloatPoint coords[16]; | 721 CFX_FloatPoint coords[16]; |
693 for (int i = 0; i < 16; i ++) | 722 for (int i = 0; i < 16; i ++){ |
Tom Sepez
2014/07/22 17:27:21
nit: space before { to match existing style in fil
| |
694 { | |
695 coords[i].Set(0.0f, 0.0f); | 723 coords[i].Set(0.0f, 0.0f); |
696 } | 724 } |
697 | 725 |
698 int point_count = bTensor ? 16 : 12; | 726 int point_count = bTensor ? 16 : 12; |
699 while (!stream.m_BitStream.IsEOF()) { | 727 while (!stream.m_BitStream.IsEOF()) { |
700 FX_DWORD flag = stream.GetFlag(); | 728 FX_DWORD flag = stream.GetFlag(); |
701 int iStartPoint = 0, iStartColor = 0, i; | 729 int iStartPoint = 0, iStartColor = 0, i = 0; |
Tom Sepez
2014/07/22 17:27:21
nit: initialized value isn't used. reset to 0 in
| |
702 if (flag) { | 730 if (flag) { |
703 iStartPoint = 4; | 731 iStartPoint = 4; |
704 iStartColor = 2; | 732 iStartColor = 2; |
705 CFX_FloatPoint tempCoords[4]; | 733 CFX_FloatPoint tempCoords[4]; |
706 for (int i = 0; i < 4; i ++) { | 734 for (i = 0; i < 4; i ++) { |
707 tempCoords[i] = coords[(flag * 3 + i) % 12]; | 735 tempCoords[i] = coords[(flag * 3 + i) % 12]; |
708 } | 736 } |
709 FXSYS_memcpy32(coords, tempCoords, sizeof(CFX_FloatPoint) * 4); | 737 FXSYS_memcpy32(coords, tempCoords, sizeof(CFX_FloatPoint) * 4); |
710 Coon_Color tempColors[2]; | 738 Coon_Color tempColors[2]; |
711 tempColors[0] = patch.patch_colors[flag]; | 739 tempColors[0] = patch.patch_colors[flag]; |
712 tempColors[1] = patch.patch_colors[(flag + 1) % 4]; | 740 tempColors[1] = patch.patch_colors[(flag + 1) % 4]; |
713 FXSYS_memcpy32(patch.patch_colors, tempColors, sizeof(Coon_Color) * 2); | 741 FXSYS_memcpy32(patch.patch_colors, tempColors, sizeof(Coon_Color) * 2); |
714 } | 742 } |
715 for (i = iStartPoint; i < point_count; i ++) { | 743 for (i = iStartPoint; i < point_count; i ++) { |
716 stream.GetCoords(coords[i].x, coords[i].y); | 744 stream.GetCoords(coords[i].x, coords[i].y); |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1091 bStroke = FALSE; | 1119 bStroke = FALSE; |
1092 bPattern = TRUE; | 1120 bPattern = TRUE; |
1093 } | 1121 } |
1094 } | 1122 } |
1095 #ifdef _FPDFAPI_MINI_ | 1123 #ifdef _FPDFAPI_MINI_ |
1096 if (bPattern && m_DitherBits) { | 1124 if (bPattern && m_DitherBits) { |
1097 DitherObjectArea(pPathObj, pObj2Device); | 1125 DitherObjectArea(pPathObj, pObj2Device); |
1098 } | 1126 } |
1099 #endif | 1127 #endif |
1100 } | 1128 } |
OLD | NEW |