| OLD | NEW | 
|---|
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 
| 6 | 6 | 
| 7 #include "xfa/fwl/core/ifwl_edit.h" | 7 #include "xfa/fwl/core/ifwl_edit.h" | 
| 8 | 8 | 
| 9 #include <algorithm> | 9 #include <algorithm> | 
| 10 #include <memory> | 10 #include <memory> | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 38          c == 0x0027; | 38          c == 0x0027; | 
| 39 } | 39 } | 
| 40 | 40 | 
| 41 void AddSquigglyPath(CFX_Path* pPathData, | 41 void AddSquigglyPath(CFX_Path* pPathData, | 
| 42                      FX_FLOAT fStartX, | 42                      FX_FLOAT fStartX, | 
| 43                      FX_FLOAT fEndX, | 43                      FX_FLOAT fEndX, | 
| 44                      FX_FLOAT fY, | 44                      FX_FLOAT fY, | 
| 45                      FX_FLOAT fStep) { | 45                      FX_FLOAT fStep) { | 
| 46   pPathData->MoveTo(fStartX, fY); | 46   pPathData->MoveTo(fStartX, fY); | 
| 47   int i = 1; | 47   int i = 1; | 
| 48   for (FX_FLOAT fx = fStartX + fStep; fx < fEndX; fx += fStep, ++i) { | 48   for (FX_FLOAT fx = fStartX + fStep; fx < fEndX; fx += fStep, ++i) | 
| 49     pPathData->LineTo(fx, fY + (i & 1) * fStep); | 49     pPathData->LineTo(fx, fY + (i & 1) * fStep); | 
| 50   } |  | 
| 51 } | 50 } | 
| 52 | 51 | 
| 53 }  // namespace | 52 }  // namespace | 
| 54 | 53 | 
| 55 IFWL_Edit::IFWL_Edit(const IFWL_App* app, | 54 IFWL_Edit::IFWL_Edit(const IFWL_App* app, | 
| 56                      std::unique_ptr<CFWL_WidgetProperties> properties, | 55                      std::unique_ptr<CFWL_WidgetProperties> properties, | 
| 57                      IFWL_Widget* pOuter) | 56                      IFWL_Widget* pOuter) | 
| 58     : IFWL_Widget(app, std::move(properties), pOuter), | 57     : IFWL_Widget(app, std::move(properties), pOuter), | 
| 59       m_fVAlignOffset(0.0f), | 58       m_fVAlignOffset(0.0f), | 
| 60       m_fScrollOffsetX(0.0f), | 59       m_fScrollOffsetX(0.0f), | 
| 61       m_fScrollOffsetY(0.0f), | 60       m_fScrollOffsetY(0.0f), | 
| 62       m_bLButtonDown(false), | 61       m_bLButtonDown(false), | 
| 63       m_nSelStart(0), | 62       m_nSelStart(0), | 
| 64       m_nLimit(-1), | 63       m_nLimit(-1), | 
| 65       m_fFontSize(0), | 64       m_fFontSize(0), | 
| 66       m_bSetRange(false), | 65       m_bSetRange(false), | 
| 67       m_iMax(0xFFFFFFF), | 66       m_iMax(0xFFFFFFF), | 
| 68       m_iCurRecord(-1), | 67       m_iCurRecord(-1), | 
| 69       m_iMaxRecord(128) { | 68       m_iMaxRecord(128) { | 
| 70   m_rtClient.Reset(); | 69   m_rtClient.Reset(); | 
| 71   m_rtEngine.Reset(); | 70   m_rtEngine.Reset(); | 
| 72   m_rtStatic.Reset(); | 71   m_rtStatic.Reset(); | 
| 73 | 72 | 
| 74   InitCaret(); | 73   InitCaret(); | 
| 75 } | 74 } | 
| 76 | 75 | 
| 77 IFWL_Edit::~IFWL_Edit() { | 76 IFWL_Edit::~IFWL_Edit() { | 
| 78   if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) | 77   if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) | 
| 79     ShowCaret(false); | 78     ShowCaret(false); | 
| 80 |  | 
| 81   ClearRecord(); | 79   ClearRecord(); | 
| 82 } | 80 } | 
| 83 | 81 | 
| 84 FWL_Type IFWL_Edit::GetClassID() const { | 82 FWL_Type IFWL_Edit::GetClassID() const { | 
| 85   return FWL_Type::Edit; | 83   return FWL_Type::Edit; | 
| 86 } | 84 } | 
| 87 | 85 | 
| 88 void IFWL_Edit::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 86 void IFWL_Edit::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { | 
| 89   if (bAutoSize) { | 87   if (!bAutoSize) { | 
| 90     rect.Set(0, 0, 0, 0); |  | 
| 91 |  | 
| 92     int32_t iTextLen = m_EdtEngine.GetTextLength(); |  | 
| 93     if (iTextLen > 0) { |  | 
| 94       CFX_WideString wsText; |  | 
| 95       m_EdtEngine.GetText(wsText, 0); |  | 
| 96       CFX_SizeF sz = CalcTextSize( |  | 
| 97           wsText, m_pProperties->m_pThemeProvider, |  | 
| 98           !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine)); |  | 
| 99       rect.Set(0, 0, sz.x, sz.y); |  | 
| 100     } |  | 
| 101     IFWL_Widget::GetWidgetRect(rect, true); |  | 
| 102   } else { |  | 
| 103     rect = m_pProperties->m_rtWidget; | 88     rect = m_pProperties->m_rtWidget; | 
| 104     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 89     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 105       if (IsShowScrollBar(true)) { | 90       if (IsShowScrollBar(true)) { | 
| 106         FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 91         FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 
| 107             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 92             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 
| 108         rect.width += *pfWidth; | 93         rect.width += *pfWidth; | 
| 109         rect.width += kEditMargin; | 94         rect.width += kEditMargin; | 
| 110       } | 95       } | 
| 111       if (IsShowScrollBar(false)) { | 96       if (IsShowScrollBar(false)) { | 
| 112         FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 97         FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 
| 113             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 98             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 
| 114         rect.height += *pfWidth; | 99         rect.height += *pfWidth; | 
| 115         rect.height += kEditMargin; | 100         rect.height += kEditMargin; | 
| 116       } | 101       } | 
| 117     } | 102     } | 
|  | 103     return; | 
| 118   } | 104   } | 
|  | 105 | 
|  | 106   rect.Set(0, 0, 0, 0); | 
|  | 107 | 
|  | 108   int32_t iTextLen = m_EdtEngine.GetTextLength(); | 
|  | 109   if (iTextLen > 0) { | 
|  | 110     CFX_WideString wsText; | 
|  | 111     m_EdtEngine.GetText(wsText, 0); | 
|  | 112     CFX_SizeF sz = CalcTextSize( | 
|  | 113         wsText, m_pProperties->m_pThemeProvider, | 
|  | 114         !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine)); | 
|  | 115     rect.Set(0, 0, sz.x, sz.y); | 
|  | 116   } | 
|  | 117   IFWL_Widget::GetWidgetRect(rect, true); | 
| 119 } | 118 } | 
| 120 | 119 | 
| 121 void IFWL_Edit::SetStates(uint32_t dwStates, bool bSet) { | 120 void IFWL_Edit::SetStates(uint32_t dwStates, bool bSet) { | 
| 122   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || | 121   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || | 
| 123       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 122       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 
| 124     ShowCaret(false); | 123     ShowCaret(false); | 
| 125   } | 124   } | 
| 126   IFWL_Widget::SetStates(dwStates, bSet); | 125   IFWL_Widget::SetStates(dwStates, bSet); | 
| 127 } | 126 } | 
| 128 | 127 | 
| 129 void IFWL_Edit::Update() { | 128 void IFWL_Edit::Update() { | 
| 130   if (IsLocked()) { | 129   if (IsLocked()) | 
| 131     return; | 130     return; | 
| 132   } | 131   if (!m_pProperties->m_pThemeProvider) | 
| 133   if (!m_pProperties->m_pThemeProvider) { |  | 
| 134     m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 132     m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 
| 135   } | 133 | 
| 136   Layout(); | 134   Layout(); | 
| 137   if (m_rtClient.IsEmpty()) { | 135   if (m_rtClient.IsEmpty()) | 
| 138     return; | 136     return; | 
| 139   } | 137 | 
| 140   UpdateEditEngine(); | 138   UpdateEditEngine(); | 
| 141   UpdateVAlignment(); | 139   UpdateVAlignment(); | 
| 142   UpdateScroll(); | 140   UpdateScroll(); | 
| 143   InitCaret(); | 141   InitCaret(); | 
| 144 } | 142 } | 
| 145 | 143 | 
| 146 FWL_WidgetHit IFWL_Edit::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 144 FWL_WidgetHit IFWL_Edit::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 
| 147   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 145   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 148     if (IsShowScrollBar(true)) { | 146     if (IsShowScrollBar(true)) { | 
| 149       CFX_RectF rect; | 147       CFX_RectF rect; | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 169                                  FX_FLOAT fOffSetX, | 167                                  FX_FLOAT fOffSetX, | 
| 170                                  FX_FLOAT fOffSetY) { | 168                                  FX_FLOAT fOffSetY) { | 
| 171   FX_FLOAT fStartX = 0.0f; | 169   FX_FLOAT fStartX = 0.0f; | 
| 172   FX_FLOAT fEndX = 0.0f; | 170   FX_FLOAT fEndX = 0.0f; | 
| 173   FX_FLOAT fY = 0.0f; | 171   FX_FLOAT fY = 0.0f; | 
| 174   FX_FLOAT fStep = 0.0f; | 172   FX_FLOAT fStep = 0.0f; | 
| 175   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 173   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 176   CFX_RectFArray rectArray; | 174   CFX_RectFArray rectArray; | 
| 177   CFX_RectF rectText; | 175   CFX_RectF rectText; | 
| 178   const FDE_TXTEDTPARAMS* txtEdtParams = m_EdtEngine.GetEditParams(); | 176   const FDE_TXTEDTPARAMS* txtEdtParams = m_EdtEngine.GetEditParams(); | 
| 179   FX_FLOAT fAsent = (FX_FLOAT)txtEdtParams->pFont->GetAscent() * | 177   FX_FLOAT fAsent = static_cast<FX_FLOAT>(txtEdtParams->pFont->GetAscent()) * | 
| 180                     txtEdtParams->fFontSize / 1000; | 178                     txtEdtParams->fFontSize / 1000; | 
| 181   pPage->CalcRangeRectArray(nStart, nCount, rectArray); | 179   pPage->CalcRangeRectArray(nStart, nCount, rectArray); | 
|  | 180 | 
| 182   for (int i = 0; i < rectArray.GetSize(); i++) { | 181   for (int i = 0; i < rectArray.GetSize(); i++) { | 
| 183     rectText = rectArray.GetAt(i); | 182     rectText = rectArray.GetAt(i); | 
| 184     fY = rectText.top + fAsent + fOffSetY; | 183     fY = rectText.top + fAsent + fOffSetY; | 
| 185     fStep = txtEdtParams->fFontSize / 16.0f; | 184     fStep = txtEdtParams->fFontSize / 16.0f; | 
| 186     fStartX = rectText.left + fOffSetX; | 185     fStartX = rectText.left + fOffSetX; | 
| 187     fEndX = fStartX + rectText.Width(); | 186     fEndX = fStartX + rectText.Width(); | 
| 188     AddSquigglyPath(&PathData, fStartX, fEndX, fY, fStep); | 187     AddSquigglyPath(&PathData, fStartX, fEndX, fY, fStep); | 
| 189   } | 188   } | 
| 190 } | 189 } | 
|  | 190 | 
| 191 void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics, | 191 void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics, | 
| 192                                const CFX_Matrix* pMatrix) { | 192                                const CFX_Matrix* pMatrix) { | 
| 193   pGraphics->SaveGraphState(); | 193   pGraphics->SaveGraphState(); | 
| 194   if (pMatrix) { | 194   if (pMatrix) | 
| 195     pGraphics->ConcatMatrix(const_cast<CFX_Matrix*>(pMatrix)); | 195     pGraphics->ConcatMatrix(const_cast<CFX_Matrix*>(pMatrix)); | 
| 196   } | 196 | 
| 197   FX_ARGB cr = 0xFFFF0000; | 197   CFX_Color crLine(0xFFFF0000); | 
| 198   CFX_Color crLine(cr); |  | 
| 199   CFWL_EvtEdtCheckWord checkWordEvent; | 198   CFWL_EvtEdtCheckWord checkWordEvent; | 
| 200   checkWordEvent.m_pSrcTarget = this; | 199   checkWordEvent.m_pSrcTarget = this; | 
|  | 200 | 
| 201   CFX_ByteString sLatinWord; | 201   CFX_ByteString sLatinWord; | 
| 202   CFX_Path pathSpell; | 202   CFX_Path pathSpell; | 
| 203   pathSpell.Create(); | 203   pathSpell.Create(); | 
|  | 204 | 
| 204   int32_t nStart = 0; | 205   int32_t nStart = 0; | 
| 205   FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 206   FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 
| 206   FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 207   FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 
|  | 208 | 
| 207   CFX_WideString wsSpell; | 209   CFX_WideString wsSpell; | 
| 208   GetText(wsSpell); | 210   GetText(wsSpell); | 
| 209   int32_t nContentLen = wsSpell.GetLength(); | 211   int32_t nContentLen = wsSpell.GetLength(); | 
| 210   for (int i = 0; i < nContentLen; i++) { | 212   for (int i = 0; i < nContentLen; i++) { | 
| 211     if (FX_EDIT_ISLATINWORD(wsSpell[i])) { | 213     if (FX_EDIT_ISLATINWORD(wsSpell[i])) { | 
| 212       if (sLatinWord.IsEmpty()) { | 214       if (sLatinWord.IsEmpty()) | 
| 213         nStart = i; | 215         nStart = i; | 
| 214       } |  | 
| 215       sLatinWord += (FX_CHAR)wsSpell[i]; | 216       sLatinWord += (FX_CHAR)wsSpell[i]; | 
| 216     } else { | 217       continue; | 
| 217       checkWordEvent.bsWord = sLatinWord; |  | 
| 218       checkWordEvent.bCheckWord = true; |  | 
| 219       DispatchEvent(&checkWordEvent); |  | 
| 220       if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { |  | 
| 221         AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, |  | 
| 222                          fOffSetY); |  | 
| 223       } |  | 
| 224       sLatinWord.clear(); |  | 
| 225     } | 218     } | 
|  | 219     checkWordEvent.bsWord = sLatinWord; | 
|  | 220     checkWordEvent.bCheckWord = true; | 
|  | 221     DispatchEvent(&checkWordEvent); | 
|  | 222     if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { | 
|  | 223       AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, | 
|  | 224                        fOffSetY); | 
|  | 225     } | 
|  | 226     sLatinWord.clear(); | 
| 226   } | 227   } | 
|  | 228 | 
| 227   checkWordEvent.bsWord = sLatinWord; | 229   checkWordEvent.bsWord = sLatinWord; | 
| 228   checkWordEvent.bCheckWord = true; | 230   checkWordEvent.bCheckWord = true; | 
| 229   DispatchEvent(&checkWordEvent); | 231   DispatchEvent(&checkWordEvent); | 
|  | 232 | 
| 230   if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { | 233   if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { | 
| 231     AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, | 234     AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, | 
| 232                      fOffSetY); | 235                      fOffSetY); | 
| 233   } | 236   } | 
| 234   if (!pathSpell.IsEmpty()) { | 237   if (!pathSpell.IsEmpty()) { | 
| 235     CFX_RectF rtClip = m_rtEngine; | 238     CFX_RectF rtClip = m_rtEngine; | 
| 236     CFX_Matrix mt; | 239     CFX_Matrix mt; | 
| 237     mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); | 240     mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); | 
| 238     if (pMatrix) { | 241     if (pMatrix) { | 
| 239       pMatrix->TransformRect(rtClip); | 242       pMatrix->TransformRect(rtClip); | 
| 240       mt.Concat(*pMatrix); | 243       mt.Concat(*pMatrix); | 
| 241     } | 244     } | 
| 242     pGraphics->SetClipRect(rtClip); | 245     pGraphics->SetClipRect(rtClip); | 
| 243     pGraphics->SetStrokeColor(&crLine); | 246     pGraphics->SetStrokeColor(&crLine); | 
| 244     pGraphics->SetLineWidth(0); | 247     pGraphics->SetLineWidth(0); | 
| 245     pGraphics->StrokePath(&pathSpell, nullptr); | 248     pGraphics->StrokePath(&pathSpell, nullptr); | 
| 246   } | 249   } | 
| 247   pGraphics->RestoreGraphState(); | 250   pGraphics->RestoreGraphState(); | 
| 248 } | 251 } | 
|  | 252 | 
| 249 void IFWL_Edit::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { | 253 void IFWL_Edit::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { | 
| 250   if (!pGraphics) | 254   if (!pGraphics) | 
| 251     return; | 255     return; | 
| 252   if (!m_pProperties->m_pThemeProvider) | 256   if (!m_pProperties->m_pThemeProvider) | 
| 253     return; | 257     return; | 
| 254   if (m_rtClient.IsEmpty()) { | 258   if (m_rtClient.IsEmpty()) | 
| 255     return; | 259     return; | 
| 256   } | 260 | 
| 257   IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 261   IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; | 
| 258   if (!m_pWidgetMgr->IsFormDisabled()) { | 262   if (!m_pWidgetMgr->IsFormDisabled()) | 
| 259     DrawTextBk(pGraphics, pTheme, pMatrix); | 263     DrawTextBk(pGraphics, pTheme, pMatrix); | 
| 260   } |  | 
| 261 |  | 
| 262   DrawContent(pGraphics, pTheme, pMatrix); | 264   DrawContent(pGraphics, pTheme, pMatrix); | 
| 263 | 265 | 
| 264   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && | 266   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && | 
| 265       !(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) { | 267       !(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) { | 
| 266     DrawSpellCheck(pGraphics, pMatrix); | 268     DrawSpellCheck(pGraphics, pMatrix); | 
| 267   } | 269   } | 
| 268   if (HasBorder()) { | 270   if (HasBorder()) | 
| 269     DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); | 271     DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); | 
| 270   } | 272   if (HasEdge()) | 
| 271   if (HasEdge()) { |  | 
| 272     DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); | 273     DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); | 
| 273   } |  | 
| 274 } | 274 } | 
|  | 275 | 
| 275 void IFWL_Edit::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { | 276 void IFWL_Edit::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { | 
| 276   if (!pThemeProvider) | 277   if (!pThemeProvider) | 
| 277     return; | 278     return; | 
| 278   if (m_pHorzScrollBar) { | 279   if (m_pHorzScrollBar) | 
| 279     m_pHorzScrollBar->SetThemeProvider(pThemeProvider); | 280     m_pHorzScrollBar->SetThemeProvider(pThemeProvider); | 
| 280   } | 281   if (m_pVertScrollBar) | 
| 281   if (m_pVertScrollBar) { |  | 
| 282     m_pVertScrollBar->SetThemeProvider(pThemeProvider); | 282     m_pVertScrollBar->SetThemeProvider(pThemeProvider); | 
| 283   } | 283   if (m_pCaret) | 
| 284   if (m_pCaret) { |  | 
| 285     m_pCaret->SetThemeProvider(pThemeProvider); | 284     m_pCaret->SetThemeProvider(pThemeProvider); | 
| 286   } |  | 
| 287   m_pProperties->m_pThemeProvider = pThemeProvider; | 285   m_pProperties->m_pThemeProvider = pThemeProvider; | 
| 288 } | 286 } | 
| 289 | 287 | 
| 290 void IFWL_Edit::SetText(const CFX_WideString& wsText) { | 288 void IFWL_Edit::SetText(const CFX_WideString& wsText) { | 
| 291   m_EdtEngine.SetText(wsText); | 289   m_EdtEngine.SetText(wsText); | 
| 292 } | 290 } | 
| 293 | 291 | 
| 294 int32_t IFWL_Edit::GetTextLength() const { | 292 int32_t IFWL_Edit::GetTextLength() const { | 
| 295   return m_EdtEngine.GetTextLength(); | 293   return m_EdtEngine.GetTextLength(); | 
| 296 } | 294 } | 
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 430   rtInvalid.Set(0, 0, 0, 0); | 428   rtInvalid.Set(0, 0, 0, 0); | 
| 431   bool bRepaintScroll = false; | 429   bool bRepaintScroll = false; | 
| 432   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 430   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 
| 433     IFWL_ScrollBar* pScroll = UpdateScroll(); | 431     IFWL_ScrollBar* pScroll = UpdateScroll(); | 
| 434     if (pScroll) { | 432     if (pScroll) { | 
| 435       pScroll->GetWidgetRect(rtInvalid); | 433       pScroll->GetWidgetRect(rtInvalid); | 
| 436       bRepaintScroll = true; | 434       bRepaintScroll = true; | 
| 437     } | 435     } | 
| 438   } | 436   } | 
| 439   if (bRepaintContent || bRepaintScroll) { | 437   if (bRepaintContent || bRepaintScroll) { | 
| 440     if (bRepaintContent) { | 438     if (bRepaintContent) | 
| 441       rtInvalid.Union(m_rtEngine); | 439       rtInvalid.Union(m_rtEngine); | 
| 442     } |  | 
| 443     Repaint(&rtInvalid); | 440     Repaint(&rtInvalid); | 
| 444   } | 441   } | 
| 445 } | 442 } | 
| 446 | 443 | 
| 447 void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, | 444 void IFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, | 
| 448                                FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { | 445                                FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { | 
| 449   uint32_t dwStyleEx = m_pProperties->m_dwStyleExes; | 446   uint32_t dwStyleEx = m_pProperties->m_dwStyleExes; | 
| 450   if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask) | 447   if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask) | 
| 451     UpdateVAlignment(); | 448     UpdateVAlignment(); | 
| 452 | 449 | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 475       ModifyStylesEx( | 472       ModifyStylesEx( | 
| 476           0, FWL_STYLEEXT_EDT_HSelfAdaption | FWL_STYLEEXT_EDT_AutoHScroll); | 473           0, FWL_STYLEEXT_EDT_HSelfAdaption | FWL_STYLEEXT_EDT_AutoHScroll); | 
| 477     } | 474     } | 
| 478     if (!evt.bVSelfAdaption) { | 475     if (!evt.bVSelfAdaption) { | 
| 479       ModifyStylesEx( | 476       ModifyStylesEx( | 
| 480           0, FWL_STYLEEXT_EDT_VSelfAdaption | FWL_STYLEEXT_EDT_AutoVScroll); | 477           0, FWL_STYLEEXT_EDT_VSelfAdaption | FWL_STYLEEXT_EDT_AutoVScroll); | 
| 481     } | 478     } | 
| 482     bNeedUpdate = (bHSelfAdaption && !evt.bHSelfAdaption) || | 479     bNeedUpdate = (bHSelfAdaption && !evt.bHSelfAdaption) || | 
| 483                   (bVSelfAdaption && !evt.bVSelfAdaption); | 480                   (bVSelfAdaption && !evt.bVSelfAdaption); | 
| 484   } | 481   } | 
|  | 482 | 
| 485   FX_FLOAT fContentWidth1 = fContentWidth; | 483   FX_FLOAT fContentWidth1 = fContentWidth; | 
| 486   FX_FLOAT fContentHeight1 = fContentHeight; | 484   FX_FLOAT fContentHeight1 = fContentHeight; | 
| 487   if (bNeedUpdate) { | 485   if (bNeedUpdate) { | 
| 488     UpdateEditParams(); | 486     UpdateEditParams(); | 
| 489     UpdateEditLayout(); | 487     UpdateEditLayout(); | 
| 490     IFDE_TxtEdtPage* page1 = m_EdtEngine.GetPage(0); | 488     IFDE_TxtEdtPage* page1 = m_EdtEngine.GetPage(0); | 
| 491     fContentWidth1 = page1->GetContentsBox().width; | 489     fContentWidth1 = page1->GetContentsBox().width; | 
| 492     fContentHeight1 = page1->GetContentsBox().height; | 490     fContentHeight1 = page1->GetContentsBox().height; | 
| 493   } | 491   } | 
| 494   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption) { | 492   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption) { | 
| 495     rtTemp.width = std::max(m_pProperties->m_rtWidget.width, fContentWidth1); | 493     rtTemp.width = std::max(m_pProperties->m_rtWidget.width, fContentWidth1); | 
| 496     m_pProperties->m_rtWidget.width = fContentWidth1; | 494     m_pProperties->m_rtWidget.width = fContentWidth1; | 
| 497   } | 495   } | 
| 498   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption) { | 496   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption) { | 
| 499     rtTemp.height = std::max(m_pProperties->m_rtWidget.height, fContentHeight1); | 497     rtTemp.height = std::max(m_pProperties->m_rtWidget.height, fContentHeight1); | 
| 500     m_pProperties->m_rtWidget.height = fContentHeight1; | 498     m_pProperties->m_rtWidget.height = fContentHeight1; | 
| 501   } | 499   } | 
|  | 500 | 
| 502   CFWL_EvtEdtTextChanged event; | 501   CFWL_EvtEdtTextChanged event; | 
| 503   event.m_pSrcTarget = this; | 502   event.m_pSrcTarget = this; | 
| 504   event.nChangeType = ChangeInfo.nChangeType; | 503   event.nChangeType = ChangeInfo.nChangeType; | 
| 505   event.wsInsert = ChangeInfo.wsInsert; | 504   event.wsInsert = ChangeInfo.wsInsert; | 
| 506   event.wsDelete = ChangeInfo.wsDelete; | 505   event.wsDelete = ChangeInfo.wsDelete; | 
| 507   event.wsPrevText = ChangeInfo.wsPrevText; | 506   event.wsPrevText = ChangeInfo.wsPrevText; | 
| 508   DispatchEvent(&event); | 507   DispatchEvent(&event); | 
| 509   LayoutScrollBar(); | 508   LayoutScrollBar(); | 
| 510   Repaint(&rtTemp); | 509   Repaint(&rtTemp); | 
| 511 } | 510 } | 
| 512 | 511 | 
| 513 void IFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) { | 512 void IFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) { | 
| 514   CFX_RectF rtTemp; | 513   CFX_RectF rtTemp; | 
| 515   GetClientRect(rtTemp); | 514   GetClientRect(rtTemp); | 
| 516   Repaint(&rtTemp); | 515   Repaint(&rtTemp); | 
| 517 } | 516 } | 
| 518 | 517 | 
| 519 bool IFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit, | 518 bool IFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit, | 
| 520                             int32_t nPageIndex, | 519                             int32_t nPageIndex, | 
| 521                             int32_t nPurpose) { | 520                             int32_t nPurpose) { | 
| 522   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 521   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 
| 523   if (!pPage) | 522   if (!pPage) | 
| 524     return false; | 523     return false; | 
|  | 524 | 
| 525   pPage->LoadPage(nullptr, nullptr); | 525   pPage->LoadPage(nullptr, nullptr); | 
| 526   return true; | 526   return true; | 
| 527 } | 527 } | 
| 528 | 528 | 
| 529 bool IFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit, | 529 bool IFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit, | 
| 530                               int32_t nPageIndex, | 530                               int32_t nPageIndex, | 
| 531                               int32_t nPurpose) { | 531                               int32_t nPurpose) { | 
| 532   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 532   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 
| 533   if (!pPage) | 533   if (!pPage) | 
| 534     return false; | 534     return false; | 
|  | 535 | 
| 535   pPage->UnloadPage(nullptr); | 536   pPage->UnloadPage(nullptr); | 
| 536   return true; | 537   return true; | 
| 537 } | 538 } | 
| 538 | 539 | 
| 539 void IFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, | 540 void IFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, | 
| 540                                IFDE_TxtEdtDoRecord* pRecord) { | 541                                IFDE_TxtEdtDoRecord* pRecord) { | 
| 541   AddDoRecord(pRecord); | 542   AddDoRecord(pRecord); | 
| 542 } | 543 } | 
| 543 | 544 | 
| 544 bool IFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { | 545 bool IFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { | 
| 545   IFWL_Widget* pDst = GetOuter(); | 546   IFWL_Widget* pDst = GetOuter(); | 
| 546   if (!pDst) { | 547   if (!pDst) | 
| 547     pDst = this; | 548     pDst = this; | 
| 548   } | 549 | 
| 549   CFWL_EvtEdtValidate event; | 550   CFWL_EvtEdtValidate event; | 
| 550   event.pDstWidget = pDst; | 551   event.pDstWidget = pDst; | 
| 551   event.m_pSrcTarget = this; | 552   event.m_pSrcTarget = this; | 
| 552   event.wsInsert = wsText; | 553   event.wsInsert = wsText; | 
| 553   event.bValidate = true; | 554   event.bValidate = true; | 
| 554   DispatchEvent(&event); | 555   DispatchEvent(&event); | 
| 555   return event.bValidate; | 556   return event.bValidate; | 
| 556 } | 557 } | 
| 557 | 558 | 
| 558 void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { | 559 void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { | 
| 559   m_fScrollOffsetY = fScrollOffset; | 560   m_fScrollOffsetY = fScrollOffset; | 
| 560 } | 561 } | 
| 561 | 562 | 
| 562 void IFWL_Edit::DrawTextBk(CFX_Graphics* pGraphics, | 563 void IFWL_Edit::DrawTextBk(CFX_Graphics* pGraphics, | 
| 563                            IFWL_ThemeProvider* pTheme, | 564                            IFWL_ThemeProvider* pTheme, | 
| 564                            const CFX_Matrix* pMatrix) { | 565                            const CFX_Matrix* pMatrix) { | 
| 565   CFWL_ThemeBackground param; | 566   CFWL_ThemeBackground param; | 
| 566   param.m_pWidget = this; | 567   param.m_pWidget = this; | 
| 567   param.m_iPart = CFWL_Part::Background; | 568   param.m_iPart = CFWL_Part::Background; | 
| 568   param.m_bStaticBackground = false; | 569   param.m_bStaticBackground = false; | 
| 569   param.m_dwStates = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly | 570   param.m_dwStates = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly | 
| 570                          ? CFWL_PartState_ReadOnly | 571                          ? CFWL_PartState_ReadOnly | 
| 571                          : CFWL_PartState_Normal; | 572                          : CFWL_PartState_Normal; | 
| 572   uint32_t dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); | 573   uint32_t dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); | 
| 573   if (dwStates) { | 574   if (dwStates) | 
| 574     param.m_dwStates = CFWL_PartState_Disabled; | 575     param.m_dwStates = CFWL_PartState_Disabled; | 
| 575   } |  | 
| 576   param.m_pGraphics = pGraphics; | 576   param.m_pGraphics = pGraphics; | 
| 577   param.m_matrix = *pMatrix; | 577   param.m_matrix = *pMatrix; | 
| 578   param.m_rtPart = m_rtClient; | 578   param.m_rtPart = m_rtClient; | 
| 579   pTheme->DrawBackground(¶m); | 579   pTheme->DrawBackground(¶m); | 
| 580   if (!IsShowScrollBar(true) || !IsShowScrollBar(false)) { | 580 | 
|  | 581   if (!IsShowScrollBar(true) || !IsShowScrollBar(false)) | 
| 581     return; | 582     return; | 
| 582   } | 583 | 
| 583   CFX_RectF rtScorll; | 584   CFX_RectF rtScorll; | 
| 584   m_pHorzScrollBar->GetWidgetRect(rtScorll); | 585   m_pHorzScrollBar->GetWidgetRect(rtScorll); | 
|  | 586 | 
| 585   CFX_RectF rtStatic; | 587   CFX_RectF rtStatic; | 
| 586   rtStatic.Set(m_rtClient.right() - rtScorll.height, | 588   rtStatic.Set(m_rtClient.right() - rtScorll.height, | 
| 587                m_rtClient.bottom() - rtScorll.height, rtScorll.height, | 589                m_rtClient.bottom() - rtScorll.height, rtScorll.height, | 
| 588                rtScorll.height); | 590                rtScorll.height); | 
| 589   param.m_bStaticBackground = true; | 591   param.m_bStaticBackground = true; | 
| 590   param.m_bMaximize = true; | 592   param.m_bMaximize = true; | 
| 591   param.m_rtPart = rtStatic; | 593   param.m_rtPart = rtStatic; | 
| 592   pTheme->DrawBackground(¶m); | 594   pTheme->DrawBackground(¶m); | 
| 593 } | 595 } | 
|  | 596 | 
| 594 void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics, | 597 void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics, | 
| 595                             IFWL_ThemeProvider* pTheme, | 598                             IFWL_ThemeProvider* pTheme, | 
| 596                             const CFX_Matrix* pMatrix) { | 599                             const CFX_Matrix* pMatrix) { | 
| 597   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 600   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 598   if (!pPage) | 601   if (!pPage) | 
| 599     return; | 602     return; | 
|  | 603 | 
| 600   pGraphics->SaveGraphState(); | 604   pGraphics->SaveGraphState(); | 
| 601   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { | 605   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) | 
| 602     pGraphics->SaveGraphState(); | 606     pGraphics->SaveGraphState(); | 
| 603   } | 607 | 
| 604   CFX_RectF rtClip = m_rtEngine; | 608   CFX_RectF rtClip = m_rtEngine; | 
| 605   FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 609   FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; | 
| 606   FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 610   FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; | 
| 607   CFX_Matrix mt; | 611   CFX_Matrix mt; | 
| 608   mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); | 612   mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); | 
| 609   if (pMatrix) { | 613   if (pMatrix) { | 
| 610     pMatrix->TransformRect(rtClip); | 614     pMatrix->TransformRect(rtClip); | 
| 611     mt.Concat(*pMatrix); | 615     mt.Concat(*pMatrix); | 
| 612   } | 616   } | 
|  | 617 | 
| 613   bool bShowSel = (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoHideSel) || | 618   bool bShowSel = (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoHideSel) || | 
| 614                   (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); | 619                   (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); | 
| 615   if (bShowSel) { | 620   if (bShowSel) { | 
| 616     IFWL_Widget* pForm = m_pWidgetMgr->GetSystemFormWidget(this); | 621     IFWL_Widget* pForm = m_pWidgetMgr->GetSystemFormWidget(this); | 
| 617     if (pForm) { | 622     if (pForm) { | 
| 618       bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != | 623       bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != | 
| 619                  FWL_WGTSTATE_Deactivated; | 624                  FWL_WGTSTATE_Deactivated; | 
| 620     } | 625     } | 
| 621   } | 626   } | 
|  | 627 | 
| 622   int32_t nSelCount = m_EdtEngine.CountSelRanges(); | 628   int32_t nSelCount = m_EdtEngine.CountSelRanges(); | 
| 623   if (bShowSel && nSelCount > 0) { | 629   if (bShowSel && nSelCount > 0) { | 
| 624     int32_t nPageCharStart = pPage->GetCharStart(); | 630     int32_t nPageCharStart = pPage->GetCharStart(); | 
| 625     int32_t nPageCharCount = pPage->GetCharCount(); | 631     int32_t nPageCharCount = pPage->GetCharCount(); | 
| 626     int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; | 632     int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; | 
| 627     int32_t nCharCount; | 633     int32_t nCharCount; | 
| 628     int32_t nCharStart; | 634     int32_t nCharStart; | 
| 629     CFX_RectFArray rectArr; | 635     CFX_RectFArray rectArr; | 
| 630     int32_t i = 0; | 636     int32_t i = 0; | 
| 631     for (i = 0; i < nSelCount; i++) { | 637     for (i = 0; i < nSelCount; i++) { | 
| 632       nCharCount = m_EdtEngine.GetSelRange(i, nCharStart); | 638       nCharCount = m_EdtEngine.GetSelRange(i, nCharStart); | 
| 633       int32_t nCharEnd = nCharStart + nCharCount - 1; | 639       int32_t nCharEnd = nCharStart + nCharCount - 1; | 
| 634       if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) { | 640       if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) | 
| 635         continue; | 641         continue; | 
| 636       } | 642 | 
| 637       int32_t nBgn = std::max(nCharStart, nPageCharStart); | 643       int32_t nBgn = std::max(nCharStart, nPageCharStart); | 
| 638       int32_t nEnd = std::min(nCharEnd, nPageCharEnd); | 644       int32_t nEnd = std::min(nCharEnd, nPageCharEnd); | 
| 639       pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, | 645       pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, | 
| 640                                 rectArr); | 646                                 rectArr); | 
| 641     } | 647     } | 
|  | 648 | 
| 642     int32_t nCount = rectArr.GetSize(); | 649     int32_t nCount = rectArr.GetSize(); | 
| 643     CFX_Path path; | 650     CFX_Path path; | 
| 644     path.Create(); | 651     path.Create(); | 
| 645     for (i = 0; i < nCount; i++) { | 652     for (i = 0; i < nCount; i++) { | 
| 646       rectArr[i].left += fOffSetX; | 653       rectArr[i].left += fOffSetX; | 
| 647       rectArr[i].top += fOffSetY; | 654       rectArr[i].top += fOffSetY; | 
| 648       path.AddRectangle(rectArr[i].left, rectArr[i].top, rectArr[i].width, | 655       path.AddRectangle(rectArr[i].left, rectArr[i].top, rectArr[i].width, | 
| 649                         rectArr[i].height); | 656                         rectArr[i].height); | 
| 650     } | 657     } | 
| 651     pGraphics->SetClipRect(rtClip); | 658     pGraphics->SetClipRect(rtClip); | 
|  | 659 | 
| 652     CFWL_ThemeBackground param; | 660     CFWL_ThemeBackground param; | 
| 653     param.m_pGraphics = pGraphics; | 661     param.m_pGraphics = pGraphics; | 
| 654     param.m_matrix = *pMatrix; | 662     param.m_matrix = *pMatrix; | 
| 655     param.m_pWidget = this; | 663     param.m_pWidget = this; | 
| 656     param.m_iPart = CFWL_Part::Background; | 664     param.m_iPart = CFWL_Part::Background; | 
| 657     param.m_pPath = &path; | 665     param.m_pPath = &path; | 
| 658     pTheme->DrawBackground(¶m); | 666     pTheme->DrawBackground(¶m); | 
| 659   } | 667   } | 
|  | 668 | 
| 660   CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice(); | 669   CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice(); | 
| 661   if (!pRenderDev) | 670   if (!pRenderDev) | 
| 662     return; | 671     return; | 
| 663 | 672 | 
| 664   std::unique_ptr<CFDE_RenderDevice> pRenderDevice( | 673   std::unique_ptr<CFDE_RenderDevice> pRenderDevice( | 
| 665       new CFDE_RenderDevice(pRenderDev, false)); | 674       new CFDE_RenderDevice(pRenderDev, false)); | 
| 666   std::unique_ptr<CFDE_RenderContext> pRenderContext(new CFDE_RenderContext); | 675   std::unique_ptr<CFDE_RenderContext> pRenderContext(new CFDE_RenderContext); | 
| 667   pRenderDevice->SetClipRect(rtClip); | 676   pRenderDevice->SetClipRect(rtClip); | 
| 668   pRenderContext->StartRender(pRenderDevice.get(), pPage, mt); | 677   pRenderContext->StartRender(pRenderDevice.get(), pPage, mt); | 
| 669   pRenderContext->DoRender(nullptr); | 678   pRenderContext->DoRender(nullptr); | 
|  | 679 | 
| 670   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { | 680   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { | 
| 671     pGraphics->RestoreGraphState(); | 681     pGraphics->RestoreGraphState(); | 
| 672     CFX_Path path; | 682     CFX_Path path; | 
| 673     path.Create(); | 683     path.Create(); | 
| 674     int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1; | 684     int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1; | 
| 675     FX_FLOAT fStep = m_rtEngine.width / iLimit; | 685     FX_FLOAT fStep = m_rtEngine.width / iLimit; | 
| 676     FX_FLOAT fLeft = m_rtEngine.left + 1; | 686     FX_FLOAT fLeft = m_rtEngine.left + 1; | 
| 677     for (int32_t i = 1; i < iLimit; i++) { | 687     for (int32_t i = 1; i < iLimit; i++) { | 
| 678       fLeft += fStep; | 688       fLeft += fStep; | 
| 679       path.AddLine(fLeft, m_rtClient.top, fLeft, m_rtClient.bottom()); | 689       path.AddLine(fLeft, m_rtClient.top, fLeft, m_rtClient.bottom()); | 
| 680     } | 690     } | 
|  | 691 | 
| 681     CFWL_ThemeBackground param; | 692     CFWL_ThemeBackground param; | 
| 682     param.m_pGraphics = pGraphics; | 693     param.m_pGraphics = pGraphics; | 
| 683     param.m_matrix = *pMatrix; | 694     param.m_matrix = *pMatrix; | 
| 684     param.m_pWidget = this; | 695     param.m_pWidget = this; | 
| 685     param.m_iPart = CFWL_Part::CombTextLine; | 696     param.m_iPart = CFWL_Part::CombTextLine; | 
| 686     param.m_pPath = &path; | 697     param.m_pPath = &path; | 
| 687     pTheme->DrawBackground(¶m); | 698     pTheme->DrawBackground(¶m); | 
| 688   } | 699   } | 
| 689   pGraphics->RestoreGraphState(); | 700   pGraphics->RestoreGraphState(); | 
| 690 } | 701 } | 
| 691 | 702 | 
| 692 void IFWL_Edit::UpdateEditEngine() { | 703 void IFWL_Edit::UpdateEditEngine() { | 
| 693   UpdateEditParams(); | 704   UpdateEditParams(); | 
| 694   UpdateEditLayout(); | 705   UpdateEditLayout(); | 
| 695   if (m_nLimit > -1) { | 706   if (m_nLimit > -1) | 
| 696     m_EdtEngine.SetLimit(m_nLimit); | 707     m_EdtEngine.SetLimit(m_nLimit); | 
| 697   } |  | 
| 698 } | 708 } | 
|  | 709 | 
| 699 void IFWL_Edit::UpdateEditParams() { | 710 void IFWL_Edit::UpdateEditParams() { | 
| 700   FDE_TXTEDTPARAMS params; | 711   FDE_TXTEDTPARAMS params; | 
| 701   params.nHorzScale = 100; | 712   params.nHorzScale = 100; | 
| 702   params.fPlateWidth = m_rtEngine.width; | 713   params.fPlateWidth = m_rtEngine.width; | 
| 703   params.fPlateHeight = m_rtEngine.height; | 714   params.fPlateHeight = m_rtEngine.height; | 
| 704   if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_RTLLayout) { | 715   if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_RTLLayout) | 
| 705     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_RTL; | 716     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_RTL; | 
| 706   } | 717   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalLayout) | 
| 707   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalLayout) { |  | 
| 708     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_DocVertical; | 718     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_DocVertical; | 
| 709   } | 719   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalChars) | 
| 710   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalChars) { |  | 
| 711     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CharVertial; | 720     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CharVertial; | 
| 712   } | 721   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReverseLine) | 
| 713   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReverseLine) { |  | 
| 714     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LineReserve; | 722     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LineReserve; | 
| 715   } | 723   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ArabicShapes) | 
| 716   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ArabicShapes) { |  | 
| 717     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ArabicShapes; | 724     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ArabicShapes; | 
| 718   } | 725   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ExpandTab) | 
| 719   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ExpandTab) { |  | 
| 720     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ExpandTab; | 726     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ExpandTab; | 
| 721   } | 727   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) | 
| 722   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { |  | 
| 723     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; | 728     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; | 
| 724   } | 729   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) | 
| 725   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) { |  | 
| 726     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; | 730     params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; | 
| 727   } | 731   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) | 
| 728   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) { |  | 
| 729     params.dwMode |= FDE_TEXTEDITMODE_Validate; | 732     params.dwMode |= FDE_TEXTEDITMODE_Validate; | 
| 730   } | 733   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) | 
| 731   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) { |  | 
| 732     params.dwMode |= FDE_TEXTEDITMODE_Password; | 734     params.dwMode |= FDE_TEXTEDITMODE_Password; | 
| 733   } | 735 | 
| 734   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { | 736   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { | 
| 735     case FWL_STYLEEXT_EDT_HNear: { | 737     case FWL_STYLEEXT_EDT_HNear: { | 
| 736       params.dwAlignment |= FDE_TEXTEDITALIGN_Left; | 738       params.dwAlignment |= FDE_TEXTEDITALIGN_Left; | 
| 737       break; | 739       break; | 
| 738     } | 740     } | 
| 739     case FWL_STYLEEXT_EDT_HCenter: { | 741     case FWL_STYLEEXT_EDT_HCenter: { | 
| 740       params.dwAlignment |= FDE_TEXTEDITALIGN_Center; | 742       params.dwAlignment |= FDE_TEXTEDITALIGN_Center; | 
| 741       break; | 743       break; | 
| 742     } | 744     } | 
| 743     case FWL_STYLEEXT_EDT_HFar: { | 745     case FWL_STYLEEXT_EDT_HFar: { | 
| 744       params.dwAlignment |= FDE_TEXTEDITALIGN_Right; | 746       params.dwAlignment |= FDE_TEXTEDITALIGN_Right; | 
| 745       break; | 747       break; | 
| 746     } | 748     } | 
| 747     default: {} | 749     default: | 
|  | 750       break; | 
| 748   } | 751   } | 
| 749   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { | 752   switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { | 
| 750     case FWL_STYLEEXT_EDT_Justified: { | 753     case FWL_STYLEEXT_EDT_Justified: { | 
| 751       params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; | 754       params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; | 
| 752       break; | 755       break; | 
| 753     } | 756     } | 
| 754     case FWL_STYLEEXT_EDT_Distributed: { | 757     case FWL_STYLEEXT_EDT_Distributed: { | 
| 755       params.dwAlignment |= FDE_TEXTEDITALIGN_Distributed; | 758       params.dwAlignment |= FDE_TEXTEDITALIGN_Distributed; | 
| 756       break; | 759       break; | 
| 757     } | 760     } | 
| 758     default: { params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; } | 761     default: { | 
|  | 762       params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; | 
|  | 763       break; | 
|  | 764     } | 
| 759   } | 765   } | 
| 760   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 766   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 
| 761     params.dwMode |= FDE_TEXTEDITMODE_MultiLines; | 767     params.dwMode |= FDE_TEXTEDITMODE_MultiLines; | 
| 762     if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && | 768     if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && | 
| 763         (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { | 769         (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { | 
| 764       params.dwMode |= | 770       params.dwMode |= | 
| 765           FDE_TEXTEDITMODE_AutoLineWrap | FDE_TEXTEDITMODE_LimitArea_Horz; | 771           FDE_TEXTEDITMODE_AutoLineWrap | FDE_TEXTEDITMODE_LimitArea_Horz; | 
| 766     } | 772     } | 
| 767     if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 && | 773     if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 && | 
| 768         (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0) { | 774         (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0) { | 
| 769       params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Vert; | 775       params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Vert; | 
| 770     } else { | 776     } else { | 
| 771       params.fPlateHeight = 0x00FFFFFF; | 777       params.fPlateHeight = 0x00FFFFFF; | 
| 772     } | 778     } | 
| 773   } else { | 779   } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == | 
| 774     if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { | 780              0) { | 
| 775       params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Horz; | 781     params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Horz; | 
| 776     } |  | 
| 777   } | 782   } | 
| 778   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || | 783   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || | 
| 779       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 784       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 
| 780     params.dwMode |= FDE_TEXTEDITMODE_ReadOnly; | 785     params.dwMode |= FDE_TEXTEDITMODE_ReadOnly; | 
| 781   } | 786   } | 
|  | 787 | 
| 782   FX_FLOAT* pFontSize = | 788   FX_FLOAT* pFontSize = | 
| 783       static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::FontSize)); | 789       static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::FontSize)); | 
| 784   if (!pFontSize) | 790   if (!pFontSize) | 
| 785     return; | 791     return; | 
|  | 792 | 
| 786   m_fFontSize = *pFontSize; | 793   m_fFontSize = *pFontSize; | 
| 787   uint32_t* pFontColor = | 794   uint32_t* pFontColor = | 
| 788       static_cast<uint32_t*>(GetThemeCapacity(CFWL_WidgetCapacity::TextColor)); | 795       static_cast<uint32_t*>(GetThemeCapacity(CFWL_WidgetCapacity::TextColor)); | 
| 789   if (!pFontColor) | 796   if (!pFontColor) | 
| 790     return; | 797     return; | 
|  | 798 | 
| 791   params.dwFontColor = *pFontColor; | 799   params.dwFontColor = *pFontColor; | 
| 792   FX_FLOAT* pLineHeight = | 800   FX_FLOAT* pLineHeight = | 
| 793       static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::LineHeight)); | 801       static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::LineHeight)); | 
| 794   if (!pLineHeight) | 802   if (!pLineHeight) | 
| 795     return; | 803     return; | 
|  | 804 | 
| 796   params.fLineSpace = *pLineHeight; | 805   params.fLineSpace = *pLineHeight; | 
| 797   CFGAS_GEFont* pFont = | 806   CFGAS_GEFont* pFont = | 
| 798       static_cast<CFGAS_GEFont*>(GetThemeCapacity(CFWL_WidgetCapacity::Font)); | 807       static_cast<CFGAS_GEFont*>(GetThemeCapacity(CFWL_WidgetCapacity::Font)); | 
| 799   if (!pFont) | 808   if (!pFont) | 
| 800     return; | 809     return; | 
|  | 810 | 
| 801   params.pFont = pFont; | 811   params.pFont = pFont; | 
| 802   params.fFontSize = m_fFontSize; | 812   params.fFontSize = m_fFontSize; | 
| 803   params.nLineCount = (int32_t)(params.fPlateHeight / params.fLineSpace); | 813   params.nLineCount = (int32_t)(params.fPlateHeight / params.fLineSpace); | 
| 804   if (params.nLineCount <= 0) { | 814   if (params.nLineCount <= 0) | 
| 805     params.nLineCount = 1; | 815     params.nLineCount = 1; | 
| 806   } |  | 
| 807   params.fTabWidth = params.fFontSize * 1; | 816   params.fTabWidth = params.fFontSize * 1; | 
| 808   params.bTabEquidistant = true; | 817   params.bTabEquidistant = true; | 
| 809   params.wLineBreakChar = L'\n'; | 818   params.wLineBreakChar = L'\n'; | 
| 810   params.nCharRotation = 0; | 819   params.nCharRotation = 0; | 
| 811   params.pEventSink = this; | 820   params.pEventSink = this; | 
| 812   m_EdtEngine.SetEditParams(params); | 821   m_EdtEngine.SetEditParams(params); | 
| 813 } | 822 } | 
| 814 | 823 | 
| 815 void IFWL_Edit::UpdateEditLayout() { | 824 void IFWL_Edit::UpdateEditLayout() { | 
| 816   if (m_EdtEngine.GetTextLength() <= 0) | 825   if (m_EdtEngine.GetTextLength() <= 0) | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 877     m_fScrollOffsetX += fPosChanged; | 886     m_fScrollOffsetX += fPosChanged; | 
| 878   else | 887   else | 
| 879     m_fScrollOffsetY += fPosChanged; | 888     m_fScrollOffsetY += fPosChanged; | 
| 880   return true; | 889   return true; | 
| 881 } | 890 } | 
| 882 | 891 | 
| 883 void IFWL_Edit::UpdateVAlignment() { | 892 void IFWL_Edit::UpdateVAlignment() { | 
| 884   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 893   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 885   if (!pPage) | 894   if (!pPage) | 
| 886     return; | 895     return; | 
|  | 896 | 
| 887   const CFX_RectF& rtFDE = pPage->GetContentsBox(); | 897   const CFX_RectF& rtFDE = pPage->GetContentsBox(); | 
| 888   FX_FLOAT fOffsetY = 0.0f; | 898   FX_FLOAT fOffsetY = 0.0f; | 
| 889   FX_FLOAT fSpaceAbove = 0.0f; | 899   FX_FLOAT fSpaceAbove = 0.0f; | 
| 890   FX_FLOAT fSpaceBelow = 0.0f; | 900   FX_FLOAT fSpaceBelow = 0.0f; | 
| 891   CFX_SizeF* pSpace = static_cast<CFX_SizeF*>( | 901   CFX_SizeF* pSpace = static_cast<CFX_SizeF*>( | 
| 892       GetThemeCapacity(CFWL_WidgetCapacity::SpaceAboveBelow)); | 902       GetThemeCapacity(CFWL_WidgetCapacity::SpaceAboveBelow)); | 
| 893   if (pSpace) { | 903   if (pSpace) { | 
| 894     fSpaceAbove = pSpace->x; | 904     fSpaceAbove = pSpace->x; | 
| 895     fSpaceBelow = pSpace->y; | 905     fSpaceBelow = pSpace->y; | 
| 896   } | 906   } | 
| 897   if (fSpaceAbove < 0.1f) { | 907   if (fSpaceAbove < 0.1f) | 
| 898     fSpaceAbove = 0; | 908     fSpaceAbove = 0; | 
| 899   } | 909   if (fSpaceBelow < 0.1f) | 
| 900   if (fSpaceBelow < 0.1f) { |  | 
| 901     fSpaceBelow = 0; | 910     fSpaceBelow = 0; | 
| 902   } | 911 | 
| 903   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) { | 912   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) { | 
| 904     fOffsetY = (m_rtEngine.height - rtFDE.height) / 2; | 913     fOffsetY = (m_rtEngine.height - rtFDE.height) / 2; | 
| 905     if (fOffsetY < (fSpaceAbove + fSpaceBelow) / 2 && | 914     if (fOffsetY < (fSpaceAbove + fSpaceBelow) / 2 && | 
| 906         fSpaceAbove < fSpaceBelow) { | 915         fSpaceAbove < fSpaceBelow) { | 
| 907       return; | 916       return; | 
| 908     } | 917     } | 
| 909     fOffsetY += (fSpaceAbove - fSpaceBelow) / 2; | 918     fOffsetY += (fSpaceAbove - fSpaceBelow) / 2; | 
| 910   } else if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) { | 919   } else if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) { | 
| 911     fOffsetY = (m_rtEngine.height - rtFDE.height); | 920     fOffsetY = (m_rtEngine.height - rtFDE.height); | 
| 912     fOffsetY -= fSpaceBelow; | 921     fOffsetY -= fSpaceBelow; | 
| 913   } else { | 922   } else { | 
| 914     fOffsetY += fSpaceAbove; | 923     fOffsetY += fSpaceAbove; | 
| 915   } | 924   } | 
| 916   m_fVAlignOffset = fOffsetY; | 925   m_fVAlignOffset = std::max(fOffsetY, 0.0f); | 
| 917   if (m_fVAlignOffset < 0) { |  | 
| 918     m_fVAlignOffset = 0; |  | 
| 919   } |  | 
| 920 } | 926 } | 
|  | 927 | 
| 921 void IFWL_Edit::UpdateCaret() { | 928 void IFWL_Edit::UpdateCaret() { | 
| 922   CFX_RectF rtFDE; | 929   CFX_RectF rtFDE; | 
| 923   m_EdtEngine.GetCaretRect(rtFDE); | 930   m_EdtEngine.GetCaretRect(rtFDE); | 
|  | 931 | 
| 924   rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX, | 932   rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX, | 
| 925                m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset); | 933                m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset); | 
| 926   CFX_RectF rtCaret; | 934   CFX_RectF rtCaret; | 
| 927   rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height); | 935   rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height); | 
|  | 936 | 
| 928   CFX_RectF temp = rtCaret; | 937   CFX_RectF temp = rtCaret; | 
| 929   CFX_RectF rtClient; | 938   CFX_RectF rtClient; | 
| 930   GetClientRect(rtClient); | 939   GetClientRect(rtClient); | 
| 931   rtCaret.Intersect(rtClient); | 940   rtCaret.Intersect(rtClient); | 
|  | 941 | 
| 932   if (rtCaret.left > rtClient.right()) { | 942   if (rtCaret.left > rtClient.right()) { | 
| 933     FX_FLOAT right = rtCaret.right(); | 943     FX_FLOAT right = rtCaret.right(); | 
| 934     rtCaret.left = rtClient.right() - 1; | 944     rtCaret.left = rtClient.right() - 1; | 
| 935     rtCaret.width = right - rtCaret.left; | 945     rtCaret.width = right - rtCaret.left; | 
| 936   } | 946   } | 
| 937   bool bIntersect = !rtCaret.IsEmpty(); | 947 | 
| 938   bool bShow = true; | 948   bool bShow = true; | 
| 939   bool bShowWhole = false; | 949   bool bShowWhole = false; | 
| 940   if (!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) || !bIntersect) { | 950   if (!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) || rtCaret.IsEmpty()) | 
| 941     bShow = false; | 951     bShow = false; | 
| 942   } |  | 
| 943   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption && | 952   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption && | 
| 944       temp.right() > m_rtEngine.right()) { | 953       temp.right() > m_rtEngine.right()) { | 
| 945     bShowWhole = true; | 954     bShowWhole = true; | 
| 946   } | 955   } | 
| 947   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption && | 956   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption && | 
| 948       temp.bottom() > m_rtEngine.bottom()) { | 957       temp.bottom() > m_rtEngine.bottom()) { | 
| 949     bShowWhole = true; | 958     bShowWhole = true; | 
| 950   } else { | 959   } else { | 
| 951     bShow = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && bIntersect); | 960     bShow = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && | 
|  | 961              !rtCaret.IsEmpty()); | 
| 952   } | 962   } | 
| 953   if (bShowWhole) { | 963   if (bShowWhole) | 
| 954     rtCaret = temp; | 964     rtCaret = temp; | 
| 955   } |  | 
| 956   ShowCaret(bShow, &rtCaret); | 965   ShowCaret(bShow, &rtCaret); | 
| 957 } | 966 } | 
|  | 967 | 
| 958 IFWL_ScrollBar* IFWL_Edit::UpdateScroll() { | 968 IFWL_ScrollBar* IFWL_Edit::UpdateScroll() { | 
| 959   bool bShowHorz = | 969   bool bShowHorz = | 
| 960       m_pHorzScrollBar && | 970       m_pHorzScrollBar && | 
| 961       ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); | 971       ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); | 
| 962   bool bShowVert = | 972   bool bShowVert = | 
| 963       m_pVertScrollBar && | 973       m_pVertScrollBar && | 
| 964       ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); | 974       ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); | 
| 965   if (!bShowHorz && !bShowVert) { | 975   if (!bShowHorz && !bShowVert) | 
| 966     return nullptr; | 976     return nullptr; | 
| 967   } | 977 | 
| 968   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 978   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 969   if (!pPage) | 979   if (!pPage) | 
| 970     return nullptr; | 980     return nullptr; | 
|  | 981 | 
| 971   const CFX_RectF& rtFDE = pPage->GetContentsBox(); | 982   const CFX_RectF& rtFDE = pPage->GetContentsBox(); | 
| 972   IFWL_ScrollBar* pRepaint = nullptr; | 983   IFWL_ScrollBar* pRepaint = nullptr; | 
| 973   if (bShowHorz) { | 984   if (bShowHorz) { | 
| 974     CFX_RectF rtScroll; | 985     CFX_RectF rtScroll; | 
| 975     m_pHorzScrollBar->GetWidgetRect(rtScroll); | 986     m_pHorzScrollBar->GetWidgetRect(rtScroll); | 
| 976     if (rtScroll.width < rtFDE.width) { | 987     if (rtScroll.width < rtFDE.width) { | 
| 977       m_pHorzScrollBar->LockUpdate(); | 988       m_pHorzScrollBar->LockUpdate(); | 
| 978       FX_FLOAT fRange = rtFDE.width - rtScroll.width; | 989       FX_FLOAT fRange = rtFDE.width - rtScroll.width; | 
| 979       m_pHorzScrollBar->SetRange(0.0f, fRange); | 990       m_pHorzScrollBar->SetRange(0.0f, fRange); | 
| 980       FX_FLOAT fPos = m_fScrollOffsetX; | 991 | 
| 981       if (fPos < 0.0f) { | 992       FX_FLOAT fPos = std::min(std::max(m_fScrollOffsetX, 0.0f), fRange); | 
| 982         fPos = 0.0f; |  | 
| 983       } |  | 
| 984       if (fPos > fRange) { |  | 
| 985         fPos = fRange; |  | 
| 986       } |  | 
| 987       m_pHorzScrollBar->SetPos(fPos); | 993       m_pHorzScrollBar->SetPos(fPos); | 
| 988       m_pHorzScrollBar->SetTrackPos(fPos); | 994       m_pHorzScrollBar->SetTrackPos(fPos); | 
| 989       m_pHorzScrollBar->SetPageSize(rtScroll.width); | 995       m_pHorzScrollBar->SetPageSize(rtScroll.width); | 
| 990       m_pHorzScrollBar->SetStepSize(rtScroll.width / 10); | 996       m_pHorzScrollBar->SetStepSize(rtScroll.width / 10); | 
| 991       m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, false); | 997       m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, false); | 
| 992       m_pHorzScrollBar->UnlockUpdate(); | 998       m_pHorzScrollBar->UnlockUpdate(); | 
| 993       m_pHorzScrollBar->Update(); | 999       m_pHorzScrollBar->Update(); | 
| 994       pRepaint = m_pHorzScrollBar.get(); | 1000       pRepaint = m_pHorzScrollBar.get(); | 
| 995     } else if ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { | 1001     } else if ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { | 
| 996       m_pHorzScrollBar->LockUpdate(); | 1002       m_pHorzScrollBar->LockUpdate(); | 
| 997       m_pHorzScrollBar->SetRange(0, -1); | 1003       m_pHorzScrollBar->SetRange(0, -1); | 
| 998       m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, true); | 1004       m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, true); | 
| 999       m_pHorzScrollBar->UnlockUpdate(); | 1005       m_pHorzScrollBar->UnlockUpdate(); | 
| 1000       m_pHorzScrollBar->Update(); | 1006       m_pHorzScrollBar->Update(); | 
| 1001       pRepaint = m_pHorzScrollBar.get(); | 1007       pRepaint = m_pHorzScrollBar.get(); | 
| 1002     } | 1008     } | 
| 1003   } | 1009   } | 
|  | 1010 | 
| 1004   if (bShowVert) { | 1011   if (bShowVert) { | 
| 1005     CFX_RectF rtScroll; | 1012     CFX_RectF rtScroll; | 
| 1006     m_pVertScrollBar->GetWidgetRect(rtScroll); | 1013     m_pVertScrollBar->GetWidgetRect(rtScroll); | 
| 1007     if (rtScroll.height < rtFDE.height) { | 1014     if (rtScroll.height < rtFDE.height) { | 
| 1008       m_pVertScrollBar->LockUpdate(); | 1015       m_pVertScrollBar->LockUpdate(); | 
| 1009       FX_FLOAT fStep = m_EdtEngine.GetEditParams()->fLineSpace; | 1016       FX_FLOAT fStep = m_EdtEngine.GetEditParams()->fLineSpace; | 
| 1010       FX_FLOAT fRange = rtFDE.height - m_rtEngine.height; | 1017       FX_FLOAT fRange = std::max(rtFDE.height - m_rtEngine.height, fStep); | 
| 1011       if (fRange < fStep) { | 1018 | 
| 1012         fRange = fStep; |  | 
| 1013       } |  | 
| 1014       m_pVertScrollBar->SetRange(0.0f, fRange); | 1019       m_pVertScrollBar->SetRange(0.0f, fRange); | 
| 1015       FX_FLOAT fPos = m_fScrollOffsetY; | 1020       FX_FLOAT fPos = std::min(std::max(m_fScrollOffsetY, 0.0f), fRange); | 
| 1016       if (fPos < 0.0f) { |  | 
| 1017         fPos = 0.0f; |  | 
| 1018       } |  | 
| 1019       if (fPos > fRange) { |  | 
| 1020         fPos = fRange; |  | 
| 1021       } |  | 
| 1022       m_pVertScrollBar->SetPos(fPos); | 1021       m_pVertScrollBar->SetPos(fPos); | 
| 1023       m_pVertScrollBar->SetTrackPos(fPos); | 1022       m_pVertScrollBar->SetTrackPos(fPos); | 
| 1024       m_pVertScrollBar->SetPageSize(rtScroll.height); | 1023       m_pVertScrollBar->SetPageSize(rtScroll.height); | 
| 1025       m_pVertScrollBar->SetStepSize(fStep); | 1024       m_pVertScrollBar->SetStepSize(fStep); | 
| 1026       m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, false); | 1025       m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, false); | 
| 1027       m_pVertScrollBar->UnlockUpdate(); | 1026       m_pVertScrollBar->UnlockUpdate(); | 
| 1028       m_pVertScrollBar->Update(); | 1027       m_pVertScrollBar->Update(); | 
| 1029       pRepaint = m_pVertScrollBar.get(); | 1028       pRepaint = m_pVertScrollBar.get(); | 
| 1030     } else if ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { | 1029     } else if ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { | 
| 1031       m_pVertScrollBar->LockUpdate(); | 1030       m_pVertScrollBar->LockUpdate(); | 
| 1032       m_pVertScrollBar->SetRange(0, -1); | 1031       m_pVertScrollBar->SetRange(0, -1); | 
| 1033       m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, true); | 1032       m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, true); | 
| 1034       m_pVertScrollBar->UnlockUpdate(); | 1033       m_pVertScrollBar->UnlockUpdate(); | 
| 1035       m_pVertScrollBar->Update(); | 1034       m_pVertScrollBar->Update(); | 
| 1036       pRepaint = m_pVertScrollBar.get(); | 1035       pRepaint = m_pVertScrollBar.get(); | 
| 1037     } | 1036     } | 
| 1038   } | 1037   } | 
| 1039   return pRepaint; | 1038   return pRepaint; | 
| 1040 } | 1039 } | 
|  | 1040 | 
| 1041 bool IFWL_Edit::IsShowScrollBar(bool bVert) { | 1041 bool IFWL_Edit::IsShowScrollBar(bool bVert) { | 
| 1042   bool bShow = | 1042   bool bShow = | 
| 1043       (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) | 1043       (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) | 
| 1044           ? (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == | 1044           ? (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == | 
| 1045                 FWL_WGTSTATE_Focused | 1045                 FWL_WGTSTATE_Focused | 
| 1046           : true; | 1046           : true; | 
| 1047   if (bVert) { | 1047   if (bVert) { | 
| 1048     return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) && | 1048     return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) && | 
| 1049            (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) && | 1049            (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) && | 
| 1050            IsContentHeightOverflow(); | 1050            IsContentHeightOverflow(); | 
| 1051   } | 1051   } | 
| 1052   return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) && | 1052   return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) && | 
| 1053          (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); | 1053          (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); | 
| 1054 } | 1054 } | 
|  | 1055 | 
| 1055 bool IFWL_Edit::IsContentHeightOverflow() { | 1056 bool IFWL_Edit::IsContentHeightOverflow() { | 
| 1056   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 1057   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 1057   if (!pPage) | 1058   if (!pPage) | 
| 1058     return false; | 1059     return false; | 
| 1059   return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; | 1060   return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; | 
| 1060 } | 1061 } | 
|  | 1062 | 
| 1061 int32_t IFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) { | 1063 int32_t IFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) { | 
| 1062   int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords); | 1064   int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords); | 
| 1063   if (m_iCurRecord == nCount - 1) { | 1065   if (m_iCurRecord == nCount - 1) { | 
| 1064     if (nCount == m_iMaxRecord) { | 1066     if (nCount == m_iMaxRecord) { | 
| 1065       m_DoRecords.pop_front(); | 1067       m_DoRecords.pop_front(); | 
| 1066       m_iCurRecord--; | 1068       m_iCurRecord--; | 
| 1067     } | 1069     } | 
| 1068   } else { | 1070   } else { | 
| 1069     m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1, | 1071     m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1, | 
| 1070                       m_DoRecords.end()); | 1072                       m_DoRecords.end()); | 
| 1071   } | 1073   } | 
| 1072 | 1074 | 
| 1073   m_DoRecords.push_back(std::unique_ptr<IFDE_TxtEdtDoRecord>(pRecord)); | 1075   m_DoRecords.push_back(std::unique_ptr<IFDE_TxtEdtDoRecord>(pRecord)); | 
| 1074   m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; | 1076   m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; | 
| 1075   return m_iCurRecord; | 1077   return m_iCurRecord; | 
| 1076 } | 1078 } | 
|  | 1079 | 
| 1077 void IFWL_Edit::Layout() { | 1080 void IFWL_Edit::Layout() { | 
| 1078   GetClientRect(m_rtClient); | 1081   GetClientRect(m_rtClient); | 
| 1079   m_rtEngine = m_rtClient; | 1082   m_rtEngine = m_rtClient; | 
| 1080   FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 1083   FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 
| 1081       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1084       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 
| 1082   if (!pfWidth) | 1085   if (!pfWidth) | 
| 1083     return; | 1086     return; | 
|  | 1087 | 
| 1084   FX_FLOAT fWidth = *pfWidth; | 1088   FX_FLOAT fWidth = *pfWidth; | 
| 1085   if (!m_pOuter) { | 1089   if (!m_pOuter) { | 
| 1086     CFX_RectF* pUIMargin = static_cast<CFX_RectF*>( | 1090     CFX_RectF* pUIMargin = static_cast<CFX_RectF*>( | 
| 1087         GetThemeCapacity(CFWL_WidgetCapacity::UIMargin)); | 1091         GetThemeCapacity(CFWL_WidgetCapacity::UIMargin)); | 
| 1088     if (pUIMargin) { | 1092     if (pUIMargin) { | 
| 1089       m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, | 1093       m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, | 
| 1090                          pUIMargin->height); | 1094                          pUIMargin->height); | 
| 1091     } | 1095     } | 
| 1092   } else if (m_pOuter->GetClassID() == FWL_Type::DateTimePicker) { | 1096   } else if (m_pOuter->GetClassID() == FWL_Type::DateTimePicker) { | 
| 1093     CFWL_ThemePart part; | 1097     CFWL_ThemePart part; | 
| 1094     part.m_pWidget = m_pOuter; | 1098     part.m_pWidget = m_pOuter; | 
| 1095     CFX_RectF* pUIMargin = | 1099     CFX_RectF* pUIMargin = | 
| 1096         static_cast<CFX_RectF*>(m_pOuter->GetThemeProvider()->GetCapacity( | 1100         static_cast<CFX_RectF*>(m_pOuter->GetThemeProvider()->GetCapacity( | 
| 1097             &part, CFWL_WidgetCapacity::UIMargin)); | 1101             &part, CFWL_WidgetCapacity::UIMargin)); | 
| 1098     if (pUIMargin) { | 1102     if (pUIMargin) { | 
| 1099       m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, | 1103       m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, | 
| 1100                          pUIMargin->height); | 1104                          pUIMargin->height); | 
| 1101     } | 1105     } | 
| 1102   } | 1106   } | 
|  | 1107 | 
| 1103   bool bShowVertScrollbar = IsShowScrollBar(true); | 1108   bool bShowVertScrollbar = IsShowScrollBar(true); | 
| 1104   bool bShowHorzScrollbar = IsShowScrollBar(false); | 1109   bool bShowHorzScrollbar = IsShowScrollBar(false); | 
| 1105   if (bShowVertScrollbar) { | 1110   if (bShowVertScrollbar) { | 
| 1106     InitScrollBar(); | 1111     InitScrollBar(); | 
|  | 1112 | 
| 1107     CFX_RectF rtVertScr; | 1113     CFX_RectF rtVertScr; | 
| 1108     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1114     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 1109       rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 1115       rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 
| 1110                     m_rtClient.height); | 1116                     m_rtClient.height); | 
| 1111     } else { | 1117     } else { | 
| 1112       rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 1118       rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 
| 1113                     m_rtClient.height); | 1119                     m_rtClient.height); | 
| 1114       if (bShowHorzScrollbar) { | 1120       if (bShowHorzScrollbar) | 
| 1115         rtVertScr.height -= fWidth; | 1121         rtVertScr.height -= fWidth; | 
| 1116       } |  | 
| 1117       m_rtEngine.width -= fWidth; | 1122       m_rtEngine.width -= fWidth; | 
| 1118     } | 1123     } | 
|  | 1124 | 
| 1119     m_pVertScrollBar->SetWidgetRect(rtVertScr); | 1125     m_pVertScrollBar->SetWidgetRect(rtVertScr); | 
| 1120     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 1126     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 
| 1121     m_pVertScrollBar->Update(); | 1127     m_pVertScrollBar->Update(); | 
| 1122   } else if (m_pVertScrollBar) { | 1128   } else if (m_pVertScrollBar) { | 
| 1123     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 1129     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 
| 1124   } | 1130   } | 
|  | 1131 | 
| 1125   if (bShowHorzScrollbar) { | 1132   if (bShowHorzScrollbar) { | 
| 1126     InitScrollBar(false); | 1133     InitScrollBar(false); | 
|  | 1134 | 
| 1127     CFX_RectF rtHoriScr; | 1135     CFX_RectF rtHoriScr; | 
| 1128     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1136     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 1129       rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 1137       rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 
| 1130                     m_rtClient.width, fWidth); | 1138                     m_rtClient.width, fWidth); | 
| 1131     } else { | 1139     } else { | 
| 1132       rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 1140       rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 
| 1133                     m_rtClient.width, fWidth); | 1141                     m_rtClient.width, fWidth); | 
| 1134       if (bShowVertScrollbar) { | 1142       if (bShowVertScrollbar) | 
| 1135         rtHoriScr.width -= fWidth; | 1143         rtHoriScr.width -= fWidth; | 
| 1136       } |  | 
| 1137       m_rtEngine.height -= fWidth; | 1144       m_rtEngine.height -= fWidth; | 
| 1138     } | 1145     } | 
| 1139     m_pHorzScrollBar->SetWidgetRect(rtHoriScr); | 1146     m_pHorzScrollBar->SetWidgetRect(rtHoriScr); | 
| 1140     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 1147     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 
| 1141     m_pHorzScrollBar->Update(); | 1148     m_pHorzScrollBar->Update(); | 
| 1142   } else if (m_pHorzScrollBar) { | 1149   } else if (m_pHorzScrollBar) { | 
| 1143     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 1150     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 
| 1144   } | 1151   } | 
| 1145 } | 1152 } | 
|  | 1153 | 
| 1146 void IFWL_Edit::LayoutScrollBar() { | 1154 void IFWL_Edit::LayoutScrollBar() { | 
| 1147   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) == | 1155   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) == | 
| 1148       0) { | 1156       0) { | 
| 1149     return; | 1157     return; | 
| 1150   } | 1158   } | 
|  | 1159 | 
| 1151   FX_FLOAT* pfWidth = nullptr; | 1160   FX_FLOAT* pfWidth = nullptr; | 
| 1152   bool bShowVertScrollbar = IsShowScrollBar(true); | 1161   bool bShowVertScrollbar = IsShowScrollBar(true); | 
| 1153   bool bShowHorzScrollbar = IsShowScrollBar(false); | 1162   bool bShowHorzScrollbar = IsShowScrollBar(false); | 
| 1154   if (bShowVertScrollbar) { | 1163   if (bShowVertScrollbar) { | 
| 1155     if (!m_pVertScrollBar) { | 1164     if (!m_pVertScrollBar) { | 
| 1156       pfWidth = static_cast<FX_FLOAT*>( | 1165       pfWidth = static_cast<FX_FLOAT*>( | 
| 1157           GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1166           GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 
| 1158       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 1167       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 
| 1159       InitScrollBar(); | 1168       InitScrollBar(); | 
| 1160       CFX_RectF rtVertScr; | 1169       CFX_RectF rtVertScr; | 
| 1161       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1170       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 1162         rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 1171         rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 
| 1163                       m_rtClient.height); | 1172                       m_rtClient.height); | 
| 1164       } else { | 1173       } else { | 
| 1165         rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 1174         rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 
| 1166                       m_rtClient.height); | 1175                       m_rtClient.height); | 
| 1167         if (bShowHorzScrollbar) { | 1176         if (bShowHorzScrollbar) | 
| 1168           rtVertScr.height -= fWidth; | 1177           rtVertScr.height -= fWidth; | 
| 1169         } |  | 
| 1170       } | 1178       } | 
| 1171       m_pVertScrollBar->SetWidgetRect(rtVertScr); | 1179       m_pVertScrollBar->SetWidgetRect(rtVertScr); | 
| 1172       m_pVertScrollBar->Update(); | 1180       m_pVertScrollBar->Update(); | 
| 1173     } | 1181     } | 
| 1174     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 1182     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 
| 1175   } else if (m_pVertScrollBar) { | 1183   } else if (m_pVertScrollBar) { | 
| 1176     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 1184     m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 
| 1177   } | 1185   } | 
|  | 1186 | 
| 1178   if (bShowHorzScrollbar) { | 1187   if (bShowHorzScrollbar) { | 
| 1179     if (!m_pHorzScrollBar) { | 1188     if (!m_pHorzScrollBar) { | 
| 1180       if (!pfWidth) { | 1189       if (!pfWidth) { | 
| 1181         pfWidth = static_cast<FX_FLOAT*>( | 1190         pfWidth = static_cast<FX_FLOAT*>( | 
| 1182             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1191             GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 
| 1183       } | 1192       } | 
|  | 1193 | 
| 1184       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 1194       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 
| 1185       InitScrollBar(false); | 1195       InitScrollBar(false); | 
| 1186       CFX_RectF rtHoriScr; | 1196       CFX_RectF rtHoriScr; | 
| 1187       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1197       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 
| 1188         rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 1198         rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 
| 1189                       m_rtClient.width, fWidth); | 1199                       m_rtClient.width, fWidth); | 
| 1190       } else { | 1200       } else { | 
| 1191         rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 1201         rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 
| 1192                       m_rtClient.width, fWidth); | 1202                       m_rtClient.width, fWidth); | 
| 1193         if (bShowVertScrollbar) { | 1203         if (bShowVertScrollbar) | 
| 1194           rtHoriScr.width -= (fWidth); | 1204           rtHoriScr.width -= (fWidth); | 
| 1195         } |  | 
| 1196       } | 1205       } | 
| 1197       m_pHorzScrollBar->SetWidgetRect(rtHoriScr); | 1206       m_pHorzScrollBar->SetWidgetRect(rtHoriScr); | 
| 1198       m_pHorzScrollBar->Update(); | 1207       m_pHorzScrollBar->Update(); | 
| 1199     } | 1208     } | 
| 1200     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 1209     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, false); | 
| 1201   } else if (m_pHorzScrollBar) { | 1210   } else if (m_pHorzScrollBar) { | 
| 1202     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 1211     m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, true); | 
| 1203   } | 1212   } | 
| 1204   if (bShowVertScrollbar || bShowHorzScrollbar) { | 1213   if (bShowVertScrollbar || bShowHorzScrollbar) | 
| 1205     UpdateScroll(); | 1214     UpdateScroll(); | 
| 1206   } |  | 
| 1207 } | 1215 } | 
| 1208 | 1216 | 
| 1209 void IFWL_Edit::DeviceToEngine(CFX_PointF& pt) { | 1217 void IFWL_Edit::DeviceToEngine(CFX_PointF& pt) { | 
| 1210   pt.x += m_fScrollOffsetX - m_rtEngine.left; | 1218   pt.x += m_fScrollOffsetX - m_rtEngine.left; | 
| 1211   pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset; | 1219   pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset; | 
| 1212 } | 1220 } | 
| 1213 | 1221 | 
| 1214 void IFWL_Edit::InitScrollBar(bool bVert) { | 1222 void IFWL_Edit::InitScrollBar(bool bVert) { | 
| 1215   if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) { | 1223   if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) | 
| 1216     return; | 1224     return; | 
| 1217   } |  | 
| 1218 | 1225 | 
| 1219   auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); | 1226   auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); | 
| 1220   prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; | 1227   prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; | 
| 1221   prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; | 1228   prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; | 
| 1222   prop->m_pParent = this; | 1229   prop->m_pParent = this; | 
| 1223   prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; | 1230   prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; | 
| 1224 | 1231 | 
| 1225   IFWL_ScrollBar* sb = new IFWL_ScrollBar(m_pOwnerApp, std::move(prop), this); | 1232   IFWL_ScrollBar* sb = new IFWL_ScrollBar(m_pOwnerApp, std::move(prop), this); | 
| 1226   if (bVert) | 1233   if (bVert) | 
| 1227     m_pVertScrollBar.reset(sb); | 1234     m_pVertScrollBar.reset(sb); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 1243     return false; | 1250     return false; | 
| 1244 | 1251 | 
| 1245   if (bVisible) { | 1252   if (bVisible) { | 
| 1246     CFX_Matrix mt; | 1253     CFX_Matrix mt; | 
| 1247     pXFAWidget->GetRotateMatrix(mt); | 1254     pXFAWidget->GetRotateMatrix(mt); | 
| 1248     CFX_RectF rt(*pRtAnchor); | 1255     CFX_RectF rt(*pRtAnchor); | 
| 1249     mt.TransformRect(rt); | 1256     mt.TransformRect(rt); | 
| 1250     pDocEnvironment->DisplayCaret(pXFAWidget, bVisible, &rt); | 1257     pDocEnvironment->DisplayCaret(pXFAWidget, bVisible, &rt); | 
| 1251     return true; | 1258     return true; | 
| 1252   } | 1259   } | 
|  | 1260 | 
| 1253   pDocEnvironment->DisplayCaret(pXFAWidget, bVisible, pRtAnchor); | 1261   pDocEnvironment->DisplayCaret(pXFAWidget, bVisible, pRtAnchor); | 
| 1254   return true; | 1262   return true; | 
| 1255 } | 1263 } | 
| 1256 | 1264 | 
| 1257 void IFWL_Edit::ShowCaret(bool bVisible, CFX_RectF* pRect) { | 1265 void IFWL_Edit::ShowCaret(bool bVisible, CFX_RectF* pRect) { | 
| 1258   if (m_pCaret) { | 1266   if (m_pCaret) { | 
| 1259     m_pCaret->ShowCaret(bVisible); | 1267     m_pCaret->ShowCaret(bVisible); | 
| 1260     if (bVisible && !pRect->IsEmpty()) { | 1268     if (bVisible && !pRect->IsEmpty()) | 
| 1261       m_pCaret->SetWidgetRect(*pRect); | 1269       m_pCaret->SetWidgetRect(*pRect); | 
|  | 1270     Repaint(&m_rtEngine); | 
|  | 1271     return; | 
|  | 1272   } | 
|  | 1273 | 
|  | 1274   IFWL_Widget* pOuter = this; | 
|  | 1275   if (bVisible) { | 
|  | 1276     pRect->Offset(m_pProperties->m_rtWidget.left, | 
|  | 1277                   m_pProperties->m_rtWidget.top); | 
|  | 1278   } | 
|  | 1279   while (pOuter->GetOuter()) { | 
|  | 1280     pOuter = pOuter->GetOuter(); | 
|  | 1281     if (bVisible) { | 
|  | 1282       CFX_RectF rtOuter; | 
|  | 1283       pOuter->GetWidgetRect(rtOuter); | 
|  | 1284       pRect->Offset(rtOuter.left, rtOuter.top); | 
| 1262     } | 1285     } | 
| 1263     Repaint(&m_rtEngine); |  | 
| 1264   } else { |  | 
| 1265     IFWL_Widget* pOuter = this; |  | 
| 1266     if (bVisible) { |  | 
| 1267       pRect->Offset(m_pProperties->m_rtWidget.left, |  | 
| 1268                     m_pProperties->m_rtWidget.top); |  | 
| 1269     } |  | 
| 1270     while (pOuter->GetOuter()) { |  | 
| 1271       pOuter = pOuter->GetOuter(); |  | 
| 1272       if (bVisible) { |  | 
| 1273         CFX_RectF rtOuter; |  | 
| 1274         pOuter->GetWidgetRect(rtOuter); |  | 
| 1275         pRect->Offset(rtOuter.left, rtOuter.top); |  | 
| 1276       } |  | 
| 1277     } |  | 
| 1278     FWL_ShowCaret(pOuter, bVisible, pRect); |  | 
| 1279   } | 1286   } | 
|  | 1287   FWL_ShowCaret(pOuter, bVisible, pRect); | 
| 1280 } | 1288 } | 
|  | 1289 | 
| 1281 bool IFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) { | 1290 bool IFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) { | 
| 1282   if (!m_bSetRange) { | 1291   if (!m_bSetRange) | 
| 1283     return true; | 1292     return true; | 
| 1284   } | 1293 | 
| 1285   CFX_WideString wsOld, wsText; | 1294   CFX_WideString wsOld, wsText; | 
| 1286   m_EdtEngine.GetText(wsText, 0); | 1295   m_EdtEngine.GetText(wsText, 0); | 
| 1287   if (wsText.IsEmpty()) { | 1296   if (wsText.IsEmpty()) { | 
| 1288     if (cNum == L'0') { | 1297     if (cNum == L'0') | 
| 1289       return false; | 1298       return false; | 
| 1290     } |  | 
| 1291     return true; | 1299     return true; | 
| 1292   } | 1300   } | 
|  | 1301 | 
| 1293   int32_t caretPos = m_EdtEngine.GetCaretPos(); | 1302   int32_t caretPos = m_EdtEngine.GetCaretPos(); | 
| 1294   int32_t iSel = CountSelRanges(); | 1303   if (CountSelRanges() == 0) { | 
| 1295   if (iSel == 0) { | 1304     if (cNum == L'0' && caretPos == 0) | 
| 1296     if (cNum == L'0' && caretPos == 0) { |  | 
| 1297       return false; | 1305       return false; | 
| 1298     } | 1306 | 
| 1299     int32_t nLen = wsText.GetLength(); | 1307     int32_t nLen = wsText.GetLength(); | 
| 1300     CFX_WideString l = wsText.Mid(0, caretPos); | 1308     CFX_WideString l = wsText.Mid(0, caretPos); | 
| 1301     CFX_WideString r = wsText.Mid(caretPos, nLen - caretPos); | 1309     CFX_WideString r = wsText.Mid(caretPos, nLen - caretPos); | 
| 1302     CFX_WideString wsNew = l + cNum + r; | 1310     CFX_WideString wsNew = l + cNum + r; | 
| 1303     if (wsNew.GetInteger() <= m_iMax) { | 1311     if (wsNew.GetInteger() <= m_iMax) | 
| 1304       return true; | 1312       return true; | 
| 1305     } | 1313     return false; | 
| 1306   } else { |  | 
| 1307     if (wsText.GetInteger() <= m_iMax) { |  | 
| 1308       return true; |  | 
| 1309     } |  | 
| 1310   } | 1314   } | 
|  | 1315 | 
|  | 1316   if (wsText.GetInteger() <= m_iMax) | 
|  | 1317     return true; | 
| 1311   return false; | 1318   return false; | 
| 1312 } | 1319 } | 
|  | 1320 | 
| 1313 void IFWL_Edit::InitCaret() { | 1321 void IFWL_Edit::InitCaret() { | 
| 1314   if (!m_pCaret) { | 1322   if (!m_pCaret) { | 
| 1315     if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { | 1323     if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { | 
| 1316       m_pCaret.reset(new IFWL_Caret( | 1324       m_pCaret.reset(new IFWL_Caret( | 
| 1317           m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this)); | 1325           m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this)); | 
| 1318       m_pCaret->SetParent(this); | 1326       m_pCaret->SetParent(this); | 
| 1319       m_pCaret->SetStates(m_pProperties->m_dwStates); | 1327       m_pCaret->SetStates(m_pProperties->m_dwStates); | 
| 1320     } | 1328     } | 
| 1321   } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret) == | 1329   } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret) == | 
| 1322              0) { | 1330              0) { | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1409   DrawWidget(pGraphics, pMatrix); | 1417   DrawWidget(pGraphics, pMatrix); | 
| 1410 } | 1418 } | 
| 1411 | 1419 | 
| 1412 void IFWL_Edit::DoButtonDown(CFWL_MsgMouse* pMsg) { | 1420 void IFWL_Edit::DoButtonDown(CFWL_MsgMouse* pMsg) { | 
| 1413   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 1421   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 
| 1414     SetFocus(true); | 1422     SetFocus(true); | 
| 1415 | 1423 | 
| 1416   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 1424   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 
| 1417   if (!pPage) | 1425   if (!pPage) | 
| 1418     return; | 1426     return; | 
|  | 1427 | 
| 1419   CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); | 1428   CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); | 
| 1420   DeviceToEngine(pt); | 1429   DeviceToEngine(pt); | 
| 1421   bool bBefore = true; | 1430   bool bBefore = true; | 
| 1422   int32_t nIndex = pPage->GetCharIndex(pt, bBefore); | 1431   int32_t nIndex = pPage->GetCharIndex(pt, bBefore); | 
| 1423   if (nIndex < 0) | 1432   if (nIndex < 0) | 
| 1424     nIndex = 0; | 1433     nIndex = 0; | 
| 1425 | 1434 | 
| 1426   m_EdtEngine.SetCaretPos(nIndex, bBefore); | 1435   m_EdtEngine.SetCaretPos(nIndex, bBefore); | 
| 1427 } | 1436 } | 
| 1428 | 1437 | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1442       int32_t nSel = CountSelRanges(); | 1451       int32_t nSel = CountSelRanges(); | 
| 1443       if (nSel > 0) { | 1452       if (nSel > 0) { | 
| 1444         ClearSelections(); | 1453         ClearSelections(); | 
| 1445         bRepaint = true; | 1454         bRepaint = true; | 
| 1446       } | 1455       } | 
| 1447       m_EdtEngine.SetCaretPos(0, true); | 1456       m_EdtEngine.SetCaretPos(0, true); | 
| 1448       UpdateOffset(); | 1457       UpdateOffset(); | 
| 1449     } | 1458     } | 
| 1450     ClearRecord(); | 1459     ClearRecord(); | 
| 1451   } | 1460   } | 
|  | 1461 | 
| 1452   LayoutScrollBar(); | 1462   LayoutScrollBar(); | 
| 1453   if (bRepaint) { | 1463   if (!bRepaint) | 
| 1454     CFX_RectF rtInvalidate; | 1464     return; | 
| 1455     rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, | 1465 | 
| 1456                      m_pProperties->m_rtWidget.height); | 1466   CFX_RectF rtInvalidate; | 
| 1457     Repaint(&rtInvalidate); | 1467   rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, | 
| 1458   } | 1468                    m_pProperties->m_rtWidget.height); | 
|  | 1469   Repaint(&rtInvalidate); | 
| 1459 } | 1470 } | 
| 1460 | 1471 | 
| 1461 void IFWL_Edit::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 1472 void IFWL_Edit::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 
| 1462   if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) | 1473   if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) | 
| 1463     return; | 1474     return; | 
| 1464 | 1475 | 
| 1465   m_bLButtonDown = true; | 1476   m_bLButtonDown = true; | 
| 1466   SetGrab(true); | 1477   SetGrab(true); | 
| 1467   DoButtonDown(pMsg); | 1478   DoButtonDown(pMsg); | 
| 1468   int32_t nIndex = m_EdtEngine.GetCaretPos(); | 1479   int32_t nIndex = m_EdtEngine.GetCaretPos(); | 
| 1469   bool bRepaint = false; | 1480   bool bRepaint = false; | 
| 1470   int32_t iCount = m_EdtEngine.CountSelRanges(); | 1481   if (m_EdtEngine.CountSelRanges() > 0) { | 
| 1471   if (iCount > 0) { |  | 
| 1472     m_EdtEngine.ClearSelection(); | 1482     m_EdtEngine.ClearSelection(); | 
| 1473     bRepaint = true; | 1483     bRepaint = true; | 
| 1474   } | 1484   } | 
| 1475 | 1485 | 
| 1476   bool bShift = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Shift); | 1486   if ((pMsg->m_dwFlags & FWL_KEYFLAG_Shift) && m_nSelStart != nIndex) { | 
| 1477   if (bShift && m_nSelStart != nIndex) { |  | 
| 1478     int32_t iStart = std::min(m_nSelStart, nIndex); | 1487     int32_t iStart = std::min(m_nSelStart, nIndex); | 
| 1479     int32_t iEnd = std::max(m_nSelStart, nIndex); | 1488     int32_t iEnd = std::max(m_nSelStart, nIndex); | 
| 1480     m_EdtEngine.AddSelRange(iStart, iEnd - iStart); | 1489     m_EdtEngine.AddSelRange(iStart, iEnd - iStart); | 
| 1481     bRepaint = true; | 1490     bRepaint = true; | 
| 1482   } else { | 1491   } else { | 
| 1483     m_nSelStart = nIndex; | 1492     m_nSelStart = nIndex; | 
| 1484   } | 1493   } | 
| 1485   if (bRepaint) | 1494   if (bRepaint) | 
| 1486     Repaint(&m_rtEngine); | 1495     Repaint(&m_rtEngine); | 
| 1487 } | 1496 } | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 1516   if (!pPage) | 1525   if (!pPage) | 
| 1517     return; | 1526     return; | 
| 1518 | 1527 | 
| 1519   CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); | 1528   CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); | 
| 1520   DeviceToEngine(pt); | 1529   DeviceToEngine(pt); | 
| 1521   bool bBefore = true; | 1530   bool bBefore = true; | 
| 1522   int32_t nIndex = pPage->GetCharIndex(pt, bBefore); | 1531   int32_t nIndex = pPage->GetCharIndex(pt, bBefore); | 
| 1523   m_EdtEngine.SetCaretPos(nIndex, bBefore); | 1532   m_EdtEngine.SetCaretPos(nIndex, bBefore); | 
| 1524   nIndex = m_EdtEngine.GetCaretPos(); | 1533   nIndex = m_EdtEngine.GetCaretPos(); | 
| 1525   m_EdtEngine.ClearSelection(); | 1534   m_EdtEngine.ClearSelection(); | 
| 1526   if (nIndex != m_nSelStart) { |  | 
| 1527     int32_t nLen = m_EdtEngine.GetTextLength(); |  | 
| 1528     if (m_nSelStart >= nLen) |  | 
| 1529       m_nSelStart = nLen; |  | 
| 1530 | 1535 | 
| 1531     m_EdtEngine.AddSelRange(std::min(m_nSelStart, nIndex), | 1536   if (nIndex == m_nSelStart) | 
| 1532                             FXSYS_abs(nIndex - m_nSelStart)); | 1537     return; | 
| 1533   } | 1538 | 
|  | 1539   int32_t nLen = m_EdtEngine.GetTextLength(); | 
|  | 1540   if (m_nSelStart >= nLen) | 
|  | 1541     m_nSelStart = nLen; | 
|  | 1542 | 
|  | 1543   m_EdtEngine.AddSelRange(std::min(m_nSelStart, nIndex), | 
|  | 1544                           FXSYS_abs(nIndex - m_nSelStart)); | 
| 1534 } | 1545 } | 
| 1535 | 1546 | 
| 1536 void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) { | 1547 void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) { | 
| 1537   FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone; | 1548   FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone; | 
| 1538   bool bShift = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Shift); | 1549   bool bShift = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Shift); | 
| 1539   bool bCtrl = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl); | 1550   bool bCtrl = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl); | 
| 1540   uint32_t dwKeyCode = pMsg->m_dwKeyCode; | 1551   uint32_t dwKeyCode = pMsg->m_dwKeyCode; | 
| 1541   switch (dwKeyCode) { | 1552   switch (dwKeyCode) { | 
| 1542     case FWL_VKEY_Left: { | 1553     case FWL_VKEY_Left: { | 
| 1543       MoveCaret = MC_Left; | 1554       MoveCaret = MC_Left; | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1591     m_EdtEngine.MoveCaretPos(MoveCaret, bShift, bCtrl); | 1602     m_EdtEngine.MoveCaretPos(MoveCaret, bShift, bCtrl); | 
| 1592 } | 1603 } | 
| 1593 | 1604 | 
| 1594 void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) { | 1605 void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) { | 
| 1595   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || | 1606   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || | 
| 1596       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 1607       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { | 
| 1597     return; | 1608     return; | 
| 1598   } | 1609   } | 
| 1599 | 1610 | 
| 1600   int32_t iError = 0; | 1611   int32_t iError = 0; | 
| 1601   FX_WCHAR c = (FX_WCHAR)pMsg->m_dwKeyCode; | 1612   FX_WCHAR c = static_cast<FX_WCHAR>(pMsg->m_dwKeyCode); | 
| 1602   int32_t nCaret = m_EdtEngine.GetCaretPos(); | 1613   int32_t nCaret = m_EdtEngine.GetCaretPos(); | 
| 1603   switch (c) { | 1614   switch (c) { | 
| 1604     case FWL_VKEY_Back: | 1615     case FWL_VKEY_Back: | 
| 1605       m_EdtEngine.Delete(nCaret, true); | 1616       m_EdtEngine.Delete(nCaret, true); | 
| 1606       break; | 1617       break; | 
| 1607     case 0x0A: | 1618     case FWL_VKEY_NewLine: | 
| 1608       break; |  | 
| 1609     case FWL_VKEY_Escape: | 1619     case FWL_VKEY_Escape: | 
| 1610       break; | 1620       break; | 
| 1611     case FWL_VKEY_Tab: { | 1621     case FWL_VKEY_Tab: { | 
| 1612       iError = m_EdtEngine.Insert(nCaret, L"\t", 1); | 1622       iError = m_EdtEngine.Insert(nCaret, L"\t", 1); | 
| 1613       break; | 1623       break; | 
| 1614     } | 1624     } | 
| 1615     case FWL_VKEY_Return: { | 1625     case FWL_VKEY_Return: { | 
| 1616       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) { | 1626       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) { | 
| 1617         iError = m_EdtEngine.Insert(nCaret, L"\n", 1); | 1627         iError = m_EdtEngine.Insert(nCaret, L"\n", 1); | 
| 1618       } | 1628       } | 
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1690       } | 1700       } | 
| 1691       break; | 1701       break; | 
| 1692     } | 1702     } | 
| 1693     case FWL_SCBCODE::Pos: | 1703     case FWL_SCBCODE::Pos: | 
| 1694     case FWL_SCBCODE::TrackPos: | 1704     case FWL_SCBCODE::TrackPos: | 
| 1695     case FWL_SCBCODE::None: | 1705     case FWL_SCBCODE::None: | 
| 1696       break; | 1706       break; | 
| 1697     case FWL_SCBCODE::EndScroll: | 1707     case FWL_SCBCODE::EndScroll: | 
| 1698       return false; | 1708       return false; | 
| 1699   } | 1709   } | 
| 1700   if (iCurPos != fPos) { | 1710   if (iCurPos == fPos) | 
| 1701     pScrollBar->SetPos(fPos); | 1711     return true; | 
| 1702     pScrollBar->SetTrackPos(fPos); |  | 
| 1703     UpdateOffset(pScrollBar, fPos - iCurPos); |  | 
| 1704     UpdateCaret(); |  | 
| 1705 | 1712 | 
| 1706     CFX_RectF rect; | 1713   pScrollBar->SetPos(fPos); | 
| 1707     GetWidgetRect(rect); | 1714   pScrollBar->SetTrackPos(fPos); | 
| 1708     CFX_RectF rtInvalidate; | 1715   UpdateOffset(pScrollBar, fPos - iCurPos); | 
| 1709     rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); | 1716   UpdateCaret(); | 
| 1710     Repaint(&rtInvalidate); | 1717 | 
| 1711   } | 1718   CFX_RectF rect; | 
|  | 1719   GetWidgetRect(rect); | 
|  | 1720   CFX_RectF rtInvalidate; | 
|  | 1721   rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); | 
|  | 1722   Repaint(&rtInvalidate); | 
| 1712   return true; | 1723   return true; | 
| 1713 } | 1724 } | 
| OLD | NEW | 
|---|