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 |