| 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/include/cpdf_textobject.h" |    7 #include "core/fpdfapi/fpdf_page/include/cpdf_textobject.h" | 
|    8  |    8  | 
|    9 #include "core/fpdfapi/fpdf_font/cpdf_cidfont.h" |    9 #include "core/fpdfapi/fpdf_font/cpdf_cidfont.h" | 
|   10 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |   10 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  135                                   int nsegs) { |  135                                   int nsegs) { | 
|  136   if (m_nChars > 1) { |  136   if (m_nChars > 1) { | 
|  137     FX_Free(m_pCharCodes); |  137     FX_Free(m_pCharCodes); | 
|  138     m_pCharCodes = nullptr; |  138     m_pCharCodes = nullptr; | 
|  139   } |  139   } | 
|  140   FX_Free(m_pCharPos); |  140   FX_Free(m_pCharPos); | 
|  141   m_pCharPos = nullptr; |  141   m_pCharPos = nullptr; | 
|  142   CPDF_Font* pFont = m_TextState.GetFont(); |  142   CPDF_Font* pFont = m_TextState.GetFont(); | 
|  143   m_nChars = 0; |  143   m_nChars = 0; | 
|  144   for (int i = 0; i < nsegs; ++i) { |  144   for (int i = 0; i < nsegs; ++i) { | 
|  145     m_nChars += pFont->CountChar(pStrs[i], pStrs[i].GetLength()); |  145     m_nChars += pFont->CountChar(pStrs[i].c_str(), pStrs[i].GetLength()); | 
|  146   } |  146   } | 
|  147   m_nChars += nsegs - 1; |  147   m_nChars += nsegs - 1; | 
|  148   if (m_nChars > 1) { |  148   if (m_nChars > 1) { | 
|  149     m_pCharCodes = FX_Alloc(uint32_t, m_nChars); |  149     m_pCharCodes = FX_Alloc(uint32_t, m_nChars); | 
|  150     m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1); |  150     m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1); | 
|  151     int index = 0; |  151     int index = 0; | 
|  152     for (int i = 0; i < nsegs; ++i) { |  152     for (int i = 0; i < nsegs; ++i) { | 
|  153       const FX_CHAR* segment = pStrs[i]; |  153       const FX_CHAR* segment = pStrs[i].c_str(); | 
|  154       int offset = 0, len = pStrs[i].GetLength(); |  154       int len = pStrs[i].GetLength(); | 
 |  155       int offset = 0; | 
|  155       while (offset < len) { |  156       while (offset < len) { | 
|  156         m_pCharCodes[index++] = pFont->GetNextChar(segment, len, offset); |  157         m_pCharCodes[index++] = pFont->GetNextChar(segment, len, offset); | 
|  157       } |  158       } | 
|  158       if (i != nsegs - 1) { |  159       if (i != nsegs - 1) { | 
|  159         m_pCharPos[index - 1] = pKerning[i]; |  160         m_pCharPos[index - 1] = pKerning[i]; | 
|  160         m_pCharCodes[index++] = CPDF_Font::kInvalidCharCode; |  161         m_pCharCodes[index++] = CPDF_Font::kInvalidCharCode; | 
|  161       } |  162       } | 
|  162     } |  163     } | 
|  163   } else { |  164   } else { | 
|  164     int offset = 0; |  165     int offset = 0; | 
|  165     m_pCharCodes = (uint32_t*)(uintptr_t)pFont->GetNextChar( |  166     m_pCharCodes = (uint32_t*)(uintptr_t)pFont->GetNextChar( | 
|  166         pStrs[0], pStrs[0].GetLength(), offset); |  167         pStrs[0].c_str(), pStrs[0].GetLength(), offset); | 
|  167   } |  168   } | 
|  168 } |  169 } | 
|  169  |  170  | 
|  170 void CPDF_TextObject::SetText(const CFX_ByteString& str) { |  171 void CPDF_TextObject::SetText(const CFX_ByteString& str) { | 
|  171   SetSegments(&str, nullptr, 1); |  172   SetSegments(&str, nullptr, 1); | 
|  172   RecalcPositionData(); |  173   RecalcPositionData(); | 
|  173 } |  174 } | 
|  174  |  175  | 
|  175 FX_FLOAT CPDF_TextObject::GetCharWidth(uint32_t charcode) const { |  176 FX_FLOAT CPDF_TextObject::GetCharWidth(uint32_t charcode) const { | 
|  176   FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000; |  177   FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000; | 
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  340 void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y) { |  341 void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y) { | 
|  341   FX_FLOAT dx = x - m_PosX; |  342   FX_FLOAT dx = x - m_PosX; | 
|  342   FX_FLOAT dy = y - m_PosY; |  343   FX_FLOAT dy = y - m_PosY; | 
|  343   m_PosX = x; |  344   m_PosX = x; | 
|  344   m_PosY = y; |  345   m_PosY = y; | 
|  345   m_Left += dx; |  346   m_Left += dx; | 
|  346   m_Right += dx; |  347   m_Right += dx; | 
|  347   m_Top += dy; |  348   m_Top += dy; | 
|  348   m_Bottom += dy; |  349   m_Bottom += dy; | 
|  349 } |  350 } | 
| OLD | NEW |