Index: fpdfsdk/pdfwindow/PWL_Utils.cpp |
diff --git a/fpdfsdk/pdfwindow/PWL_Utils.cpp b/fpdfsdk/pdfwindow/PWL_Utils.cpp |
index fe0075c2b0ac413ab04d184e3f25db78a8a8f7a6..92787b9e6c9076ed8d9fe9caed5dd159eb387514 100644 |
--- a/fpdfsdk/pdfwindow/PWL_Utils.cpp |
+++ b/fpdfsdk/pdfwindow/PWL_Utils.cpp |
@@ -430,152 +430,6 @@ CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit, |
return IFX_Edit::GetSelectAppearanceStream(pEdit, ptOffset, pRange); |
} |
-static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX, |
- FX_FLOAT fEndX, |
- FX_FLOAT fY, |
- FX_FLOAT fStep) { |
- CFX_ByteTextBuf sRet; |
- |
- sRet << "0 w\n" << fStartX << " " << fY << " m\n"; |
- |
- FX_FLOAT fx; |
- int32_t i; |
- |
- for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { |
- sRet << fx << " " << fY + (i & 1) * fStep << " l\n"; |
- } |
- |
- sRet << "S\n"; |
- |
- return sRet.GetByteString(); |
-} |
- |
-static CFX_ByteString GetWordSpellCheckAppearanceStream( |
- IFX_Edit_Iterator* pIterator, |
- const CFX_FloatPoint& ptOffset, |
- const CPVT_WordRange& wrWord) { |
- CFX_ByteTextBuf sRet; |
- |
- FX_FLOAT fStartX = 0.0f; |
- FX_FLOAT fEndX = 0.0f; |
- FX_FLOAT fY = 0.0f; |
- FX_FLOAT fStep = 0.0f; |
- |
- FX_BOOL bBreak = FALSE; |
- |
- if (pIterator) { |
- pIterator->SetAt(wrWord.BeginPos); |
- |
- do { |
- CPVT_WordPlace place = pIterator->GetAt(); |
- |
- CPVT_Line line; |
- if (pIterator->GetLine(line)) { |
- fY = line.ptLine.y; |
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; |
- } |
- |
- if (place.LineCmp(wrWord.BeginPos) == 0) { |
- pIterator->SetAt(wrWord.BeginPos); |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- fStartX = word.ptWord.x; |
- } |
- } else { |
- fStartX = line.ptLine.x; |
- } |
- |
- if (place.LineCmp(wrWord.EndPos) == 0) { |
- pIterator->SetAt(wrWord.EndPos); |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- fEndX = word.ptWord.x + word.fWidth; |
- } |
- |
- bBreak = TRUE; |
- } else { |
- fEndX = line.ptLine.x + line.fLineWidth; |
- } |
- |
- sRet << GetSquigglyAppearanceStream( |
- fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y, fStep); |
- |
- if (bBreak) |
- break; |
- } while (pIterator->NextLine()); |
- } |
- |
- return sRet.GetByteString(); |
-} |
- |
-CFX_ByteString CPWL_Utils::GetSpellCheckAppStream( |
- IFX_Edit* pEdit, |
- IPWL_SpellCheck* pSpellCheck, |
- const CFX_FloatPoint& ptOffset, |
- const CPVT_WordRange* pRange) { |
- CFX_ByteTextBuf sRet; |
- |
- if (pRange && pRange->IsExist()) { |
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { |
- pIterator->SetAt(pRange->BeginPos); |
- |
- FX_BOOL bLatinWord = FALSE; |
- CPVT_WordPlace wpWordStart; |
- CFX_ByteString sWord; |
- |
- 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 (FX_EDIT_ISLATINWORD(word.Word)) { |
- if (!bLatinWord) { |
- wpWordStart = place; |
- bLatinWord = TRUE; |
- } |
- |
- sWord += (char)word.Word; |
- oldplace = place; |
- } else { |
- if (bLatinWord) { |
- if (!pSpellCheck->CheckWord(sWord)) { |
- sRet << GetWordSpellCheckAppearanceStream( |
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); |
- pIterator->SetAt(place); |
- } |
- bLatinWord = FALSE; |
- } |
- |
- sWord.Empty(); |
- } |
- } else { |
- if (bLatinWord) { |
- if (!pSpellCheck->CheckWord(sWord)) |
- sRet << GetWordSpellCheckAppearanceStream( |
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); |
- bLatinWord = FALSE; |
- sWord.Empty(); |
- } |
- } |
- } |
- |
- if (bLatinWord) { |
- if (!pSpellCheck->CheckWord(sWord)) |
- sRet << GetWordSpellCheckAppearanceStream( |
- pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); |
- |
- bLatinWord = FALSE; |
- sWord.Empty(); |
- } |
- } |
- } |
- |
- return sRet.GetByteString(); |
-} |
- |
CFX_ByteString CPWL_Utils::GetTextAppStream(const CFX_FloatRect& rcBBox, |
IPVT_FontMap* pFontMap, |
const CFX_WideString& sText, |
@@ -1608,173 +1462,6 @@ void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice, |
} |
} |
-static void AddSquigglyPath(CFX_PathData& PathData, |
- FX_FLOAT fStartX, |
- FX_FLOAT fEndX, |
- FX_FLOAT fY, |
- FX_FLOAT fStep) { |
- PathData.AddPointCount(1); |
- PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO); |
- |
- FX_FLOAT fx; |
- int32_t i; |
- |
- for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { |
- PathData.AddPointCount(1); |
- PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i & 1) * fStep, |
- FXPT_LINETO); |
- } |
-} |
- |
-static void AddSpellCheckObj(CFX_PathData& PathData, |
- IFX_Edit* pEdit, |
- const CPVT_WordRange& wrWord) { |
- FX_FLOAT fStartX = 0.0f; |
- FX_FLOAT fEndX = 0.0f; |
- FX_FLOAT fY = 0.0f; |
- FX_FLOAT fStep = 0.0f; |
- |
- FX_BOOL bBreak = FALSE; |
- |
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { |
- pIterator->SetAt(wrWord.BeginPos); |
- |
- do { |
- CPVT_WordPlace place = pIterator->GetAt(); |
- |
- CPVT_Line line; |
- if (pIterator->GetLine(line)) { |
- fY = line.ptLine.y; |
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; |
- } |
- |
- if (place.LineCmp(wrWord.BeginPos) == 0) { |
- pIterator->SetAt(wrWord.BeginPos); |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- fStartX = word.ptWord.x; |
- } |
- } else { |
- fStartX = line.ptLine.x; |
- } |
- |
- if (place.LineCmp(wrWord.EndPos) == 0) { |
- pIterator->SetAt(wrWord.EndPos); |
- CPVT_Word word; |
- if (pIterator->GetWord(word)) { |
- fEndX = word.ptWord.x + word.fWidth; |
- } |
- |
- bBreak = TRUE; |
- } else { |
- fEndX = line.ptLine.x + line.fLineWidth; |
- } |
- |
- AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); |
- |
- if (bBreak) |
- break; |
- } while (pIterator->NextLine()); |
- } |
-} |
- |
-void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice, |
- CFX_Matrix* pUser2Device, |
- IFX_Edit* pEdit, |
- const CFX_FloatRect& rcClip, |
- const CFX_FloatPoint& ptOffset, |
- const CPVT_WordRange* pRange, |
- IPWL_SpellCheck* pSpellCheck) { |
- const FX_COLORREF crSpell = ArgbEncode(255, 255, 0, 0); |
- |
- // for spellcheck |
- FX_BOOL bLatinWord = FALSE; |
- CPVT_WordPlace wpWordStart; |
- CFX_ByteString sLatinWord; |
- |
- CFX_PathData pathSpell; |
- |
- pDevice->SaveState(); |
- |
- if (!rcClip.IsEmpty()) { |
- CFX_FloatRect rcTemp = rcClip; |
- pUser2Device->TransformRect(rcTemp); |
- pDevice->SetClip_Rect(rcTemp.ToFxRect()); |
- } |
- |
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { |
- if (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 (FX_EDIT_ISLATINWORD(word.Word)) { |
- if (!bLatinWord) { |
- wpWordStart = place; |
- bLatinWord = TRUE; |
- } |
- |
- sLatinWord += (char)word.Word; |
- } else { |
- if (bLatinWord) { |
- if (!sLatinWord.IsEmpty()) { |
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { |
- AddSpellCheckObj(pathSpell, pEdit, |
- CPVT_WordRange(wpWordStart, oldplace)); |
- pIterator->SetAt(place); |
- } |
- } |
- bLatinWord = FALSE; |
- } |
- |
- sLatinWord.Empty(); |
- } |
- |
- oldplace = place; |
- } else { |
- if (bLatinWord) { |
- if (!sLatinWord.IsEmpty()) { |
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { |
- AddSpellCheckObj(pathSpell, pEdit, |
- CPVT_WordRange(wpWordStart, oldplace)); |
- pIterator->SetAt(place); |
- } |
- } |
- bLatinWord = FALSE; |
- } |
- |
- sLatinWord.Empty(); |
- } |
- } |
- |
- if (!sLatinWord.IsEmpty()) { |
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { |
- AddSpellCheckObj(pathSpell, pEdit, |
- CPVT_WordRange(wpWordStart, oldplace)); |
- } |
- } |
- } |
- } |
- |
- CFX_GraphStateData gsd; |
- gsd.m_LineWidth = 0; |
- if (pathSpell.GetPointCount() > 0) |
- pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell, |
- FXFILL_ALTERNATE); |
- |
- pDevice->RestoreState(); |
-} |
- |
FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) { |
switch (color.nColorType) { |
case COLORTYPE_TRANSPARENT: |