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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 obj->m_PosX = m_PosX; | 126 obj->m_PosX = m_PosX; |
127 obj->m_PosY = m_PosY; | 127 obj->m_PosY = m_PosY; |
128 return obj; | 128 return obj; |
129 } | 129 } |
130 | 130 |
131 CPDF_PageObject::Type CPDF_TextObject::GetType() const { | 131 CPDF_PageObject::Type CPDF_TextObject::GetType() const { |
132 return TEXT; | 132 return TEXT; |
133 } | 133 } |
134 | 134 |
135 void CPDF_TextObject::Transform(const CFX_Matrix& matrix) { | 135 void CPDF_TextObject::Transform(const CFX_Matrix& matrix) { |
136 m_TextState.GetPrivateCopy(); | 136 m_TextState.MakePrivateCopy(); |
137 CFX_Matrix text_matrix; | 137 CFX_Matrix text_matrix; |
138 GetTextMatrix(&text_matrix); | 138 GetTextMatrix(&text_matrix); |
139 text_matrix.Concat(matrix); | 139 text_matrix.Concat(matrix); |
140 FX_FLOAT* pTextMatrix = m_TextState.GetMatrix(); | 140 FX_FLOAT* pTextMatrix = m_TextState.GetMatrix(); |
141 pTextMatrix[0] = text_matrix.GetA(); | 141 pTextMatrix[0] = text_matrix.GetA(); |
142 pTextMatrix[1] = text_matrix.GetC(); | 142 pTextMatrix[1] = text_matrix.GetC(); |
143 pTextMatrix[2] = text_matrix.GetB(); | 143 pTextMatrix[2] = text_matrix.GetB(); |
144 pTextMatrix[3] = text_matrix.GetD(); | 144 pTextMatrix[3] = text_matrix.GetD(); |
145 m_PosX = text_matrix.GetE(); | 145 m_PosX = text_matrix.GetE(); |
146 m_PosY = text_matrix.GetF(); | 146 m_PosY = text_matrix.GetF(); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 if (min_y > char_bottom) { | 327 if (min_y > char_bottom) { |
328 min_y = char_bottom; | 328 min_y = char_bottom; |
329 } | 329 } |
330 if (max_y < char_bottom) { | 330 if (max_y < char_bottom) { |
331 max_y = char_bottom; | 331 max_y = char_bottom; |
332 } | 332 } |
333 charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000; | 333 charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000; |
334 } | 334 } |
335 curpos += charwidth; | 335 curpos += charwidth; |
336 if (charcode == ' ' && (!pCIDFont || pCIDFont->GetCharSize(32) == 1)) { | 336 if (charcode == ' ' && (!pCIDFont || pCIDFont->GetCharSize(32) == 1)) { |
337 curpos += m_TextState.GetObject()->m_WordSpace; | 337 curpos += m_TextState->m_WordSpace; |
338 } | 338 } |
339 curpos += m_TextState.GetObject()->m_CharSpace; | 339 curpos += m_TextState->m_CharSpace; |
340 } | 340 } |
341 if (bVertWriting) { | 341 if (bVertWriting) { |
342 if (pTextAdvanceX) { | 342 if (pTextAdvanceX) { |
343 *pTextAdvanceX = 0; | 343 *pTextAdvanceX = 0; |
344 } | 344 } |
345 if (pTextAdvanceY) { | 345 if (pTextAdvanceY) { |
346 *pTextAdvanceY = curpos; | 346 *pTextAdvanceY = curpos; |
347 } | 347 } |
348 min_x = min_x * fontsize / 1000; | 348 min_x = min_x * fontsize / 1000; |
349 max_x = max_x * fontsize / 1000; | 349 max_x = max_x * fontsize / 1000; |
350 } else { | 350 } else { |
351 if (pTextAdvanceX) { | 351 if (pTextAdvanceX) { |
352 *pTextAdvanceX = curpos * horz_scale; | 352 *pTextAdvanceX = curpos * horz_scale; |
353 } | 353 } |
354 if (pTextAdvanceY) { | 354 if (pTextAdvanceY) { |
355 *pTextAdvanceY = 0; | 355 *pTextAdvanceY = 0; |
356 } | 356 } |
357 min_y = min_y * fontsize / 1000; | 357 min_y = min_y * fontsize / 1000; |
358 max_y = max_y * fontsize / 1000; | 358 max_y = max_y * fontsize / 1000; |
359 } | 359 } |
360 CFX_Matrix matrix; | 360 CFX_Matrix matrix; |
361 GetTextMatrix(&matrix); | 361 GetTextMatrix(&matrix); |
362 m_Left = min_x; | 362 m_Left = min_x; |
363 m_Right = max_x; | 363 m_Right = max_x; |
364 m_Bottom = min_y; | 364 m_Bottom = min_y; |
365 m_Top = max_y; | 365 m_Top = max_y; |
366 matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom); | 366 matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom); |
367 if (TextRenderingModeIsStrokeMode(m_TextState.GetObject()->m_TextMode)) { | 367 if (TextRenderingModeIsStrokeMode(m_TextState->m_TextMode)) { |
368 FX_FLOAT half_width = m_GraphState.GetObject()->m_LineWidth / 2; | 368 FX_FLOAT half_width = m_GraphState->m_LineWidth / 2; |
369 m_Left -= half_width; | 369 m_Left -= half_width; |
370 m_Right += half_width; | 370 m_Right += half_width; |
371 m_Top += half_width; | 371 m_Top += half_width; |
372 m_Bottom -= half_width; | 372 m_Bottom -= half_width; |
373 } | 373 } |
374 } | 374 } |
375 | 375 |
376 void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y) { | 376 void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y) { |
377 FX_FLOAT dx = x - m_PosX; | 377 FX_FLOAT dx = x - m_PosX; |
378 FX_FLOAT dy = y - m_PosY; | 378 FX_FLOAT dy = y - m_PosY; |
379 m_PosX = x; | 379 m_PosX = x; |
380 m_PosY = y; | 380 m_PosY = y; |
381 m_Left += dx; | 381 m_Left += dx; |
382 m_Right += dx; | 382 m_Right += dx; |
383 m_Top += dy; | 383 m_Top += dy; |
384 m_Bottom += dy; | 384 m_Bottom += dy; |
385 } | 385 } |
386 | 386 |
387 void CPDF_TextObject::RecalcPositionData() { | 387 void CPDF_TextObject::RecalcPositionData() { |
388 CalcPositionData(nullptr, nullptr, 1); | 388 CalcPositionData(nullptr, nullptr, 1); |
389 } | 389 } |
OLD | NEW |