summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xfa/fde/cfde_texteditengine.cpp2
-rw-r--r--xfa/fgas/layout/cfx_txtbreak.cpp19
-rw-r--r--xfa/fgas/layout/cfx_txtbreak.h1
3 files changed, 15 insertions, 7 deletions
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index ac66fd7f99..a423ba6eb4 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -953,6 +953,7 @@ std::vector<CFX_RectF> CFDE_TextEditEngine::GetCharRects(
FX_TXTRUN tr;
tr.pEdtEngine = this;
+ tr.iStart = piece.nStart;
tr.iLength = piece.nCount;
tr.pFont = font_;
tr.fFontSize = font_size_;
@@ -969,6 +970,7 @@ std::vector<FXTEXT_CHARPOS> CFDE_TextEditEngine::GetDisplayPos(
FX_TXTRUN tr;
tr.pEdtEngine = this;
+ tr.iStart = piece.nStart;
tr.iLength = piece.nCount;
tr.pFont = font_;
tr.fFontSize = font_size_;
diff --git a/xfa/fgas/layout/cfx_txtbreak.cpp b/xfa/fgas/layout/cfx_txtbreak.cpp
index c3075b00dc..ccbc6a817a 100644
--- a/xfa/fgas/layout/cfx_txtbreak.cpp
+++ b/xfa/fgas/layout/cfx_txtbreak.cpp
@@ -686,11 +686,12 @@ int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun,
bool bShadda = false;
bool bLam = false;
for (int32_t i = 0; i <= iLength; i++) {
+ int32_t iAbsolute = i + pTxtRun->iStart;
int32_t iWidth;
wchar_t wch;
if (pEngine) {
- wch = pEngine->GetChar(i);
- iWidth = pEngine->GetWidthOfChar(i);
+ wch = pEngine->GetChar(iAbsolute);
+ iWidth = pEngine->GetWidthOfChar(iAbsolute);
} else {
wch = *pStr++;
iWidth = *pWidths++;
@@ -709,7 +710,8 @@ int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun,
if (pEngine) {
iNext = i + 1;
while (iNext <= iLength) {
- wNext = pEngine->GetChar(iNext);
+ int32_t iNextAbsolute = iNext + pTxtRun->iStart;
+ wNext = pEngine->GetChar(iNextAbsolute);
dwProps = FX_GetUnicodeProperties(wNext);
if ((dwProps & FX_CHARTYPEBITSMASK) != FX_CHARTYPE_Combination)
break;
@@ -747,8 +749,10 @@ int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun,
wNext = 0xFEFF;
if (pEngine) {
iNext = i + 1;
- if (iNext <= iLength)
- wNext = pEngine->GetChar(iNext);
+ if (iNext <= iLength) {
+ int32_t iNextAbsolute = iNext + pTxtRun->iStart;
+ wNext = pEngine->GetChar(iNextAbsolute);
+ }
} else {
if (i < iLength)
wNext = *pStr;
@@ -930,9 +934,10 @@ std::vector<CFX_RectF> CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun,
std::vector<CFX_RectF> rtArray(iLength);
for (int32_t i = 0; i < iLength; i++) {
+ int32_t iAbsolute = i + pTxtRun->iStart;
if (pEngine) {
- wch = pEngine->GetChar(i);
- iCharSize = pEngine->GetWidthOfChar(i);
+ wch = pEngine->GetChar(iAbsolute);
+ iCharSize = pEngine->GetWidthOfChar(iAbsolute);
} else {
wch = *pStr++;
iCharSize = *pWidths++;
diff --git a/xfa/fgas/layout/cfx_txtbreak.h b/xfa/fgas/layout/cfx_txtbreak.h
index b43fda0e2f..a0e034280b 100644
--- a/xfa/fgas/layout/cfx_txtbreak.h
+++ b/xfa/fgas/layout/cfx_txtbreak.h
@@ -42,6 +42,7 @@ struct FX_TXTRUN {
CFDE_TextEditEngine* pEdtEngine;
WideString wsStr;
int32_t* pWidths;
+ int32_t iStart;
int32_t iLength;
RetainPtr<CFGAS_GEFont> pFont;
float fFontSize;