| Index: fpdfsdk/fxedit/fxet_edit.cpp
|
| diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
|
| index a02a2a0278bd69330c0258352569c7adddc4bb95..d2abb176eb77220d353b5c8c8006d0c7fac7c3c4 100644
|
| --- a/fpdfsdk/fxedit/fxet_edit.cpp
|
| +++ b/fpdfsdk/fxedit/fxet_edit.cpp
|
| @@ -748,16 +748,15 @@ void CFXEU_SetWordProps::Undo() {
|
|
|
| CFX_Edit::CFX_Edit(CPDF_VariableText* pVT)
|
| : m_pVT(pVT),
|
| - m_pNotify(NULL),
|
| - m_pOprNotify(NULL),
|
| - m_pVTProvide(NULL),
|
| + m_pNotify(nullptr),
|
| + m_pOprNotify(nullptr),
|
| m_wpCaret(-1, -1, -1),
|
| m_wpOldCaret(-1, -1, -1),
|
| m_SelState(),
|
| m_ptScrollPos(0, 0),
|
| m_ptRefreshScrollPos(0, 0),
|
| m_bEnableScroll(FALSE),
|
| - m_pIterator(NULL),
|
| + m_pIterator(nullptr),
|
| m_ptCaret(0.0f, 0.0f),
|
| m_Undo(kEditUndoMaxItems),
|
| m_nAlignment(0),
|
| @@ -768,15 +767,11 @@ CFX_Edit::CFX_Edit(CPDF_VariableText* pVT)
|
| m_bEnableUndo(TRUE),
|
| m_bNotify(TRUE),
|
| m_bOprNotify(FALSE),
|
| - m_pGroupUndoItem(NULL) {
|
| + m_pGroupUndoItem(nullptr) {
|
| ASSERT(pVT);
|
| }
|
|
|
| CFX_Edit::~CFX_Edit() {
|
| - delete m_pVTProvide;
|
| - m_pVTProvide = NULL;
|
| - delete m_pIterator;
|
| - m_pIterator = NULL;
|
| ASSERT(!m_pGroupUndoItem);
|
| }
|
|
|
| @@ -787,8 +782,8 @@ void CFX_Edit::Initialize() {
|
| }
|
|
|
| void CFX_Edit::SetFontMap(IPVT_FontMap* pFontMap) {
|
| - delete m_pVTProvide;
|
| - m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
|
| + m_pVTProvider.reset(new CFX_Edit_Provider(pFontMap));
|
| + m_pVT->SetProvider(m_pVTProvider.get());
|
| }
|
|
|
| void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) {
|
| @@ -801,9 +796,8 @@ void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify) {
|
|
|
| IFX_Edit_Iterator* CFX_Edit::GetIterator() {
|
| if (!m_pIterator)
|
| - m_pIterator = new CFX_Edit_Iterator(this, m_pVT->GetIterator());
|
| -
|
| - return m_pIterator;
|
| + m_pIterator.reset(new CFX_Edit_Iterator(this, m_pVT->GetIterator()));
|
| + return m_pIterator.get();
|
| }
|
|
|
| CPDF_VariableText* CFX_Edit::GetVariableText() {
|
| @@ -811,10 +805,7 @@ CPDF_VariableText* CFX_Edit::GetVariableText() {
|
| }
|
|
|
| IPVT_FontMap* CFX_Edit::GetFontMap() {
|
| - if (m_pVTProvide)
|
| - return m_pVTProvide->GetFontMap();
|
| -
|
| - return NULL;
|
| + return m_pVTProvider ? m_pVTProvider->GetFontMap() : nullptr;
|
| }
|
|
|
| void CFX_Edit::SetPlateRect(const CFX_FloatRect& rect, FX_BOOL bPaint) {
|
| @@ -980,33 +971,24 @@ CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const {
|
| CFX_WideString CFX_Edit::GetText() const {
|
| CFX_WideString swRet;
|
|
|
| - if (m_pVT->IsValid()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - FX_BOOL bRich = m_pVT->IsRichText();
|
| + if (!m_pVT->IsValid())
|
| + return swRet;
|
|
|
| - pIterator->SetAt(0);
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(0);
|
|
|
| - CPVT_Word wordinfo;
|
| - CPVT_WordPlace oldplace = pIterator->GetAt();
|
| - while (pIterator->NextWord()) {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| + CPVT_Word wordinfo;
|
| + CPVT_WordPlace oldplace = pIterator->GetAt();
|
| + while (pIterator->NextWord()) {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
|
|
| - if (pIterator->GetWord(wordinfo)) {
|
| - if (bRich) {
|
| - swRet += wordinfo.Word;
|
| - } else {
|
| - swRet += wordinfo.Word;
|
| - }
|
| - }
|
| + if (pIterator->GetWord(wordinfo))
|
| + swRet += wordinfo.Word;
|
|
|
| - if (oldplace.SecCmp(place) != 0) {
|
| - swRet += 0x0D;
|
| - swRet += 0x0A;
|
| - }
|
| + if (oldplace.SecCmp(place) != 0)
|
| + swRet += L"\r\n";
|
|
|
| - oldplace = place;
|
| - }
|
| - }
|
| + oldplace = place;
|
| }
|
|
|
| return swRet;
|
| @@ -1015,38 +997,29 @@ CFX_WideString CFX_Edit::GetText() const {
|
| CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange& range) const {
|
| CFX_WideString swRet;
|
|
|
| - if (m_pVT->IsValid()) {
|
| - FX_BOOL bRich = m_pVT->IsRichText();
|
| + if (!m_pVT->IsValid())
|
| + return swRet;
|
|
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordRange wrTemp = range;
|
| - m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| - m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| - pIterator->SetAt(wrTemp.BeginPos);
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordRange wrTemp = range;
|
| + m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| + m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| + pIterator->SetAt(wrTemp.BeginPos);
|
|
|
| - CPVT_Word wordinfo;
|
| - CPVT_WordPlace oldplace = wrTemp.BeginPos;
|
| - while (pIterator->NextWord()) {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| - if (place.WordCmp(wrTemp.EndPos) > 0)
|
| - break;
|
| + CPVT_Word wordinfo;
|
| + CPVT_WordPlace oldplace = wrTemp.BeginPos;
|
| + while (pIterator->NextWord()) {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
| + if (place.WordCmp(wrTemp.EndPos) > 0)
|
| + break;
|
|
|
| - if (pIterator->GetWord(wordinfo)) {
|
| - if (bRich) {
|
| - swRet += wordinfo.Word;
|
| - } else {
|
| - swRet += wordinfo.Word;
|
| - }
|
| - }
|
| + if (pIterator->GetWord(wordinfo))
|
| + swRet += wordinfo.Word;
|
|
|
| - if (oldplace.SecCmp(place) != 0) {
|
| - swRet += 0x0D;
|
| - swRet += 0x0A;
|
| - }
|
| + if (oldplace.SecCmp(place) != 0)
|
| + swRet += L"\r\n";
|
|
|
| - oldplace = place;
|
| - }
|
| - }
|
| + oldplace = place;
|
| }
|
|
|
| return swRet;
|
| @@ -1061,15 +1034,14 @@ int32_t CFX_Edit::GetTotalWords() const {
|
| }
|
|
|
| int32_t CFX_Edit::GetTotalLines() const {
|
| - int32_t nLines = 0;
|
| + int32_t nLines = 1;
|
|
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(0);
|
| - while (pIterator->NextLine())
|
| - nLines++;
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(0);
|
| + while (pIterator->NextLine())
|
| + ++nLines;
|
|
|
| - return nLines + 1;
|
| + return nLines;
|
| }
|
|
|
| CPVT_WordRange CFX_Edit::GetSelectWordRange() const {
|
| @@ -1190,39 +1162,37 @@ FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) {
|
| FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps,
|
| const CPVT_SecProps* pSecProps,
|
| const CPVT_WordProps* pWordProps) {
|
| - FX_BOOL bSet = FALSE;
|
| - FX_BOOL bSet1, bSet2;
|
| - if (m_pVT->IsValid() && m_pVT->IsRichText()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
|
| -
|
| - m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| - m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| - pIterator->SetAt(wrTemp.BeginPos);
|
| + if (!m_pVT->IsValid() || !m_pVT->IsRichText())
|
| + return FALSE;
|
|
|
| - BeginGroupUndo(L"");
|
| - bSet = SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp,
|
| - TRUE);
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
|
|
|
| - while (pIterator->NextWord()) {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| - if (place.WordCmp(wrTemp.EndPos) > 0)
|
| - break;
|
| - bSet1 = SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
|
| - bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
|
| + m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| + m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| + pIterator->SetAt(wrTemp.BeginPos);
|
|
|
| - if (!bSet)
|
| - bSet = (bSet1 || bSet2);
|
| - }
|
| + BeginGroupUndo(L"");
|
| + FX_BOOL bSet =
|
| + SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp, TRUE);
|
|
|
| - EndGroupUndo();
|
| + while (pIterator->NextWord()) {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
| + if (place.WordCmp(wrTemp.EndPos) > 0)
|
| + break;
|
| + FX_BOOL bSet1 =
|
| + SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
|
| + FX_BOOL bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
|
|
|
| - if (bSet) {
|
| - PaintSetProps(eProps, wrTemp);
|
| - }
|
| - }
|
| + if (!bSet)
|
| + bSet = (bSet1 || bSet2);
|
| }
|
|
|
| + EndGroupUndo();
|
| +
|
| + if (bSet)
|
| + PaintSetProps(eProps, wrTemp);
|
| +
|
| return bSet;
|
| }
|
|
|
| @@ -1268,321 +1238,308 @@ FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps,
|
| const CPVT_WordProps* pWordProps,
|
| const CPVT_WordRange& wr,
|
| FX_BOOL bAddUndo) {
|
| - if (m_pVT->IsValid() && m_pVT->IsRichText()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - FX_BOOL bSet = FALSE;
|
| - CPVT_Section secinfo;
|
| - CPVT_Section OldSecinfo;
|
| -
|
| - CPVT_WordPlace oldplace = pIterator->GetAt();
|
| + if (!m_pVT->IsValid() || !m_pVT->IsRichText())
|
| + return FALSE;
|
|
|
| - if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
|
| - eProps == EP_ALIGNMENT) {
|
| - if (pSecProps) {
|
| - pIterator->SetAt(place);
|
| - if (pIterator->GetSection(secinfo)) {
|
| - if (bAddUndo)
|
| - OldSecinfo = secinfo;
|
| -
|
| - switch (eProps) {
|
| - case EP_LINELEADING:
|
| - if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
|
| - pSecProps->fLineLeading)) {
|
| - secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_LINEINDENT:
|
| - if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
|
| - pSecProps->fLineIndent)) {
|
| - secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_ALIGNMENT:
|
| - if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
|
| - secinfo.SecProps.nAlignment = pSecProps->nAlignment;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + FX_BOOL bSet = FALSE;
|
| + CPVT_Section secinfo;
|
| + CPVT_Section OldSecinfo;
|
| +
|
| + CPVT_WordPlace oldplace = pIterator->GetAt();
|
| +
|
| + if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
|
| + eProps == EP_ALIGNMENT) {
|
| + if (pSecProps) {
|
| + pIterator->SetAt(place);
|
| + if (pIterator->GetSection(secinfo)) {
|
| + if (bAddUndo)
|
| + OldSecinfo = secinfo;
|
| +
|
| + switch (eProps) {
|
| + case EP_LINELEADING:
|
| + if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
|
| + pSecProps->fLineLeading)) {
|
| + secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
|
| + bSet = TRUE;
|
| }
|
| - }
|
| - }
|
| - } else {
|
| - if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
|
| - pIterator->SetAt(place);
|
| - if (pIterator->GetSection(secinfo)) {
|
| - if (bAddUndo)
|
| - OldSecinfo = secinfo;
|
| -
|
| - switch (eProps) {
|
| - case EP_FONTINDEX:
|
| - if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
|
| - secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_FONTSIZE:
|
| - if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
|
| - pWordProps->fFontSize)) {
|
| - secinfo.WordProps.fFontSize = pWordProps->fFontSize;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_WORDCOLOR:
|
| - if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
|
| - secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_SCRIPTTYPE:
|
| - if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
|
| - secinfo.WordProps.nScriptType = pWordProps->nScriptType;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_CHARSPACE:
|
| - if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
|
| - pWordProps->fCharSpace)) {
|
| - secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_HORZSCALE:
|
| - if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
|
| - secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
|
| - bSet = TRUE;
|
| - }
|
| - break;
|
| - case EP_UNDERLINE:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
|
| - if ((secinfo.WordProps.nWordStyle &
|
| - PVTWORD_STYLE_UNDERLINE) == 0) {
|
| - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((secinfo.WordProps.nWordStyle &
|
| - PVTWORD_STYLE_UNDERLINE) != 0) {
|
| - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - case EP_CROSSOUT:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - case EP_BOLD:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) ==
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) !=
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - case EP_ITALIC:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
|
| - 0) {
|
| - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| + break;
|
| + case EP_LINEINDENT:
|
| + if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
|
| + pSecProps->fLineIndent)) {
|
| + secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
|
| + bSet = TRUE;
|
| }
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (bSet) {
|
| - pIterator->SetSection(secinfo);
|
| -
|
| - if (bAddUndo && m_bEnableUndo) {
|
| - AddEditUndoItem(new CFXEU_SetSecProps(
|
| - this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
|
| - secinfo.SecProps, secinfo.WordProps, wr));
|
| + break;
|
| + case EP_ALIGNMENT:
|
| + if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
|
| + secinfo.SecProps.nAlignment = pSecProps->nAlignment;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + default:
|
| + break;
|
| }
|
| }
|
| -
|
| - pIterator->SetAt(oldplace);
|
| -
|
| - return bSet;
|
| }
|
| - }
|
| -
|
| - return FALSE;
|
| -}
|
| -
|
| -FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
|
| - const CPVT_WordPlace& place,
|
| - const CPVT_WordProps* pWordProps,
|
| - const CPVT_WordRange& wr,
|
| - FX_BOOL bAddUndo) {
|
| - if (m_pVT->IsValid() && m_pVT->IsRichText()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - FX_BOOL bSet = FALSE;
|
| - CPVT_Word wordinfo;
|
| - CPVT_Word OldWordinfo;
|
| -
|
| - CPVT_WordPlace oldplace = pIterator->GetAt();
|
| -
|
| - if (pWordProps) {
|
| - pIterator->SetAt(place);
|
| - if (pIterator->GetWord(wordinfo)) {
|
| - if (bAddUndo)
|
| - OldWordinfo = wordinfo;
|
| -
|
| - switch (eProps) {
|
| - case EP_FONTINDEX:
|
| - if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
|
| - if (IPVT_FontMap* pFontMap = GetFontMap()) {
|
| - wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
|
| - wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
|
| - }
|
| + } else {
|
| + if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
|
| + pIterator->SetAt(place);
|
| + if (pIterator->GetSection(secinfo)) {
|
| + if (bAddUndo)
|
| + OldSecinfo = secinfo;
|
| +
|
| + switch (eProps) {
|
| + case EP_FONTINDEX:
|
| + if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
|
| + secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_FONTSIZE:
|
| + if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
|
| + pWordProps->fFontSize)) {
|
| + secinfo.WordProps.fFontSize = pWordProps->fFontSize;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_WORDCOLOR:
|
| + if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
|
| + secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_SCRIPTTYPE:
|
| + if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
|
| + secinfo.WordProps.nScriptType = pWordProps->nScriptType;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_CHARSPACE:
|
| + if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
|
| + pWordProps->fCharSpace)) {
|
| + secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_HORZSCALE:
|
| + if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
|
| + secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_UNDERLINE:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
|
| + 0) {
|
| + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_FONTSIZE:
|
| - if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
|
| - pWordProps->fFontSize)) {
|
| - wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
|
| + } else {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
|
| + 0) {
|
| + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_WORDCOLOR:
|
| - if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
|
| - wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
|
| + }
|
| + break;
|
| + case EP_CROSSOUT:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
|
| + 0) {
|
| + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_SCRIPTTYPE:
|
| - if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
|
| - wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
|
| + } else {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
|
| + 0) {
|
| + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_CHARSPACE:
|
| - if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
|
| - pWordProps->fCharSpace)) {
|
| - wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
|
| + }
|
| + break;
|
| + case EP_BOLD:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
|
| + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_HORZSCALE:
|
| - if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
|
| - wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
|
| + } else {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
|
| + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
|
| bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_UNDERLINE:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - case EP_CROSSOUT:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
|
| - bSet = TRUE;
|
| - }
|
| - }
|
| - break;
|
| - case EP_BOLD:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
|
| - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
|
| - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
|
| - bSet = TRUE;
|
| - }
|
| + }
|
| + break;
|
| + case EP_ITALIC:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
|
| + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
|
| + bSet = TRUE;
|
| }
|
| - break;
|
| - case EP_ITALIC:
|
| - if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
|
| - bSet = TRUE;
|
| - }
|
| - } else {
|
| - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
|
| - 0) {
|
| - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
|
| - bSet = TRUE;
|
| - }
|
| + } else {
|
| + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
|
| + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
|
| + bSet = TRUE;
|
| }
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| + }
|
| + break;
|
| + default:
|
| + break;
|
| }
|
| }
|
| + }
|
| + }
|
|
|
| - if (bSet) {
|
| - pIterator->SetWord(wordinfo);
|
| + if (bSet) {
|
| + pIterator->SetSection(secinfo);
|
|
|
| - if (bAddUndo && m_bEnableUndo) {
|
| - AddEditUndoItem(new CFXEU_SetWordProps(this, place, eProps,
|
| - OldWordinfo.WordProps,
|
| - wordinfo.WordProps, wr));
|
| - }
|
| + if (bAddUndo && m_bEnableUndo) {
|
| + AddEditUndoItem(new CFXEU_SetSecProps(
|
| + this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
|
| + secinfo.SecProps, secinfo.WordProps, wr));
|
| + }
|
| + }
|
| +
|
| + pIterator->SetAt(oldplace);
|
| +
|
| + return bSet;
|
| +}
|
| +
|
| +FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
|
| + const CPVT_WordPlace& place,
|
| + const CPVT_WordProps* pWordProps,
|
| + const CPVT_WordRange& wr,
|
| + FX_BOOL bAddUndo) {
|
| + if (!m_pVT->IsValid() || !m_pVT->IsRichText())
|
| + return FALSE;
|
| +
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + FX_BOOL bSet = FALSE;
|
| + CPVT_Word wordinfo;
|
| + CPVT_Word OldWordinfo;
|
| +
|
| + CPVT_WordPlace oldplace = pIterator->GetAt();
|
| +
|
| + if (pWordProps) {
|
| + pIterator->SetAt(place);
|
| + if (pIterator->GetWord(wordinfo)) {
|
| + if (bAddUndo)
|
| + OldWordinfo = wordinfo;
|
| +
|
| + switch (eProps) {
|
| + case EP_FONTINDEX:
|
| + if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
|
| + if (IPVT_FontMap* pFontMap = GetFontMap()) {
|
| + wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
|
| + wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
|
| + }
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_FONTSIZE:
|
| + if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
|
| + pWordProps->fFontSize)) {
|
| + wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_WORDCOLOR:
|
| + if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
|
| + wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_SCRIPTTYPE:
|
| + if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
|
| + wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_CHARSPACE:
|
| + if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
|
| + pWordProps->fCharSpace)) {
|
| + wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_HORZSCALE:
|
| + if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
|
| + wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
|
| + bSet = TRUE;
|
| + }
|
| + break;
|
| + case EP_UNDERLINE:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
|
| + 0) {
|
| + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
|
| + bSet = TRUE;
|
| + }
|
| + } else {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
|
| + 0) {
|
| + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
|
| + bSet = TRUE;
|
| + }
|
| + }
|
| + break;
|
| + case EP_CROSSOUT:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0) {
|
| + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
|
| + bSet = TRUE;
|
| + }
|
| + } else {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0) {
|
| + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
|
| + bSet = TRUE;
|
| + }
|
| + }
|
| + break;
|
| + case EP_BOLD:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
|
| + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
|
| + bSet = TRUE;
|
| + }
|
| + } else {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
|
| + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
|
| + bSet = TRUE;
|
| + }
|
| + }
|
| + break;
|
| + case EP_ITALIC:
|
| + if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
|
| + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
|
| + bSet = TRUE;
|
| + }
|
| + } else {
|
| + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
|
| + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
|
| + bSet = TRUE;
|
| + }
|
| + }
|
| + break;
|
| + default:
|
| + break;
|
| }
|
| + }
|
| + }
|
|
|
| - pIterator->SetAt(oldplace);
|
| - return bSet;
|
| + if (bSet) {
|
| + pIterator->SetWord(wordinfo);
|
| +
|
| + if (bAddUndo && m_bEnableUndo) {
|
| + AddEditUndoItem(new CFXEU_SetWordProps(
|
| + this, place, eProps, OldWordinfo.WordProps, wordinfo.WordProps, wr));
|
| }
|
| }
|
|
|
| - return FALSE;
|
| + pIterator->SetAt(oldplace);
|
| + return bSet;
|
| }
|
|
|
| void CFX_Edit::SetText(const FX_WCHAR* text,
|
| @@ -1918,52 +1875,52 @@ void CFX_Edit::SetScrollLimit() {
|
| void CFX_Edit::ScrollToCaret() {
|
| SetScrollLimit();
|
|
|
| - if (m_pVT->IsValid()) {
|
| - CFX_FloatPoint ptHead(0, 0);
|
| - CFX_FloatPoint ptFoot(0, 0);
|
| + if (!m_pVT->IsValid())
|
| + return;
|
|
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_wpCaret);
|
| + CFX_FloatPoint ptHead(0, 0);
|
| + CFX_FloatPoint ptFoot(0, 0);
|
|
|
| - CPVT_Word word;
|
| - CPVT_Line line;
|
| - if (pIterator->GetWord(word)) {
|
| - ptHead.x = word.ptWord.x + word.fWidth;
|
| - ptHead.y = word.ptWord.y + word.fAscent;
|
| - ptFoot.x = word.ptWord.x + word.fWidth;
|
| - ptFoot.y = word.ptWord.y + word.fDescent;
|
| - } else if (pIterator->GetLine(line)) {
|
| - ptHead.x = line.ptLine.x;
|
| - ptHead.y = line.ptLine.y + line.fLineAscent;
|
| - ptFoot.x = line.ptLine.x;
|
| - ptFoot.y = line.ptLine.y + line.fLineDescent;
|
| - }
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_wpCaret);
|
|
|
| - CFX_FloatPoint ptHeadEdit = VTToEdit(ptHead);
|
| - CFX_FloatPoint ptFootEdit = VTToEdit(ptFoot);
|
| + CPVT_Word word;
|
| + CPVT_Line line;
|
| + if (pIterator->GetWord(word)) {
|
| + ptHead.x = word.ptWord.x + word.fWidth;
|
| + ptHead.y = word.ptWord.y + word.fAscent;
|
| + ptFoot.x = word.ptWord.x + word.fWidth;
|
| + ptFoot.y = word.ptWord.y + word.fDescent;
|
| + } else if (pIterator->GetLine(line)) {
|
| + ptHead.x = line.ptLine.x;
|
| + ptHead.y = line.ptLine.y + line.fLineAscent;
|
| + ptFoot.x = line.ptLine.x;
|
| + ptFoot.y = line.ptLine.y + line.fLineDescent;
|
| + }
|
|
|
| - CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
|
| + CFX_FloatPoint ptHeadEdit = VTToEdit(ptHead);
|
| + CFX_FloatPoint ptFootEdit = VTToEdit(ptFoot);
|
|
|
| - if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
|
| - if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
|
| - FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
|
| - SetScrollPosX(ptHead.x);
|
| - } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
|
| - SetScrollPosX(ptHead.x - rcPlate.Width());
|
| - }
|
| + CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
|
| +
|
| + if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
|
| + if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
|
| + FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
|
| + SetScrollPosX(ptHead.x);
|
| + } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
|
| + SetScrollPosX(ptHead.x - rcPlate.Width());
|
| }
|
| + }
|
|
|
| - if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
|
| - if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
|
| - FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
|
| - if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
|
| - SetScrollPosY(ptFoot.y + rcPlate.Height());
|
| - }
|
| - } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
|
| - if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
|
| - SetScrollPosY(ptHead.y);
|
| - }
|
| + if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
|
| + if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
|
| + FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
|
| + if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
|
| + SetScrollPosY(ptFoot.y + rcPlate.Height());
|
| + }
|
| + } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
|
| + if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
|
| + SetScrollPosY(ptHead.y);
|
| }
|
| }
|
| }
|
| @@ -1995,129 +1952,128 @@ void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,
|
| }
|
|
|
| void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange& wr) {
|
| - if (m_pVT->IsValid()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordPlace wpBegin = wr.BeginPos;
|
| - m_pVT->UpdateWordPlace(wpBegin);
|
| - CPVT_WordPlace wpEnd = wr.EndPos;
|
| - m_pVT->UpdateWordPlace(wpEnd);
|
| - pIterator->SetAt(wpBegin);
|
| -
|
| - CPVT_Line lineinfo;
|
| - do {
|
| - if (!pIterator->GetLine(lineinfo))
|
| - break;
|
| - if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
|
| - break;
|
| + if (!m_pVT->IsValid())
|
| + return;
|
|
|
| - CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| - lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| - lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| - lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordPlace wpBegin = wr.BeginPos;
|
| + m_pVT->UpdateWordPlace(wpBegin);
|
| + CPVT_WordPlace wpEnd = wr.EndPos;
|
| + m_pVT->UpdateWordPlace(wpEnd);
|
| + pIterator->SetAt(wpBegin);
|
|
|
| - m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
|
| - VTToEdit(rcLine));
|
| - } while (pIterator->NextLine());
|
| - }
|
| - }
|
| + CPVT_Line lineinfo;
|
| + do {
|
| + if (!pIterator->GetLine(lineinfo))
|
| + break;
|
| + if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
|
| + break;
|
| +
|
| + CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| + lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| + lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| + lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| +
|
| + m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
|
| + VTToEdit(rcLine));
|
| + } while (pIterator->NextLine());
|
| }
|
|
|
| void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange& wr) {
|
| - if (m_pVT->IsValid()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordRange wrTemp = wr;
|
| + if (!m_pVT->IsValid())
|
| + return;
|
|
|
| - m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| - m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| - pIterator->SetAt(wrTemp.BeginPos);
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordRange wrTemp = wr;
|
|
|
| - CPVT_Word wordinfo;
|
| - CPVT_Line lineinfo;
|
| - CPVT_WordPlace place;
|
| + m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| + m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| + pIterator->SetAt(wrTemp.BeginPos);
|
|
|
| - while (pIterator->NextWord()) {
|
| - place = pIterator->GetAt();
|
| - if (place.WordCmp(wrTemp.EndPos) > 0)
|
| - break;
|
| + CPVT_Word wordinfo;
|
| + CPVT_Line lineinfo;
|
| + CPVT_WordPlace place;
|
|
|
| - pIterator->GetWord(wordinfo);
|
| - pIterator->GetLine(lineinfo);
|
| + while (pIterator->NextWord()) {
|
| + place = pIterator->GetAt();
|
| + if (place.WordCmp(wrTemp.EndPos) > 0)
|
| + break;
|
|
|
| - if (place.LineCmp(wrTemp.BeginPos) == 0 ||
|
| - place.LineCmp(wrTemp.EndPos) == 0) {
|
| - CFX_FloatRect rcWord(wordinfo.ptWord.x,
|
| - lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| - wordinfo.ptWord.x + wordinfo.fWidth,
|
| - lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| + pIterator->GetWord(wordinfo);
|
| + pIterator->GetLine(lineinfo);
|
|
|
| - m_Refresh.AddRefresh(VTToEdit(rcWord));
|
| - } else {
|
| - CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| - lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| - lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| - lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| + if (place.LineCmp(wrTemp.BeginPos) == 0 ||
|
| + place.LineCmp(wrTemp.EndPos) == 0) {
|
| + CFX_FloatRect rcWord(wordinfo.ptWord.x,
|
| + lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| + wordinfo.ptWord.x + wordinfo.fWidth,
|
| + lineinfo.ptLine.y + lineinfo.fLineAscent);
|
|
|
| - m_Refresh.AddRefresh(VTToEdit(rcLine));
|
| + m_Refresh.AddRefresh(VTToEdit(rcWord));
|
| + } else {
|
| + CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| + lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| + lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| + lineinfo.ptLine.y + lineinfo.fLineAscent);
|
|
|
| - pIterator->NextLine();
|
| - }
|
| - }
|
| + m_Refresh.AddRefresh(VTToEdit(rcLine));
|
| +
|
| + pIterator->NextLine();
|
| }
|
| }
|
| }
|
|
|
| void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordRange wrTemp = wr;
|
| -
|
| - m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| - m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| - pIterator->SetAt(wrTemp.BeginPos);
|
| -
|
| - CPVT_Word wordinfo;
|
| - CPVT_Line lineinfo;
|
| - CPVT_WordPlace place;
|
| -
|
| - while (pIterator->NextWord()) {
|
| - place = pIterator->GetAt();
|
| - if (place.WordCmp(wrTemp.EndPos) > 0)
|
| - break;
|
| -
|
| - pIterator->GetWord(wordinfo);
|
| - pIterator->GetLine(lineinfo);
|
| -
|
| - if (place.LineCmp(wrTemp.BeginPos) == 0 ||
|
| - place.LineCmp(wrTemp.EndPos) == 0) {
|
| - CFX_FloatRect rcWord(wordinfo.ptWord.x,
|
| - lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| - wordinfo.ptWord.x + wordinfo.fWidth,
|
| - lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| -
|
| - if (m_bNotify && m_pNotify) {
|
| - if (!m_bNotifyFlag) {
|
| - m_bNotifyFlag = TRUE;
|
| - CFX_FloatRect rcRefresh = VTToEdit(rcWord);
|
| - m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| - }
|
| - } else {
|
| - CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| - lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| - lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| - lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| -
|
| - if (m_bNotify && m_pNotify) {
|
| - if (!m_bNotifyFlag) {
|
| - m_bNotifyFlag = TRUE;
|
| - CFX_FloatRect rcRefresh = VTToEdit(rcLine);
|
| - m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordRange wrTemp = wr;
|
| +
|
| + m_pVT->UpdateWordPlace(wrTemp.BeginPos);
|
| + m_pVT->UpdateWordPlace(wrTemp.EndPos);
|
| + pIterator->SetAt(wrTemp.BeginPos);
|
| +
|
| + CPVT_Word wordinfo;
|
| + CPVT_Line lineinfo;
|
| + CPVT_WordPlace place;
|
| +
|
| + while (pIterator->NextWord()) {
|
| + place = pIterator->GetAt();
|
| + if (place.WordCmp(wrTemp.EndPos) > 0)
|
| + break;
|
| +
|
| + pIterator->GetWord(wordinfo);
|
| + pIterator->GetLine(lineinfo);
|
| +
|
| + if (place.LineCmp(wrTemp.BeginPos) == 0 ||
|
| + place.LineCmp(wrTemp.EndPos) == 0) {
|
| + CFX_FloatRect rcWord(wordinfo.ptWord.x,
|
| + lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| + wordinfo.ptWord.x + wordinfo.fWidth,
|
| + lineinfo.ptLine.y + lineinfo.fLineAscent);
|
| +
|
| + if (m_bNotify && m_pNotify) {
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + CFX_FloatRect rcRefresh = VTToEdit(rcWord);
|
| + m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| + m_bNotifyFlag = FALSE;
|
| }
|
| + }
|
| + } else {
|
| + CFX_FloatRect rcLine(lineinfo.ptLine.x,
|
| + lineinfo.ptLine.y + lineinfo.fLineDescent,
|
| + lineinfo.ptLine.x + lineinfo.fLineWidth,
|
| + lineinfo.ptLine.y + lineinfo.fLineAscent);
|
|
|
| - pIterator->NextLine();
|
| + if (m_bNotify && m_pNotify) {
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + CFX_FloatRect rcRefresh = VTToEdit(rcLine);
|
| + m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| + m_bNotifyFlag = FALSE;
|
| + }
|
| }
|
| +
|
| + pIterator->NextLine();
|
| }
|
| }
|
| }
|
| @@ -2132,21 +2088,20 @@ void CFX_Edit::SetCaretInfo() {
|
| if (!m_bNotifyFlag) {
|
| CFX_FloatPoint ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f);
|
|
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_wpCaret);
|
| - CPVT_Word word;
|
| - CPVT_Line line;
|
| - if (pIterator->GetWord(word)) {
|
| - ptHead.x = word.ptWord.x + word.fWidth;
|
| - ptHead.y = word.ptWord.y + word.fAscent;
|
| - ptFoot.x = word.ptWord.x + word.fWidth;
|
| - ptFoot.y = word.ptWord.y + word.fDescent;
|
| - } else if (pIterator->GetLine(line)) {
|
| - ptHead.x = line.ptLine.x;
|
| - ptHead.y = line.ptLine.y + line.fLineAscent;
|
| - ptFoot.x = line.ptLine.x;
|
| - ptFoot.y = line.ptLine.y + line.fLineDescent;
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_wpCaret);
|
| + CPVT_Word word;
|
| + CPVT_Line line;
|
| + if (pIterator->GetWord(word)) {
|
| + ptHead.x = word.ptWord.x + word.fWidth;
|
| + ptHead.y = word.ptWord.y + word.fAscent;
|
| + ptFoot.x = word.ptWord.x + word.fWidth;
|
| + ptFoot.y = word.ptWord.y + word.fDescent;
|
| + } else if (pIterator->GetLine(line)) {
|
| + ptHead.x = line.ptLine.x;
|
| + ptHead.y = line.ptLine.y + line.fLineAscent;
|
| + ptFoot.x = line.ptLine.x;
|
| + ptFoot.y = line.ptLine.y + line.fLineDescent;
|
| }
|
|
|
| m_bNotifyFlag = TRUE;
|
| @@ -2163,30 +2118,29 @@ void CFX_Edit::SetCaretChange() {
|
| if (m_wpCaret == m_wpOldCaret)
|
| return;
|
|
|
| - if (m_bNotify && m_pVT->IsRichText() && m_pNotify) {
|
| - CPVT_SecProps SecProps;
|
| - CPVT_WordProps WordProps;
|
| + if (!m_bNotify || !m_pVT->IsRichText() || !m_pNotify)
|
| + return;
|
|
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_wpCaret);
|
| - CPVT_Word word;
|
| - CPVT_Section section;
|
| + CPVT_SecProps SecProps;
|
| + CPVT_WordProps WordProps;
|
|
|
| - if (pIterator->GetSection(section)) {
|
| - SecProps = section.SecProps;
|
| - WordProps = section.WordProps;
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_wpCaret);
|
| + CPVT_Word word;
|
| + CPVT_Section section;
|
|
|
| - if (pIterator->GetWord(word)) {
|
| - WordProps = word.WordProps;
|
| - }
|
| - }
|
| + if (pIterator->GetSection(section)) {
|
| + SecProps = section.SecProps;
|
| + WordProps = section.WordProps;
|
| + }
|
|
|
| - if (!m_bNotifyFlag) {
|
| - m_bNotifyFlag = TRUE;
|
| - m_pNotify->IOnCaretChange(SecProps, WordProps);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| + if (pIterator->GetWord(word))
|
| + WordProps = word.WordProps;
|
| +
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + m_pNotify->IOnCaretChange(SecProps, WordProps);
|
| + m_bNotifyFlag = FALSE;
|
| }
|
| }
|
|
|
| @@ -2550,11 +2504,10 @@ FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint) {
|
| CPVT_Word word;
|
|
|
| if (bAddUndo) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_wpCaret);
|
| - pIterator->GetSection(section);
|
| - pIterator->GetWord(word);
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_wpCaret);
|
| + pIterator->GetSection(section);
|
| + pIterator->GetWord(word);
|
| }
|
|
|
| m_pVT->UpdateWordPlace(m_wpCaret);
|
| @@ -2613,11 +2566,10 @@ FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint) {
|
| CPVT_Word word;
|
|
|
| if (bAddUndo) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
|
| - pIterator->GetSection(section);
|
| - pIterator->GetWord(word);
|
| - }
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
|
| + pIterator->GetSection(section);
|
| + pIterator->GetWord(word);
|
| }
|
|
|
| m_pVT->UpdateWordPlace(m_wpCaret);
|
| @@ -2679,73 +2631,72 @@ FX_BOOL CFX_Edit::Empty() {
|
| }
|
|
|
| FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) {
|
| - if (m_pVT->IsValid()) {
|
| - if (m_SelState.IsExist()) {
|
| - CPVT_WordRange range = m_SelState.ConvertToWordRange();
|
| + if (!m_pVT->IsValid())
|
| + return FALSE;
|
|
|
| - if (bAddUndo && m_bEnableUndo) {
|
| - if (m_pVT->IsRichText()) {
|
| - BeginGroupUndo(L"");
|
| -
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(range.EndPos);
|
| -
|
| - CPVT_Word wordinfo;
|
| - CPVT_Section secinfo;
|
| - do {
|
| - CPVT_WordPlace place = pIterator->GetAt();
|
| - if (place.WordCmp(range.BeginPos) <= 0)
|
| - break;
|
| -
|
| - CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
|
| -
|
| - if (oldplace.SecCmp(place) != 0) {
|
| - if (pIterator->GetSection(secinfo)) {
|
| - AddEditUndoItem(new CFXEU_ClearRich(
|
| - this, oldplace, place, range, wordinfo.Word,
|
| - wordinfo.nCharset, secinfo.SecProps, secinfo.WordProps));
|
| - }
|
| - } else {
|
| - if (pIterator->GetWord(wordinfo)) {
|
| - oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
|
| - place = m_pVT->AdjustLineHeader(place, TRUE);
|
| + if (!m_SelState.IsExist())
|
| + return FALSE;
|
|
|
| - AddEditUndoItem(new CFXEU_ClearRich(
|
| - this, oldplace, place, range, wordinfo.Word,
|
| - wordinfo.nCharset, secinfo.SecProps, wordinfo.WordProps));
|
| - }
|
| - }
|
| - } while (pIterator->PrevWord());
|
| - }
|
| - EndGroupUndo();
|
| - } else {
|
| - AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
|
| - }
|
| - }
|
| + CPVT_WordRange range = m_SelState.ConvertToWordRange();
|
|
|
| - SelectNone();
|
| - SetCaret(m_pVT->DeleteWords(range));
|
| - m_SelState.Set(m_wpCaret, m_wpCaret);
|
| + if (bAddUndo && m_bEnableUndo) {
|
| + if (m_pVT->IsRichText()) {
|
| + BeginGroupUndo(L"");
|
|
|
| - if (bPaint) {
|
| - RearrangePart(range);
|
| - ScrollToCaret();
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(range.EndPos);
|
|
|
| - CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
|
| - Refresh(RP_ANALYSE, &wr);
|
| + CPVT_Word wordinfo;
|
| + CPVT_Section secinfo;
|
| + do {
|
| + CPVT_WordPlace place = pIterator->GetAt();
|
| + if (place.WordCmp(range.BeginPos) <= 0)
|
| + break;
|
|
|
| - SetCaretOrigin();
|
| - SetCaretInfo();
|
| - }
|
| + CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
|
|
|
| - if (m_bOprNotify && m_pOprNotify)
|
| - m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
|
| + if (oldplace.SecCmp(place) != 0) {
|
| + if (pIterator->GetSection(secinfo)) {
|
| + AddEditUndoItem(new CFXEU_ClearRich(
|
| + this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
|
| + secinfo.SecProps, secinfo.WordProps));
|
| + }
|
| + } else {
|
| + if (pIterator->GetWord(wordinfo)) {
|
| + oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
|
| + place = m_pVT->AdjustLineHeader(place, TRUE);
|
|
|
| - return TRUE;
|
| + AddEditUndoItem(new CFXEU_ClearRich(
|
| + this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
|
| + secinfo.SecProps, wordinfo.WordProps));
|
| + }
|
| + }
|
| + } while (pIterator->PrevWord());
|
| + EndGroupUndo();
|
| + } else {
|
| + AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
|
| }
|
| }
|
|
|
| - return FALSE;
|
| + SelectNone();
|
| + SetCaret(m_pVT->DeleteWords(range));
|
| + m_SelState.Set(m_wpCaret, m_wpCaret);
|
| +
|
| + if (bPaint) {
|
| + RearrangePart(range);
|
| + ScrollToCaret();
|
| +
|
| + CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
|
| + Refresh(RP_ANALYSE, &wr);
|
| +
|
| + SetCaretOrigin();
|
| + SetCaretInfo();
|
| + }
|
| +
|
| + if (m_bOprNotify && m_pOprNotify)
|
| + m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
|
| +
|
| + return TRUE;
|
| }
|
|
|
| FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
|
| @@ -2819,19 +2770,19 @@ FX_BOOL CFX_Edit::Undo() {
|
| }
|
|
|
| void CFX_Edit::SetCaretOrigin() {
|
| - if (m_pVT->IsValid()) {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - pIterator->SetAt(m_wpCaret);
|
| - CPVT_Word word;
|
| - CPVT_Line line;
|
| - if (pIterator->GetWord(word)) {
|
| - m_ptCaret.x = word.ptWord.x + word.fWidth;
|
| - m_ptCaret.y = word.ptWord.y;
|
| - } else if (pIterator->GetLine(line)) {
|
| - m_ptCaret.x = line.ptLine.x;
|
| - m_ptCaret.y = line.ptLine.y;
|
| - }
|
| - }
|
| + if (!m_pVT->IsValid())
|
| + return;
|
| +
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + pIterator->SetAt(m_wpCaret);
|
| + CPVT_Word word;
|
| + CPVT_Line line;
|
| + if (pIterator->GetWord(word)) {
|
| + m_ptCaret.x = word.ptWord.x + word.fWidth;
|
| + m_ptCaret.y = word.ptWord.y;
|
| + } else if (pIterator->GetLine(line)) {
|
| + m_ptCaret.x = line.ptLine.x;
|
| + m_ptCaret.y = line.ptLine.y;
|
| }
|
| }
|
|
|
| @@ -2933,35 +2884,29 @@ void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) {
|
| }
|
|
|
| FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordPlace wpOld = pIterator->GetAt();
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordPlace wpOld = pIterator->GetAt();
|
|
|
| - pIterator->SetAt(place);
|
| - CPVT_Line line;
|
| - pIterator->GetLine(line);
|
| + pIterator->SetAt(place);
|
| + CPVT_Line line;
|
| + pIterator->GetLine(line);
|
|
|
| - pIterator->SetAt(wpOld);
|
| + pIterator->SetAt(wpOld);
|
|
|
| - return line.ptLine.y + line.fLineAscent;
|
| - }
|
| -
|
| - return 0.0f;
|
| + return line.ptLine.y + line.fLineAscent;
|
| }
|
|
|
| FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const {
|
| - if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
|
| - CPVT_WordPlace wpOld = pIterator->GetAt();
|
| + CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
|
| + CPVT_WordPlace wpOld = pIterator->GetAt();
|
|
|
| - pIterator->SetAt(place);
|
| - CPVT_Line line;
|
| - pIterator->GetLine(line);
|
| + pIterator->SetAt(place);
|
| + CPVT_Line line;
|
| + pIterator->GetLine(line);
|
|
|
| - pIterator->SetAt(wpOld);
|
| -
|
| - return line.ptLine.y + line.fLineDescent;
|
| - }
|
| + pIterator->SetAt(wpOld);
|
|
|
| - return 0.0f;
|
| + return line.ptLine.y + line.fLineDescent;
|
| }
|
|
|
| CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place,
|
|
|