Index: fpdfsdk/fxedit/fxet_pageobjs.cpp |
diff --git a/fpdfsdk/fxedit/fxet_pageobjs.cpp b/fpdfsdk/fxedit/fxet_pageobjs.cpp |
deleted file mode 100644 |
index 98ec6f5318ac6d458fb0dff3c191f23c65406ca9..0000000000000000000000000000000000000000 |
--- a/fpdfsdk/fxedit/fxet_pageobjs.cpp |
+++ /dev/null |
@@ -1,306 +0,0 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
- |
-#include "core/fpdfapi/fpdf_page/include/cpdf_pageobject.h" |
-#include "core/fpdfapi/fpdf_page/include/cpdf_pageobjectholder.h" |
-#include "core/fpdfapi/fpdf_page/include/cpdf_pathobject.h" |
-#include "core/fpdfapi/fpdf_page/include/cpdf_textobject.h" |
-#include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h" |
-#include "core/fpdfapi/fpdf_render/include/cpdf_textrenderer.h" |
-#include "core/fpdfdoc/include/cpvt_word.h" |
-#include "core/fpdfdoc/include/ipvt_fontmap.h" |
-#include "core/fxge/include/fx_ge.h" |
-#include "fpdfsdk/cfx_systemhandler.h" |
-#include "fpdfsdk/fxedit/include/fx_edit.h" |
-#include "fpdfsdk/fxedit/include/fxet_edit.h" |
- |
-namespace { |
- |
-void DrawTextString(CFX_RenderDevice* pDevice, |
- const CFX_FloatPoint& pt, |
- CPDF_Font* pFont, |
- FX_FLOAT fFontSize, |
- CFX_Matrix* pUser2Device, |
- const CFX_ByteString& str, |
- FX_ARGB crTextFill, |
- FX_ARGB crTextStroke, |
- int32_t nHorzScale) { |
- FX_FLOAT x = pt.x, y = pt.y; |
- pUser2Device->Transform(x, y); |
- |
- if (pFont) { |
- if (nHorzScale != 100) { |
- CFX_Matrix mt(nHorzScale / 100.0f, 0, 0, 1, 0, 0); |
- mt.Concat(*pUser2Device); |
- |
- CPDF_RenderOptions ro; |
- ro.m_Flags = RENDER_CLEARTYPE; |
- ro.m_ColorMode = RENDER_COLOR_NORMAL; |
- |
- if (crTextStroke != 0) { |
- CFX_FloatPoint pt1(0, 0), pt2(1, 0); |
- pUser2Device->Transform(pt1.x, pt1.y); |
- pUser2Device->Transform(pt2.x, pt2.y); |
- CFX_GraphStateData gsd; |
- gsd.m_LineWidth = |
- (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); |
- |
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt, |
- str, crTextFill, crTextStroke, &gsd, |
- &ro); |
- } else { |
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt, |
- str, crTextFill, 0, nullptr, &ro); |
- } |
- } else { |
- CPDF_RenderOptions ro; |
- ro.m_Flags = RENDER_CLEARTYPE; |
- ro.m_ColorMode = RENDER_COLOR_NORMAL; |
- |
- if (crTextStroke != 0) { |
- CFX_FloatPoint pt1(0, 0), pt2(1, 0); |
- pUser2Device->Transform(pt1.x, pt1.y); |
- pUser2Device->Transform(pt2.x, pt2.y); |
- CFX_GraphStateData gsd; |
- gsd.m_LineWidth = |
- (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); |
- |
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, |
- pUser2Device, str, crTextFill, |
- crTextStroke, &gsd, &ro); |
- } else { |
- CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, |
- pUser2Device, str, crTextFill, 0, |
- nullptr, &ro); |
- } |
- } |
- } |
-} |
- |
-CPDF_TextObject* AddTextObjToPageObjects(CPDF_PageObjectHolder* pObjectHolder, |
- FX_COLORREF crText, |
- CPDF_Font* pFont, |
- FX_FLOAT fFontSize, |
- FX_FLOAT fCharSpace, |
- int32_t nHorzScale, |
- const CFX_FloatPoint& point, |
- const CFX_ByteString& text) { |
- std::unique_ptr<CPDF_TextObject> pTxtObj(new CPDF_TextObject); |
- CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify(); |
- pTextStateData->m_pFont = pFont; |
- pTextStateData->m_FontSize = fFontSize; |
- pTextStateData->m_CharSpace = fCharSpace; |
- pTextStateData->m_WordSpace = 0; |
- pTextStateData->m_TextMode = TextRenderingMode::MODE_FILL; |
- pTextStateData->m_Matrix[0] = nHorzScale / 100.0f; |
- pTextStateData->m_Matrix[1] = 0; |
- pTextStateData->m_Matrix[2] = 0; |
- pTextStateData->m_Matrix[3] = 1; |
- |
- FX_FLOAT rgb[3]; |
- rgb[0] = FXARGB_R(crText) / 255.0f; |
- rgb[1] = FXARGB_G(crText) / 255.0f; |
- rgb[2] = FXARGB_B(crText) / 255.0f; |
- pTxtObj->m_ColorState.SetFillColor( |
- CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); |
- pTxtObj->m_ColorState.SetStrokeColor( |
- CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); |
- |
- pTxtObj->SetPosition(point.x, point.y); |
- pTxtObj->SetText(text); |
- |
- CPDF_TextObject* pRet = pTxtObj.get(); |
- pObjectHolder->GetPageObjectList()->push_back(std::move(pTxtObj)); |
- return pRet; |
-} |
- |
-} // namespace |
- |
-void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice, |
- CFX_Matrix* pUser2Device, |
- IFX_Edit* pEdit, |
- FX_COLORREF crTextFill, |
- FX_COLORREF crTextStroke, |
- const CFX_FloatRect& rcClip, |
- const CFX_FloatPoint& ptOffset, |
- const CPVT_WordRange* pRange, |
- CFX_SystemHandler* pSystemHandler, |
- void* pFFLData) { |
- const bool bContinuous = |
- pEdit->GetCharArray() == 0 && pEdit->GetCharSpace() <= 0.0f; |
- uint16_t SubWord = pEdit->GetPasswordChar(); |
- FX_FLOAT fFontSize = pEdit->GetFontSize(); |
- CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); |
- int32_t nHorzScale = pEdit->GetHorzScale(); |
- |
- FX_COLORREF crCurFill = crTextFill; |
- FX_COLORREF crOldFill = crCurFill; |
- |
- FX_BOOL bSelect = FALSE; |
- const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255); |
- const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113); |
- |
- CFX_ByteTextBuf sTextBuf; |
- int32_t nFontIndex = -1; |
- CFX_FloatPoint ptBT(0.0f, 0.0f); |
- |
- pDevice->SaveState(); |
- |
- if (!rcClip.IsEmpty()) { |
- CFX_FloatRect rcTemp = rcClip; |
- pUser2Device->TransformRect(rcTemp); |
- pDevice->SetClip_Rect(rcTemp.ToFxRect()); |
- } |
- |
- IFX_Edit_Iterator* pIterator = pEdit->GetIterator(); |
- if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) { |
- if (pRange) |
- pIterator->SetAt(pRange->BeginPos); |
- else |
- pIterator->SetAt(0); |
- |
- CPVT_WordPlace oldplace; |
- while (pIterator->NextWord()) { |
- CPVT_WordPlace place = pIterator->GetAt(); |
- if (pRange && place.WordCmp(pRange->EndPos) > 0) |
- break; |
- |
- if (wrSelect.IsExist()) { |
- bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && |
- place.WordCmp(wrSelect.EndPos) <= 0; |
- crCurFill = bSelect ? crWhite : crTextFill; |
- } |
- if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { |
- crCurFill = crTextFill; |
- crOldFill = crCurFill; |
- } |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- if (bSelect) { |
- CPVT_Line line; |
- pIterator->GetLine(line); |
- |
- if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { |
- CFX_FloatRect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent, |
- word.ptWord.x + word.fWidth, |
- line.ptLine.y + line.fLineAscent); |
- rc.Intersect(rcClip); |
- pSystemHandler->OutputSelectedRect(pFFLData, rc); |
- } else { |
- CFX_PathData pathSelBK; |
- pathSelBK.AppendRect( |
- word.ptWord.x, line.ptLine.y + line.fLineDescent, |
- word.ptWord.x + word.fWidth, line.ptLine.y + line.fLineAscent); |
- |
- pDevice->DrawPath(&pathSelBK, pUser2Device, nullptr, crSelBK, 0, |
- FXFILL_WINDING); |
- } |
- } |
- |
- if (bContinuous) { |
- if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex || |
- crOldFill != crCurFill) { |
- if (sTextBuf.GetLength() > 0) { |
- DrawTextString( |
- pDevice, |
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), |
- pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device, |
- sTextBuf.MakeString(), crOldFill, crTextStroke, nHorzScale); |
- |
- sTextBuf.Clear(); |
- } |
- nFontIndex = word.nFontIndex; |
- ptBT = word.ptWord; |
- crOldFill = crCurFill; |
- } |
- |
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, |
- SubWord) |
- .AsStringC(); |
- } else { |
- DrawTextString( |
- pDevice, CFX_FloatPoint(word.ptWord.x + ptOffset.x, |
- word.ptWord.y + ptOffset.y), |
- pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device, |
- GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord), |
- crCurFill, crTextStroke, nHorzScale); |
- } |
- oldplace = place; |
- } |
- } |
- |
- if (sTextBuf.GetLength() > 0) { |
- DrawTextString( |
- pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), |
- pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device, |
- sTextBuf.MakeString(), crOldFill, crTextStroke, nHorzScale); |
- } |
- } |
- |
- pDevice->RestoreState(false); |
-} |
- |
-void IFX_Edit::GeneratePageObjects( |
- CPDF_PageObjectHolder* pObjectHolder, |
- IFX_Edit* pEdit, |
- const CFX_FloatPoint& ptOffset, |
- const CPVT_WordRange* pRange, |
- FX_COLORREF crText, |
- CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) { |
- FX_FLOAT fFontSize = pEdit->GetFontSize(); |
- |
- int32_t nOldFontIndex = -1; |
- |
- CFX_ByteTextBuf sTextBuf; |
- CFX_FloatPoint ptBT(0.0f, 0.0f); |
- |
- ObjArray.RemoveAll(); |
- |
- IFX_Edit_Iterator* pIterator = pEdit->GetIterator(); |
- if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) { |
- if (pRange) |
- pIterator->SetAt(pRange->BeginPos); |
- else |
- pIterator->SetAt(0); |
- |
- CPVT_WordPlace oldplace; |
- |
- while (pIterator->NextWord()) { |
- CPVT_WordPlace place = pIterator->GetAt(); |
- if (pRange && place.WordCmp(pRange->EndPos) > 0) |
- break; |
- |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- if (place.LineCmp(oldplace) != 0 || nOldFontIndex != word.nFontIndex) { |
- if (sTextBuf.GetLength() > 0) { |
- ObjArray.Add(AddTextObjToPageObjects( |
- pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex), |
- fFontSize, 0.0f, 100, |
- CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), |
- sTextBuf.MakeString())); |
- |
- sTextBuf.Clear(); |
- } |
- |
- ptBT = word.ptWord; |
- nOldFontIndex = word.nFontIndex; |
- } |
- |
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0) |
- .AsStringC(); |
- oldplace = place; |
- } |
- } |
- |
- if (sTextBuf.GetLength() > 0) { |
- ObjArray.Add(AddTextObjToPageObjects( |
- pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize, |
- 0.0f, 100, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), |
- sTextBuf.MakeString())); |
- } |
- } |
-} |