| Index: core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
 | 
| diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
 | 
| index 8cfa8dc4fbc2f83d92391a93de59917f9b4d1f98..47876a2280223f8270b6615db95621d50a5876be 100644
 | 
| --- a/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
 | 
| +++ b/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
 | 
| @@ -18,7 +18,7 @@ CPDF_Type3Cache::~CPDF_Type3Cache() {
 | 
|    m_SizeMap.clear();
 | 
|  }
 | 
|  CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(FX_DWORD charcode,
 | 
| -                                            const CFX_AffineMatrix* pMatrix,
 | 
| +                                            const CFX_Matrix* pMatrix,
 | 
|                                              FX_FLOAT retinaScaleX,
 | 
|                                              FX_FLOAT retinaScaleY) {
 | 
|    _CPDF_UniqueKeyGen keygen;
 | 
| @@ -126,7 +126,7 @@ static int _DetectFirstLastScan(const CFX_DIBitmap* pBitmap, FX_BOOL bFirst) {
 | 
|  }
 | 
|  CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize,
 | 
|                                                FX_DWORD charcode,
 | 
| -                                              const CFX_AffineMatrix* pMatrix,
 | 
| +                                              const CFX_Matrix* pMatrix,
 | 
|                                                FX_FLOAT retinaScaleX,
 | 
|                                                FX_FLOAT retinaScaleY) {
 | 
|    const CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode);
 | 
| @@ -134,7 +134,7 @@ CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize,
 | 
|      return nullptr;
 | 
|  
 | 
|    CFX_DIBitmap* pBitmap = pChar->m_pBitmap;
 | 
| -  CFX_AffineMatrix image_matrix, text_matrix;
 | 
| +  CFX_Matrix image_matrix, text_matrix;
 | 
|    image_matrix = pChar->m_ImageMatrix;
 | 
|    text_matrix.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d, 0, 0);
 | 
|    image_matrix.Concat(text_matrix);
 | 
| @@ -194,7 +194,7 @@ void _CPDF_UniqueKeyGen::Generate(int count, ...) {
 | 
|    m_KeyLen = count * sizeof(FX_DWORD);
 | 
|  }
 | 
|  FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj,
 | 
| -                                       const CFX_AffineMatrix* pObj2Device,
 | 
| +                                       const CFX_Matrix* pObj2Device,
 | 
|                                         CFX_PathData* pClippingPath) {
 | 
|    if (textobj->m_nChars == 0) {
 | 
|      return TRUE;
 | 
| @@ -257,7 +257,7 @@ FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj,
 | 
|        fill_argb = GetFillArgb(textobj);
 | 
|      }
 | 
|    }
 | 
| -  CFX_AffineMatrix text_matrix;
 | 
| +  CFX_Matrix text_matrix;
 | 
|    textobj->GetTextMatrix(&text_matrix);
 | 
|    if (IsAvailableMatrix(text_matrix) == FALSE) {
 | 
|      return TRUE;
 | 
| @@ -269,12 +269,12 @@ FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj,
 | 
|      return TRUE;
 | 
|    }
 | 
|    if (bClip || bStroke) {
 | 
| -    const CFX_AffineMatrix* pDeviceMatrix = pObj2Device;
 | 
| -    CFX_AffineMatrix device_matrix;
 | 
| +    const CFX_Matrix* pDeviceMatrix = pObj2Device;
 | 
| +    CFX_Matrix device_matrix;
 | 
|      if (bStroke) {
 | 
|        const FX_FLOAT* pCTM = textobj->m_TextState.GetObject()->m_CTM;
 | 
|        if (pCTM[0] != 1.0f || pCTM[3] != 1.0f) {
 | 
| -        CFX_AffineMatrix ctm(pCTM[0], pCTM[1], pCTM[2], pCTM[3], 0, 0);
 | 
| +        CFX_Matrix ctm(pCTM[0], pCTM[1], pCTM[2], pCTM[3], 0, 0);
 | 
|          text_matrix.ConcatInverse(ctm);
 | 
|          device_matrix.Copy(ctm);
 | 
|          device_matrix.Concat(*pObj2Device);
 | 
| @@ -354,9 +354,8 @@ class CPDF_RefType3Cache {
 | 
|    FX_DWORD m_dwCount;
 | 
|    CPDF_Type3Font* m_pType3Font;
 | 
|  };
 | 
| -FX_BOOL CPDF_RenderStatus::ProcessType3Text(
 | 
| -    const CPDF_TextObject* textobj,
 | 
| -    const CFX_AffineMatrix* pObj2Device) {
 | 
| +FX_BOOL CPDF_RenderStatus::ProcessType3Text(const CPDF_TextObject* textobj,
 | 
| +                                            const CFX_Matrix* pObj2Device) {
 | 
|    CPDF_Type3Font* pType3Font = textobj->m_TextState.GetFont()->GetType3Font();
 | 
|    for (int j = 0; j < m_Type3FontCache.GetSize(); j++) {
 | 
|      if (m_Type3FontCache.GetAt(j) == pType3Font)
 | 
| @@ -365,9 +364,9 @@ FX_BOOL CPDF_RenderStatus::ProcessType3Text(
 | 
|    CFX_Matrix dCTM = m_pDevice->GetCTM();
 | 
|    FX_FLOAT sa = FXSYS_fabs(dCTM.a);
 | 
|    FX_FLOAT sd = FXSYS_fabs(dCTM.d);
 | 
| -  CFX_AffineMatrix text_matrix;
 | 
| +  CFX_Matrix text_matrix;
 | 
|    textobj->GetTextMatrix(&text_matrix);
 | 
| -  CFX_AffineMatrix char_matrix = pType3Font->GetFontMatrix();
 | 
| +  CFX_Matrix char_matrix = pType3Font->GetFontMatrix();
 | 
|    FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
 | 
|    char_matrix.Scale(font_size, font_size);
 | 
|    FX_ARGB fill_argb = GetFillArgb(textobj, TRUE);
 | 
| @@ -393,7 +392,7 @@ FX_BOOL CPDF_RenderStatus::ProcessType3Text(
 | 
|      if (pType3Char == NULL) {
 | 
|        continue;
 | 
|      }
 | 
| -    CFX_AffineMatrix matrix = char_matrix;
 | 
| +    CFX_Matrix matrix = char_matrix;
 | 
|      matrix.e += iChar ? textobj->m_pCharPos[iChar - 1] : 0;
 | 
|      matrix.Concat(text_matrix);
 | 
|      matrix.Concat(*pObj2Device);
 | 
| @@ -474,7 +473,7 @@ FX_BOOL CPDF_RenderStatus::ProcessType3Text(
 | 
|                                  origin_y - pBitmap->m_Top, fill_argb);
 | 
|          }
 | 
|        } else {
 | 
| -        CFX_AffineMatrix image_matrix = pType3Char->m_ImageMatrix;
 | 
| +        CFX_Matrix image_matrix = pType3Char->m_ImageMatrix;
 | 
|          image_matrix.Concat(matrix);
 | 
|          CPDF_ImageRenderer renderer;
 | 
|          if (renderer.Start(this, pType3Char->m_pBitmap, fill_argb, 255,
 | 
| @@ -597,8 +596,8 @@ FX_BOOL CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice,
 | 
|                                          FX_FLOAT* pCharPos,
 | 
|                                          CPDF_Font* pFont,
 | 
|                                          FX_FLOAT font_size,
 | 
| -                                        const CFX_AffineMatrix* pText2User,
 | 
| -                                        const CFX_AffineMatrix* pUser2Device,
 | 
| +                                        const CFX_Matrix* pText2User,
 | 
| +                                        const CFX_Matrix* pUser2Device,
 | 
|                                          const CFX_GraphStateData* pGraphState,
 | 
|                                          FX_ARGB fill_argb,
 | 
|                                          FX_ARGB stroke_argb,
 | 
| @@ -628,7 +627,7 @@ void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice,
 | 
|    FX_FLOAT origin_x = (FX_FLOAT)left;
 | 
|    FX_FLOAT origin_y =
 | 
|        (FX_FLOAT)top + font_size * (FX_FLOAT)font_bbox.top / 1000.0f;
 | 
| -  CFX_AffineMatrix matrix(1.0f, 0, 0, -1.0f, 0, 0);
 | 
| +  CFX_Matrix matrix(1.0f, 0, 0, -1.0f, 0, 0);
 | 
|    DrawTextString(pDevice, origin_x, origin_y, pFont, font_size, &matrix, str,
 | 
|                   argb);
 | 
|  }
 | 
| @@ -637,7 +636,7 @@ void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice,
 | 
|                                         FX_FLOAT origin_y,
 | 
|                                         CPDF_Font* pFont,
 | 
|                                         FX_FLOAT font_size,
 | 
| -                                       const CFX_AffineMatrix* pMatrix,
 | 
| +                                       const CFX_Matrix* pMatrix,
 | 
|                                         const CFX_ByteString& str,
 | 
|                                         FX_ARGB fill_argb,
 | 
|                                         FX_ARGB stroke_argb,
 | 
| @@ -667,7 +666,7 @@ void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice,
 | 
|        cur_pos += pFont->GetCharWidthF(pCharCodes[i]) * font_size / 1000;
 | 
|      }
 | 
|    }
 | 
| -  CFX_AffineMatrix matrix;
 | 
| +  CFX_Matrix matrix;
 | 
|    if (pMatrix) {
 | 
|      matrix = *pMatrix;
 | 
|    }
 | 
| @@ -692,7 +691,7 @@ FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice,
 | 
|                                            FX_FLOAT* pCharPos,
 | 
|                                            CPDF_Font* pFont,
 | 
|                                            FX_FLOAT font_size,
 | 
| -                                          const CFX_AffineMatrix* pText2Device,
 | 
| +                                          const CFX_Matrix* pText2Device,
 | 
|                                            FX_ARGB fill_argb,
 | 
|                                            const CPDF_RenderOptions* pOptions) {
 | 
|    CFX_FontCache* pCache =
 | 
| @@ -731,14 +730,13 @@ FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice,
 | 
|                                   &pFont->m_Font, pCache, font_size,
 | 
|                                   pText2Device, fill_argb, FXGE_flags);
 | 
|  }
 | 
| -void CPDF_RenderStatus::DrawTextPathWithPattern(
 | 
| -    const CPDF_TextObject* textobj,
 | 
| -    const CFX_AffineMatrix* pObj2Device,
 | 
| -    CPDF_Font* pFont,
 | 
| -    FX_FLOAT font_size,
 | 
| -    const CFX_AffineMatrix* pTextMatrix,
 | 
| -    FX_BOOL bFill,
 | 
| -    FX_BOOL bStroke) {
 | 
| +void CPDF_RenderStatus::DrawTextPathWithPattern(const CPDF_TextObject* textobj,
 | 
| +                                                const CFX_Matrix* pObj2Device,
 | 
| +                                                CPDF_Font* pFont,
 | 
| +                                                FX_FLOAT font_size,
 | 
| +                                                const CFX_Matrix* pTextMatrix,
 | 
| +                                                FX_BOOL bFill,
 | 
| +                                                FX_BOOL bStroke) {
 | 
|    if (!bStroke) {
 | 
|      CPDF_PathObject path;
 | 
|      CPDF_TextObject* pCopy = new CPDF_TextObject;
 | 
| @@ -777,7 +775,7 @@ void CPDF_RenderStatus::DrawTextPathWithPattern(
 | 
|      CPDF_PathObject path;
 | 
|      path.m_GraphState = textobj->m_GraphState;
 | 
|      path.m_ColorState = textobj->m_ColorState;
 | 
| -    CFX_AffineMatrix matrix;
 | 
| +    CFX_Matrix matrix;
 | 
|      if (charpos.m_bGlyphAdjust)
 | 
|        matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
 | 
|                   charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
 | 
| 
 |