summaryrefslogtreecommitdiff
path: root/xfa/fwl/core/ifwl_edit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fwl/core/ifwl_edit.cpp')
-rw-r--r--xfa/fwl/core/ifwl_edit.cpp472
1 files changed, 103 insertions, 369 deletions
diff --git a/xfa/fwl/core/ifwl_edit.cpp b/xfa/fwl/core/ifwl_edit.cpp
index 1679a5b16d..aa3fdcec39 100644
--- a/xfa/fwl/core/ifwl_edit.cpp
+++ b/xfa/fwl/core/ifwl_edit.cpp
@@ -62,14 +62,9 @@ IFWL_Edit::IFWL_Edit(const IFWL_App* app,
m_bLButtonDown(false),
m_nSelStart(0),
m_nLimit(-1),
- m_fSpaceAbove(0),
- m_fSpaceBelow(0),
m_fFontSize(0),
m_bSetRange(false),
- m_iMin(-1),
m_iMax(0xFFFFFFF),
- m_backColor(0),
- m_updateBackColor(false),
m_iCurRecord(-1),
m_iMaxRecord(128) {
m_rtClient.Reset();
@@ -77,8 +72,6 @@ IFWL_Edit::IFWL_Edit(const IFWL_App* app,
m_rtStatic.Reset();
InitCaret();
- if (!m_pEdtEngine)
- InitEngine();
}
IFWL_Edit::~IFWL_Edit() {
@@ -95,16 +88,15 @@ FWL_Type IFWL_Edit::GetClassID() const {
void IFWL_Edit::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) {
if (bAutoSize) {
rect.Set(0, 0, 0, 0);
- if (m_pEdtEngine) {
- int32_t iTextLen = m_pEdtEngine->GetTextLength();
- if (iTextLen > 0) {
- CFX_WideString wsText;
- m_pEdtEngine->GetText(wsText, 0);
- CFX_SizeF sz = CalcTextSize(
- wsText, m_pProperties->m_pThemeProvider,
- !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
- rect.Set(0, 0, sz.x, sz.y);
- }
+
+ int32_t iTextLen = m_EdtEngine.GetTextLength();
+ if (iTextLen > 0) {
+ CFX_WideString wsText;
+ m_EdtEngine.GetText(wsText, 0);
+ CFX_SizeF sz = CalcTextSize(
+ wsText, m_pProperties->m_pThemeProvider,
+ !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
+ rect.Set(0, 0, sz.x, sz.y);
}
IFWL_Widget::GetWidgetRect(rect, true);
} else {
@@ -180,10 +172,10 @@ void IFWL_Edit::AddSpellCheckObj(CFX_Path& PathData,
FX_FLOAT fEndX = 0.0f;
FX_FLOAT fY = 0.0f;
FX_FLOAT fStep = 0.0f;
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
CFX_RectFArray rectArray;
CFX_RectF rectText;
- const FDE_TXTEDTPARAMS* txtEdtParams = m_pEdtEngine->GetEditParams();
+ const FDE_TXTEDTPARAMS* txtEdtParams = m_EdtEngine.GetEditParams();
FX_FLOAT fAsent = (FX_FLOAT)txtEdtParams->pFont->GetAscent() *
txtEdtParams->fFontSize / 1000;
pPage->CalcRangeRectArray(nStart, nCount, rectArray);
@@ -196,69 +188,6 @@ void IFWL_Edit::AddSpellCheckObj(CFX_Path& PathData,
AddSquigglyPath(&PathData, fStartX, fEndX, fY, fStep);
}
}
-int32_t IFWL_Edit::GetWordAtPoint(CFX_PointF pointf, int32_t& nCount) {
- return 0;
-}
-bool IFWL_Edit::GetSuggestWords(CFX_PointF pointf,
- std::vector<CFX_ByteString>& sSuggest) {
- int32_t nWordCount = 0;
- int32_t nWordStart = GetWordAtPoint(pointf, nWordCount);
- if (nWordCount < 1) {
- return false;
- }
- CFX_WideString wsSpell;
- GetText(wsSpell, nWordStart, nWordCount);
- CFX_ByteString sLatinWord;
- for (int i = 0; i < nWordCount; i++) {
- if (!FX_EDIT_ISLATINWORD(wsSpell[i])) {
- break;
- }
- sLatinWord += (FX_CHAR)wsSpell[i];
- }
- if (sLatinWord.IsEmpty()) {
- return false;
- }
- CFWL_EvtEdtCheckWord checkWordEvent;
- checkWordEvent.m_pSrcTarget = this;
- checkWordEvent.bsWord = sLatinWord;
- checkWordEvent.bCheckWord = true;
- DispatchEvent(&checkWordEvent);
- if (checkWordEvent.bCheckWord) {
- return false;
- }
- CFWL_EvtEdtGetSuggestWords suggestWordsEvent;
- suggestWordsEvent.m_pSrcTarget = this;
- suggestWordsEvent.bsWord = sLatinWord;
- suggestWordsEvent.bsArraySuggestWords = sSuggest;
- suggestWordsEvent.bSuggestWords = false;
- DispatchEvent(&checkWordEvent);
- return suggestWordsEvent.bSuggestWords;
-}
-bool IFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace) {
- int32_t nWordCount = 0;
- int32_t nWordStart = GetWordAtPoint(pointf, nWordCount);
- if (nWordCount < 1) {
- return false;
- }
- CFX_WideString wsSpell;
- GetText(wsSpell, nWordStart, nWordCount);
- for (int i = 0; i < nWordCount; i++) {
- if (!FX_EDIT_ISLATINWORD(wsSpell[i])) {
- nWordCount = i;
- break;
- }
- }
- int32_t nDestLen = bsReplace.GetLength();
- CFX_WideString wsDest;
- FX_WCHAR* pBuffer = wsDest.GetBuffer(nDestLen);
- for (int32_t i = 0; i < nDestLen; i++) {
- pBuffer[i] = bsReplace[i];
- }
- wsDest.ReleaseBuffer(nDestLen);
- Replace(nWordStart, nWordCount, wsDest.AsStringC());
- return true;
-}
void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics,
const CFX_Matrix* pMatrix) {
pGraphics->SaveGraphState();
@@ -329,9 +258,9 @@ void IFWL_Edit::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) {
if (!m_pWidgetMgr->IsFormDisabled()) {
DrawTextBk(pGraphics, pTheme, pMatrix);
}
- if (m_pEdtEngine) {
- DrawContent(pGraphics, pTheme, pMatrix);
- }
+
+ DrawContent(pGraphics, pTheme, pMatrix);
+
if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) &&
!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) {
DrawSpellCheck(pGraphics, pMatrix);
@@ -358,154 +287,55 @@ void IFWL_Edit::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) {
m_pProperties->m_pThemeProvider = pThemeProvider;
}
-FWL_Error IFWL_Edit::SetText(const CFX_WideString& wsText) {
- m_pEdtEngine->SetText(wsText);
- return FWL_Error::Succeeded;
+void IFWL_Edit::SetText(const CFX_WideString& wsText) {
+ m_EdtEngine.SetText(wsText);
}
int32_t IFWL_Edit::GetTextLength() const {
- if (!m_pEdtEngine)
- return -1;
- return m_pEdtEngine->GetTextLength();
-}
-
-FWL_Error IFWL_Edit::GetText(CFX_WideString& wsText,
- int32_t nStart,
- int32_t nCount) const {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->GetText(wsText, nStart, nCount);
- return FWL_Error::Succeeded;
+ return m_EdtEngine.GetTextLength();
}
-FWL_Error IFWL_Edit::ClearText() {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->ClearText();
- return FWL_Error::Succeeded;
+void IFWL_Edit::GetText(CFX_WideString& wsText,
+ int32_t nStart,
+ int32_t nCount) {
+ m_EdtEngine.GetText(wsText, nStart, nCount);
}
-int32_t IFWL_Edit::GetCaretPos() const {
- if (!m_pEdtEngine)
- return -1;
- return m_pEdtEngine->GetCaretPos();
+void IFWL_Edit::ClearText() {
+ m_EdtEngine.ClearText();
}
-int32_t IFWL_Edit::SetCaretPos(int32_t nIndex, bool bBefore) {
- if (!m_pEdtEngine)
- return -1;
- return m_pEdtEngine->SetCaretPos(nIndex, bBefore);
-}
-
-FWL_Error IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->AddSelRange(nStart, nCount);
- return FWL_Error::Succeeded;
+void IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
+ m_EdtEngine.AddSelRange(nStart, nCount);
}
int32_t IFWL_Edit::CountSelRanges() {
- if (!m_pEdtEngine)
- return 0;
- return m_pEdtEngine->CountSelRanges();
+ return m_EdtEngine.CountSelRanges();
}
int32_t IFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) {
- if (!m_pEdtEngine)
- return -1;
- return m_pEdtEngine->GetSelRange(nIndex, nStart);
+ return m_EdtEngine.GetSelRange(nIndex, nStart);
}
-FWL_Error IFWL_Edit::ClearSelections() {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->ClearSelection();
- return FWL_Error::Succeeded;
+void IFWL_Edit::ClearSelections() {
+ m_EdtEngine.ClearSelection();
}
int32_t IFWL_Edit::GetLimit() {
return m_nLimit;
}
-FWL_Error IFWL_Edit::SetLimit(int32_t nLimit) {
+void IFWL_Edit::SetLimit(int32_t nLimit) {
m_nLimit = nLimit;
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->SetLimit(nLimit);
- return FWL_Error::Succeeded;
+ m_EdtEngine.SetLimit(nLimit);
}
-FWL_Error IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->SetAliasChar(wAlias);
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::Insert(int32_t nStart,
- const FX_WCHAR* lpText,
- int32_t nLen) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
- (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
- return FWL_Error::Indefinite;
- }
- m_pEdtEngine->Insert(nStart, lpText, nLen);
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DeleteSelections() {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- int32_t iCount = m_pEdtEngine->CountSelRanges();
- if (iCount > 0)
- m_pEdtEngine->Delete(-1);
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->DeleteRange(nStart, nCount);
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::Replace(int32_t nStart,
- int32_t nLen,
- const CFX_WideStringC& wsReplace) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- m_pEdtEngine->Replace(nStart, nLen, CFX_WideString(wsReplace));
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DoClipboard(int32_t iCmd) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
- (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
- return FWL_Error::Succeeded;
- }
- return FWL_Error::Indefinite;
+void IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
+ m_EdtEngine.SetAliasChar(wAlias);
}
bool IFWL_Edit::Copy(CFX_WideString& wsCopy) {
- if (!m_pEdtEngine)
- return false;
-
- int32_t nCount = m_pEdtEngine->CountSelRanges();
+ int32_t nCount = m_EdtEngine.CountSelRanges();
if (nCount == 0)
return false;
@@ -513,8 +343,8 @@ bool IFWL_Edit::Copy(CFX_WideString& wsCopy) {
CFX_WideString wsTemp;
int32_t nStart, nLength;
for (int32_t i = 0; i < nCount; i++) {
- nLength = m_pEdtEngine->GetSelRange(i, nStart);
- m_pEdtEngine->GetText(wsTemp, nStart, nLength);
+ nLength = m_EdtEngine.GetSelRange(i, nStart);
+ m_EdtEngine.GetText(wsTemp, nStart, nLength);
wsCopy += wsTemp;
wsTemp.clear();
}
@@ -522,10 +352,7 @@ bool IFWL_Edit::Copy(CFX_WideString& wsCopy) {
}
bool IFWL_Edit::Cut(CFX_WideString& wsCut) {
- if (!m_pEdtEngine)
- return false;
-
- int32_t nCount = m_pEdtEngine->CountSelRanges();
+ int32_t nCount = m_EdtEngine.CountSelRanges();
if (nCount == 0)
return false;
@@ -533,22 +360,19 @@ bool IFWL_Edit::Cut(CFX_WideString& wsCut) {
CFX_WideString wsTemp;
int32_t nStart, nLength;
for (int32_t i = 0; i < nCount; i++) {
- nLength = m_pEdtEngine->GetSelRange(i, nStart);
- m_pEdtEngine->GetText(wsTemp, nStart, nLength);
+ nLength = m_EdtEngine.GetSelRange(i, nStart);
+ m_EdtEngine.GetText(wsTemp, nStart, nLength);
wsCut += wsTemp;
wsTemp.clear();
}
- m_pEdtEngine->Delete(0);
+ m_EdtEngine.Delete(0);
return true;
}
bool IFWL_Edit::Paste(const CFX_WideString& wsPaste) {
- if (!m_pEdtEngine)
- return false;
-
- int32_t nCaret = m_pEdtEngine->GetCaretPos();
+ int32_t nCaret = m_EdtEngine.GetCaretPos();
int32_t iError =
- m_pEdtEngine->Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength());
+ m_EdtEngine.Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength());
if (iError < 0) {
ProcessInsertError(iError);
return false;
@@ -556,32 +380,16 @@ bool IFWL_Edit::Paste(const CFX_WideString& wsPaste) {
return true;
}
-bool IFWL_Edit::Delete() {
- if (!m_pEdtEngine)
- return false;
-
- int32_t nCount = m_pEdtEngine->CountSelRanges();
- if (nCount < 1)
- return false;
-
- m_pEdtEngine->Delete(0);
- return true;
-}
-
bool IFWL_Edit::Redo(const IFDE_TxtEdtDoRecord* pRecord) {
- if (!m_pEdtEngine)
- return false;
if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo)
return true;
- return m_pEdtEngine->Redo(pRecord);
+ return m_EdtEngine.Redo(pRecord);
}
bool IFWL_Edit::Undo(const IFDE_TxtEdtDoRecord* pRecord) {
- if (!m_pEdtEngine)
- return false;
if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo)
return true;
- return m_pEdtEngine->Undo(pRecord);
+ return m_EdtEngine.Undo(pRecord);
}
bool IFWL_Edit::Undo() {
@@ -604,26 +412,8 @@ bool IFWL_Edit::CanRedo() {
return m_iCurRecord < pdfium::CollectionSize<int32_t>(m_DoRecords) - 1;
}
-FWL_Error IFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, bool bEquidistant) {
- if (!m_pEdtEngine)
- return FWL_Error::Indefinite;
-
- FDE_TXTEDTPARAMS* pParams = m_pEdtEngine->GetEditParams();
- pParams->fTabWidth = fTabWidth;
- pParams->bTabEquidistant = bEquidistant;
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetOuter(IFWL_Widget* pOuter) {
+void IFWL_Edit::SetOuter(IFWL_Widget* pOuter) {
m_pOuter = pOuter;
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) {
- m_iMin = iMin;
- m_iMax = iMax;
- m_bSetRange = true;
- return FWL_Error::Succeeded;
}
void IFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
@@ -660,7 +450,7 @@ void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit,
if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask)
UpdateVAlignment();
- IFDE_TxtEdtPage* page = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* page = m_EdtEngine.GetPage(0);
FX_FLOAT fContentWidth = page->GetContentsBox().width;
FX_FLOAT fContentHeight = page->GetContentsBox().height;
CFX_RectF rtTemp;
@@ -697,7 +487,7 @@ void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit,
if (bNeedUpdate) {
UpdateEditParams();
UpdateEditLayout();
- IFDE_TxtEdtPage* page1 = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* page1 = m_EdtEngine.GetPage(0);
fContentWidth1 = page1->GetContentsBox().width;
fContentHeight1 = page1->GetContentsBox().height;
}
@@ -729,7 +519,7 @@ void IFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) {
bool IFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit,
int32_t nPageIndex,
int32_t nPurpose) {
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(nPageIndex);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
if (!pPage)
return false;
pPage->LoadPage(nullptr, nullptr);
@@ -739,7 +529,7 @@ bool IFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit,
bool IFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit,
int32_t nPageIndex,
int32_t nPurpose) {
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(nPageIndex);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
if (!pPage)
return false;
pPage->UnloadPage(nullptr);
@@ -765,18 +555,6 @@ bool IFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) {
return event.bValidate;
}
-FWL_Error IFWL_Edit::SetBackgroundColor(uint32_t color) {
- m_backColor = color;
- m_updateBackColor = true;
- return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) {
- m_wsFont = wsFont;
- m_fFontSize = fSize;
- return FWL_Error::Succeeded;
-}
-
void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) {
m_fScrollOffsetY = fScrollOffset;
}
@@ -816,9 +594,7 @@ void IFWL_Edit::DrawTextBk(CFX_Graphics* pGraphics,
void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics,
IFWL_ThemeProvider* pTheme,
const CFX_Matrix* pMatrix) {
- if (!m_pEdtEngine)
- return;
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return;
pGraphics->SaveGraphState();
@@ -843,7 +619,7 @@ void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics,
FWL_WGTSTATE_Deactivated;
}
}
- int32_t nSelCount = m_pEdtEngine->CountSelRanges();
+ int32_t nSelCount = m_EdtEngine.CountSelRanges();
if (bShowSel && nSelCount > 0) {
int32_t nPageCharStart = pPage->GetCharStart();
int32_t nPageCharCount = pPage->GetCharCount();
@@ -853,7 +629,7 @@ void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics,
CFX_RectFArray rectArr;
int32_t i = 0;
for (i = 0; i < nSelCount; i++) {
- nCharCount = m_pEdtEngine->GetSelRange(i, nCharStart);
+ nCharCount = m_EdtEngine.GetSelRange(i, nCharStart);
int32_t nCharEnd = nCharStart + nCharCount - 1;
if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) {
continue;
@@ -917,7 +693,7 @@ void IFWL_Edit::UpdateEditEngine() {
UpdateEditParams();
UpdateEditLayout();
if (m_nLimit > -1) {
- m_pEdtEngine->SetLimit(m_nLimit);
+ m_EdtEngine.SetLimit(m_nLimit);
}
}
void IFWL_Edit::UpdateEditParams() {
@@ -1033,34 +809,34 @@ void IFWL_Edit::UpdateEditParams() {
params.wLineBreakChar = L'\n';
params.nCharRotation = 0;
params.pEventSink = this;
- m_pEdtEngine->SetEditParams(params);
+ m_EdtEngine.SetEditParams(params);
}
void IFWL_Edit::UpdateEditLayout() {
- if (m_pEdtEngine->GetTextLength() <= 0)
- m_pEdtEngine->SetTextByStream(nullptr);
+ if (m_EdtEngine.GetTextLength() <= 0)
+ m_EdtEngine.SetTextByStream(nullptr);
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (pPage)
pPage->UnloadPage(nullptr);
- m_pEdtEngine->StartLayout();
- m_pEdtEngine->DoLayout(nullptr);
- m_pEdtEngine->EndLayout();
- pPage = m_pEdtEngine->GetPage(0);
+ m_EdtEngine.StartLayout();
+ m_EdtEngine.DoLayout(nullptr);
+ m_EdtEngine.EndLayout();
+ pPage = m_EdtEngine.GetPage(0);
if (pPage)
pPage->LoadPage(nullptr, nullptr);
}
bool IFWL_Edit::UpdateOffset() {
CFX_RectF rtCaret;
- m_pEdtEngine->GetCaretRect(rtCaret);
+ m_EdtEngine.GetCaretRect(rtCaret);
FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX;
FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset;
rtCaret.Offset(fOffSetX, fOffSetY);
const CFX_RectF& rtEidt = m_rtEngine;
if (rtEidt.Contains(rtCaret)) {
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return false;
@@ -1105,7 +881,7 @@ bool IFWL_Edit::UpdateOffset(IFWL_ScrollBar* pScrollBar, FX_FLOAT fPosChanged) {
}
void IFWL_Edit::UpdateVAlignment() {
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return;
const CFX_RectF& rtFDE = pPage->GetContentsBox();
@@ -1144,7 +920,7 @@ void IFWL_Edit::UpdateVAlignment() {
}
void IFWL_Edit::UpdateCaret() {
CFX_RectF rtFDE;
- m_pEdtEngine->GetCaretRect(rtFDE);
+ m_EdtEngine.GetCaretRect(rtFDE);
rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX,
m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset);
CFX_RectF rtCaret;
@@ -1189,7 +965,7 @@ IFWL_ScrollBar* IFWL_Edit::UpdateScroll() {
if (!bShowHorz && !bShowVert) {
return nullptr;
}
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return nullptr;
const CFX_RectF& rtFDE = pPage->GetContentsBox();
@@ -1230,7 +1006,7 @@ IFWL_ScrollBar* IFWL_Edit::UpdateScroll() {
m_pVertScrollBar->GetWidgetRect(rtScroll);
if (rtScroll.height < rtFDE.height) {
m_pVertScrollBar->LockUpdate();
- FX_FLOAT fStep = m_pEdtEngine->GetEditParams()->fLineSpace;
+ FX_FLOAT fStep = m_EdtEngine.GetEditParams()->fLineSpace;
FX_FLOAT fRange = rtFDE.height - m_rtEngine.height;
if (fRange < fStep) {
fRange = fStep;
@@ -1277,9 +1053,7 @@ bool IFWL_Edit::IsShowScrollBar(bool bVert) {
(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine);
}
bool IFWL_Edit::IsContentHeightOverflow() {
- if (!m_pEdtEngine)
- return false;
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return false;
return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f;
@@ -1455,11 +1229,6 @@ void IFWL_Edit::InitScrollBar(bool bVert) {
m_pHorzScrollBar.reset(sb);
}
-void IFWL_Edit::InitEngine() {
- if (!m_pEdtEngine)
- m_pEdtEngine.reset(new CFDE_TxtEdtEngine);
-}
-
bool FWL_ShowCaret(IFWL_Widget* pWidget,
bool bVisible,
const CFX_RectF* pRtAnchor) {
@@ -1510,21 +1279,18 @@ void IFWL_Edit::ShowCaret(bool bVisible, CFX_RectF* pRect) {
}
}
bool IFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) {
- if (!m_pEdtEngine) {
- return false;
- }
if (!m_bSetRange) {
return true;
}
CFX_WideString wsOld, wsText;
- m_pEdtEngine->GetText(wsText, 0);
+ m_EdtEngine.GetText(wsText, 0);
if (wsText.IsEmpty()) {
if (cNum == L'0') {
return false;
}
return true;
}
- int32_t caretPos = m_pEdtEngine->GetCaretPos();
+ int32_t caretPos = m_EdtEngine.GetCaretPos();
int32_t iSel = CountSelRanges();
if (iSel == 0) {
if (cNum == L'0' && caretPos == 0) {
@@ -1571,7 +1337,8 @@ void IFWL_Edit::ProcessInsertError(int32_t iError) {
DispatchEvent(&textFullEvent);
break;
}
- default: {}
+ default:
+ break;
}
}
@@ -1661,10 +1428,8 @@ void IFWL_Edit::DoDeactivate(CFWL_MsgDeactivate* pMsg) {
void IFWL_Edit::DoButtonDown(CFWL_MsgMouse* pMsg) {
if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
SetFocus(true);
- if (!m_pEdtEngine)
- UpdateEditEngine();
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return;
CFX_PointF pt(pMsg->m_fx, pMsg->m_fy);
@@ -1674,7 +1439,7 @@ void IFWL_Edit::DoButtonDown(CFWL_MsgMouse* pMsg) {
if (nIndex < 0)
nIndex = 0;
- m_pEdtEngine->SetCaretPos(nIndex, bBefore);
+ m_EdtEngine.SetCaretPos(nIndex, bBefore);
}
void IFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
@@ -1682,8 +1447,6 @@ void IFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
bool bRepaint = !!(dwStyleEx & FWL_STYLEEXT_EDT_InnerCaret);
if (bSet) {
m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
- if (!m_pEdtEngine)
- UpdateEditEngine();
UpdateVAlignment();
UpdateOffset();
@@ -1691,13 +1454,13 @@ void IFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
} else if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) {
m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
ShowCaret(false);
- if (m_pEdtEngine && (dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) {
+ if ((dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) {
int32_t nSel = CountSelRanges();
if (nSel > 0) {
ClearSelections();
bRepaint = true;
}
- SetCaretPos(0);
+ m_EdtEngine.SetCaretPos(0, true);
UpdateOffset();
}
ClearRecord();
@@ -1718,11 +1481,11 @@ void IFWL_Edit::OnLButtonDown(CFWL_MsgMouse* pMsg) {
m_bLButtonDown = true;
SetGrab(true);
DoButtonDown(pMsg);
- int32_t nIndex = m_pEdtEngine->GetCaretPos();
+ int32_t nIndex = m_EdtEngine.GetCaretPos();
bool bRepaint = false;
- int32_t iCount = m_pEdtEngine->CountSelRanges();
+ int32_t iCount = m_EdtEngine.CountSelRanges();
if (iCount > 0) {
- m_pEdtEngine->ClearSelection();
+ m_EdtEngine.ClearSelection();
bRepaint = true;
}
@@ -1730,7 +1493,7 @@ void IFWL_Edit::OnLButtonDown(CFWL_MsgMouse* pMsg) {
if (bShift && m_nSelStart != nIndex) {
int32_t iStart = std::min(m_nSelStart, nIndex);
int32_t iEnd = std::max(m_nSelStart, nIndex);
- m_pEdtEngine->AddSelRange(iStart, iEnd - iStart);
+ m_EdtEngine.AddSelRange(iStart, iEnd - iStart);
bRepaint = true;
} else {
m_nSelStart = nIndex;
@@ -1745,10 +1508,7 @@ void IFWL_Edit::OnLButtonUp(CFWL_MsgMouse* pMsg) {
}
void IFWL_Edit::OnButtonDblClk(CFWL_MsgMouse* pMsg) {
- if (!m_pEdtEngine)
- return;
-
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return;
@@ -1759,18 +1519,16 @@ void IFWL_Edit::OnButtonDblClk(CFWL_MsgMouse* pMsg) {
if (nIndex < 0)
return;
- m_pEdtEngine->AddSelRange(nIndex, nCount);
- m_pEdtEngine->SetCaretPos(nIndex + nCount - 1, false);
+ m_EdtEngine.AddSelRange(nIndex, nCount);
+ m_EdtEngine.SetCaretPos(nIndex + nCount - 1, false);
Repaint(&m_rtEngine);
}
void IFWL_Edit::OnMouseMove(CFWL_MsgMouse* pMsg) {
- if (!m_pEdtEngine)
- return;
if (m_nSelStart == -1 || !m_bLButtonDown)
return;
- IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+ IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
if (!pPage)
return;
@@ -1778,23 +1536,20 @@ void IFWL_Edit::OnMouseMove(CFWL_MsgMouse* pMsg) {
DeviceToEngine(pt);
bool bBefore = true;
int32_t nIndex = pPage->GetCharIndex(pt, bBefore);
- m_pEdtEngine->SetCaretPos(nIndex, bBefore);
- nIndex = m_pEdtEngine->GetCaretPos();
- m_pEdtEngine->ClearSelection();
+ m_EdtEngine.SetCaretPos(nIndex, bBefore);
+ nIndex = m_EdtEngine.GetCaretPos();
+ m_EdtEngine.ClearSelection();
if (nIndex != m_nSelStart) {
- int32_t nLen = m_pEdtEngine->GetTextLength();
+ int32_t nLen = m_EdtEngine.GetTextLength();
if (m_nSelStart >= nLen)
m_nSelStart = nLen;
- m_pEdtEngine->AddSelRange(std::min(m_nSelStart, nIndex),
- FXSYS_abs(nIndex - m_nSelStart));
+ m_EdtEngine.AddSelRange(std::min(m_nSelStart, nIndex),
+ FXSYS_abs(nIndex - m_nSelStart));
}
}
void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) {
- if (!m_pEdtEngine)
- return;
-
FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone;
bool bShift = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Shift);
bool bCtrl = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl);
@@ -1831,11 +1586,11 @@ void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) {
(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
break;
}
- int32_t nCaret = m_pEdtEngine->GetCaretPos();
+ int32_t nCaret = m_EdtEngine.GetCaretPos();
#if (_FX_OS_ == _FX_MACOSX_)
- m_pEdtEngine->Delete(nCaret, true);
+ m_EdtEngine.Delete(nCaret, true);
#else
- m_pEdtEngine->Delete(nCaret);
+ m_EdtEngine.Delete(nCaret);
#endif
break;
}
@@ -1845,29 +1600,11 @@ void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) {
DispatchKeyEvent(pMsg);
break;
}
- default: {
-#if (_FX_OS_ == _FX_MACOSX_)
- if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) {
-#else
- if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) {
-#endif
- if (dwKeyCode == 0x43 || dwKeyCode == 0x63) {
- DoClipboard(1);
- return;
- }
- if (dwKeyCode == 0x58 || dwKeyCode == 0x78) {
- DoClipboard(2);
- return;
- }
- if (dwKeyCode == 0x56 || dwKeyCode == 0x76) {
- DoClipboard(3);
- return;
- }
- }
- }
+ default:
+ break;
}
if (MoveCaret != MC_MoveNone)
- m_pEdtEngine->MoveCaretPos(MoveCaret, bShift, bCtrl);
+ m_EdtEngine.MoveCaretPos(MoveCaret, bShift, bCtrl);
}
void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) {
@@ -1875,27 +1612,25 @@ void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) {
(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
return;
}
- if (!m_pEdtEngine)
- return;
int32_t iError = 0;
FX_WCHAR c = (FX_WCHAR)pMsg->m_dwKeyCode;
- int32_t nCaret = m_pEdtEngine->GetCaretPos();
+ int32_t nCaret = m_EdtEngine.GetCaretPos();
switch (c) {
case FWL_VKEY_Back:
- m_pEdtEngine->Delete(nCaret, true);
+ m_EdtEngine.Delete(nCaret, true);
break;
case 0x0A:
break;
case FWL_VKEY_Escape:
break;
case FWL_VKEY_Tab: {
- iError = m_pEdtEngine->Insert(nCaret, L"\t", 1);
+ iError = m_EdtEngine.Insert(nCaret, L"\t", 1);
break;
}
case FWL_VKEY_Return: {
if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) {
- iError = m_pEdtEngine->Insert(nCaret, L"\n", 1);
+ iError = m_EdtEngine.Insert(nCaret, L"\n", 1);
}
break;
}
@@ -1919,7 +1654,7 @@ void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) {
{
break;
}
- iError = m_pEdtEngine->Insert(nCaret, &c, 1);
+ iError = m_EdtEngine.Insert(nCaret, &c, 1);
break;
}
}
@@ -1982,9 +1717,8 @@ bool IFWL_Edit::OnScroll(IFWL_ScrollBar* pScrollBar,
pScrollBar->SetPos(fPos);
pScrollBar->SetTrackPos(fPos);
UpdateOffset(pScrollBar, fPos - iCurPos);
- if (m_pEdtEngine) {
- UpdateCaret();
- }
+ UpdateCaret();
+
CFX_RectF rect;
GetWidgetRect(rect);
CFX_RectF rtInvalidate;