Chromium Code Reviews| 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(), |
|
Lei Zhang
2016/09/02 22:00:43
Do you know why |m_SMaskMatrix| isn't just a CFX_M
Tom Sepez
2016/09/02 22:09:57
Beats me.
| |
| 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 |