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/fpdfapi/fpdf_page/cpdf_allstates.h" | 7 #include "core/fpdfapi/fpdf_page/cpdf_allstates.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_page/pageint.h" | 9 #include "core/fpdfapi/fpdf_page/pageint.h" |
10 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 } | 43 } |
44 | 44 |
45 void CPDF_AllStates::SetLineDash(CPDF_Array* pArray, | 45 void CPDF_AllStates::SetLineDash(CPDF_Array* pArray, |
46 FX_FLOAT phase, | 46 FX_FLOAT phase, |
47 FX_FLOAT scale) { | 47 FX_FLOAT scale) { |
48 m_GraphState.SetLineDash(pArray, phase, scale); | 48 m_GraphState.SetLineDash(pArray, phase, scale); |
49 } | 49 } |
50 | 50 |
51 void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, | 51 void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, |
52 CPDF_StreamContentParser* pParser) { | 52 CPDF_StreamContentParser* pParser) { |
53 CPDF_GeneralStateData* pGeneralState = m_GeneralState.GetPrivateCopy(); | |
54 for (const auto& it : *pGS) { | 53 for (const auto& it : *pGS) { |
55 const CFX_ByteString& key_str = it.first; | 54 const CFX_ByteString& key_str = it.first; |
56 CPDF_Object* pElement = it.second; | 55 CPDF_Object* pElement = it.second; |
57 CPDF_Object* pObject = pElement ? pElement->GetDirect() : nullptr; | 56 CPDF_Object* pObject = pElement ? pElement->GetDirect() : nullptr; |
58 if (!pObject) | 57 if (!pObject) |
59 continue; | 58 continue; |
60 | 59 |
61 uint32_t key = key_str.GetID(); | 60 uint32_t key = key_str.GetID(); |
62 switch (key) { | 61 switch (key) { |
63 case FXBSTR_ID('L', 'W', 0, 0): | 62 case FXBSTR_ID('L', 'W', 0, 0): |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 95 |
97 m_TextState.SetFontSize(pFont->GetNumberAt(1)); | 96 m_TextState.SetFontSize(pFont->GetNumberAt(1)); |
98 m_TextState.SetFont(pParser->FindFont(pFont->GetStringAt(0))); | 97 m_TextState.SetFont(pParser->FindFont(pFont->GetStringAt(0))); |
99 break; | 98 break; |
100 } | 99 } |
101 case FXBSTR_ID('T', 'R', 0, 0): | 100 case FXBSTR_ID('T', 'R', 0, 0): |
102 if (pGS->KeyExist("TR2")) { | 101 if (pGS->KeyExist("TR2")) { |
103 continue; | 102 continue; |
104 } | 103 } |
105 case FXBSTR_ID('T', 'R', '2', 0): | 104 case FXBSTR_ID('T', 'R', '2', 0): |
106 pGeneralState->m_pTR = | 105 m_GeneralState.SetTR(pObject && !pObject->IsName() ? pObject : nullptr); |
107 (pObject && !pObject->IsName()) ? pObject : nullptr; | |
108 break; | 106 break; |
109 case FXBSTR_ID('B', 'M', 0, 0): { | 107 case FXBSTR_ID('B', 'M', 0, 0): { |
110 CPDF_Array* pArray = pObject->AsArray(); | 108 CPDF_Array* pArray = pObject->AsArray(); |
111 CFX_ByteString mode = | 109 CFX_ByteString mode = |
112 pArray ? pArray->GetStringAt(0) : pObject->GetString(); | 110 pArray ? pArray->GetStringAt(0) : pObject->GetString(); |
113 | 111 |
114 pGeneralState->SetBlendMode(mode.AsStringC()); | 112 m_GeneralState.SetBlendMode(mode.AsStringC()); |
115 if (pGeneralState->m_BlendType > FXDIB_BLEND_MULTIPLY) { | 113 if (m_GeneralState.GetBlendType() > FXDIB_BLEND_MULTIPLY) |
116 pParser->GetPageObjectHolder()->SetBackgroundAlphaNeeded(TRUE); | 114 pParser->GetPageObjectHolder()->SetBackgroundAlphaNeeded(TRUE); |
117 } | |
118 break; | 115 break; |
119 } | 116 } |
120 case FXBSTR_ID('S', 'M', 'a', 's'): | 117 case FXBSTR_ID('S', 'M', 'a', 's'): |
121 if (ToDictionary(pObject)) { | 118 if (ToDictionary(pObject)) { |
122 pGeneralState->m_pSoftMask = pObject; | 119 m_GeneralState.SetSoftMask(pObject); |
123 FXSYS_memcpy(pGeneralState->m_SMaskMatrix, | 120 FXSYS_memcpy(m_GeneralState.GetMutableSMaskMatrix(), |
124 &pParser->GetCurStates()->m_CTM, sizeof(CFX_Matrix)); | 121 &pParser->GetCurStates()->m_CTM, sizeof(CFX_Matrix)); |
125 } else { | 122 } else { |
126 pGeneralState->m_pSoftMask = nullptr; | 123 m_GeneralState.SetSoftMask(nullptr); |
127 } | 124 } |
128 break; | 125 break; |
129 case FXBSTR_ID('C', 'A', 0, 0): | 126 case FXBSTR_ID('C', 'A', 0, 0): |
130 pGeneralState->m_StrokeAlpha = ClipFloat(pObject->GetNumber()); | 127 m_GeneralState.SetStrokeAlpha(ClipFloat(pObject->GetNumber())); |
131 break; | 128 break; |
132 case FXBSTR_ID('c', 'a', 0, 0): | 129 case FXBSTR_ID('c', 'a', 0, 0): |
133 pGeneralState->m_FillAlpha = ClipFloat(pObject->GetNumber()); | 130 m_GeneralState.SetFillAlpha(ClipFloat(pObject->GetNumber())); |
134 break; | 131 break; |
135 case FXBSTR_ID('O', 'P', 0, 0): | 132 case FXBSTR_ID('O', 'P', 0, 0): |
136 pGeneralState->m_StrokeOP = pObject->GetInteger(); | 133 m_GeneralState.SetStrokeOP(!!pObject->GetInteger()); |
137 if (!pGS->KeyExist("op")) { | 134 if (!pGS->KeyExist("op")) |
138 pGeneralState->m_FillOP = pObject->GetInteger(); | 135 m_GeneralState.SetFillOP(!!pObject->GetInteger()); |
139 } | |
140 break; | 136 break; |
141 case FXBSTR_ID('o', 'p', 0, 0): | 137 case FXBSTR_ID('o', 'p', 0, 0): |
142 pGeneralState->m_FillOP = pObject->GetInteger(); | 138 m_GeneralState.SetFillOP(!!pObject->GetInteger()); |
143 break; | 139 break; |
144 case FXBSTR_ID('O', 'P', 'M', 0): | 140 case FXBSTR_ID('O', 'P', 'M', 0): |
145 pGeneralState->m_OPMode = pObject->GetInteger(); | 141 m_GeneralState.SetOPMode(pObject->GetInteger()); |
146 break; | 142 break; |
147 case FXBSTR_ID('B', 'G', 0, 0): | 143 case FXBSTR_ID('B', 'G', 0, 0): |
148 if (pGS->KeyExist("BG2")) { | 144 if (pGS->KeyExist("BG2")) { |
149 continue; | 145 continue; |
150 } | 146 } |
151 case FXBSTR_ID('B', 'G', '2', 0): | 147 case FXBSTR_ID('B', 'G', '2', 0): |
152 pGeneralState->m_pBG = pObject; | 148 m_GeneralState.SetBG(pObject); |
153 break; | 149 break; |
154 case FXBSTR_ID('U', 'C', 'R', 0): | 150 case FXBSTR_ID('U', 'C', 'R', 0): |
155 if (pGS->KeyExist("UCR2")) { | 151 if (pGS->KeyExist("UCR2")) { |
156 continue; | 152 continue; |
157 } | 153 } |
158 case FXBSTR_ID('U', 'C', 'R', '2'): | 154 case FXBSTR_ID('U', 'C', 'R', '2'): |
159 pGeneralState->m_pUCR = pObject; | 155 m_GeneralState.SetUCR(pObject); |
160 break; | 156 break; |
161 case FXBSTR_ID('H', 'T', 0, 0): | 157 case FXBSTR_ID('H', 'T', 0, 0): |
162 pGeneralState->m_pHT = pObject; | 158 m_GeneralState.SetHT(pObject); |
163 break; | 159 break; |
164 case FXBSTR_ID('F', 'L', 0, 0): | 160 case FXBSTR_ID('F', 'L', 0, 0): |
165 pGeneralState->m_Flatness = pObject->GetNumber(); | 161 m_GeneralState.SetFlatness(pObject->GetNumber()); |
166 break; | 162 break; |
167 case FXBSTR_ID('S', 'M', 0, 0): | 163 case FXBSTR_ID('S', 'M', 0, 0): |
168 pGeneralState->m_Smoothness = pObject->GetNumber(); | 164 m_GeneralState.SetSmoothness(pObject->GetNumber()); |
169 break; | 165 break; |
170 case FXBSTR_ID('S', 'A', 0, 0): | 166 case FXBSTR_ID('S', 'A', 0, 0): |
171 pGeneralState->m_StrokeAdjust = pObject->GetInteger(); | 167 m_GeneralState.SetStrokeAdjust(!!pObject->GetInteger()); |
172 break; | 168 break; |
173 case FXBSTR_ID('A', 'I', 'S', 0): | 169 case FXBSTR_ID('A', 'I', 'S', 0): |
174 pGeneralState->m_AlphaSource = pObject->GetInteger(); | 170 m_GeneralState.SetAlphaSource(!!pObject->GetInteger()); |
175 break; | 171 break; |
176 case FXBSTR_ID('T', 'K', 0, 0): | 172 case FXBSTR_ID('T', 'K', 0, 0): |
177 pGeneralState->m_TextKnockout = pObject->GetInteger(); | 173 m_GeneralState.SetTextKnockout(!!pObject->GetInteger()); |
178 break; | 174 break; |
179 } | 175 } |
180 } | 176 } |
181 pGeneralState->m_Matrix = m_CTM; | 177 m_GeneralState.SetMatrix(m_CTM); |
182 } | 178 } |
OLD | NEW |