| 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 |