diff options
author | dsinclair <dsinclair@chromium.org> | 2016-11-23 16:03:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-11-23 16:03:10 -0800 |
commit | 0ce11eef157b791c661d7e82e1c5641605b9f03d (patch) | |
tree | e5166163947824e52c417b4a65c2c7d965c00dad /xfa/fwl/core/cfwl_caret.cpp | |
parent | 2430b30088c3e3396ccf26a10d360d0553404bb0 (diff) | |
download | pdfium-0ce11eef157b791c661d7e82e1c5641605b9f03d.tar.xz |
Rename IFWL classes which do not have CFWL equivalents
This CL moves the IFWL classes that do not have CFWL class buddies to have the
CFWL name. This CL leaves the tree in a weird state of having CFWL be two
hierarchies, one of which is intertwined with the IFWL hierarchy. This should
be commited just before the CL to move the rest of IFWL to CFWL.
Review-Url: https://codereview.chromium.org/2525083002
Diffstat (limited to 'xfa/fwl/core/cfwl_caret.cpp')
-rw-r--r-- | xfa/fwl/core/cfwl_caret.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/xfa/fwl/core/cfwl_caret.cpp b/xfa/fwl/core/cfwl_caret.cpp new file mode 100644 index 0000000000..97cf1e9682 --- /dev/null +++ b/xfa/fwl/core/cfwl_caret.cpp @@ -0,0 +1,108 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "xfa/fwl/core/cfwl_caret.h" + +#include <utility> + +#include "third_party/base/ptr_util.h" +#include "xfa/fwl/core/cfwl_notedriver.h" +#include "xfa/fwl/core/cfwl_themebackground.h" +#include "xfa/fwl/core/cfwl_timerinfo.h" +#include "xfa/fwl/core/cfwl_widgetproperties.h" +#include "xfa/fwl/core/ifwl_themeprovider.h" + +namespace { + +const uint32_t kFrequency = 400; + +} // namespace + +CFWL_Caret::CFWL_Caret(const CFWL_App* app, + std::unique_ptr<CFWL_WidgetProperties> properties, + IFWL_Widget* pOuter) + : IFWL_Widget(app, std::move(properties), pOuter), + m_pTimer(new CFWL_Caret::Timer(this)), + m_pTimerInfo(nullptr) { + SetStates(FWL_STATE_CAT_HightLight); +} + +CFWL_Caret::~CFWL_Caret() { + if (m_pTimerInfo) { + m_pTimerInfo->StopTimer(); + m_pTimerInfo = nullptr; + } +} + +FWL_Type CFWL_Caret::GetClassID() const { + return FWL_Type::Caret; +} + +void CFWL_Caret::Update() {} + +void CFWL_Caret::DrawWidget(CFX_Graphics* pGraphics, + const CFX_Matrix* pMatrix) { + if (!pGraphics) + return; + if (!m_pProperties->m_pThemeProvider) + m_pProperties->m_pThemeProvider = GetAvailableTheme(); + if (!m_pProperties->m_pThemeProvider) + return; + + DrawCaretBK(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); +} + +void CFWL_Caret::ShowCaret(bool bFlag) { + if (m_pTimerInfo) { + m_pTimerInfo->StopTimer(); + m_pTimerInfo = nullptr; + } + if (bFlag) + m_pTimerInfo = m_pTimer->StartTimer(kFrequency, true); + + SetStates(FWL_WGTSTATE_Invisible, !bFlag); +} + +void CFWL_Caret::DrawCaretBK(CFX_Graphics* pGraphics, + IFWL_ThemeProvider* pTheme, + const CFX_Matrix* pMatrix) { + if (!(m_pProperties->m_dwStates & FWL_STATE_CAT_HightLight)) + return; + + CFX_RectF rect; + GetWidgetRect(rect); + rect.Set(0, 0, rect.width, rect.height); + + CFWL_ThemeBackground param; + param.m_pWidget = this; + param.m_pGraphics = pGraphics; + param.m_rtPart = rect; + param.m_iPart = CFWL_Part::Background; + param.m_dwStates = CFWL_PartState_HightLight; + if (pMatrix) + param.m_matrix.Concat(*pMatrix); + pTheme->DrawBackground(¶m); +} + +void CFWL_Caret::OnProcessMessage(CFWL_Message* pMessage) {} + +void CFWL_Caret::OnDrawWidget(CFX_Graphics* pGraphics, + const CFX_Matrix* pMatrix) { + DrawWidget(pGraphics, pMatrix); +} + +CFWL_Caret::Timer::Timer(CFWL_Caret* pCaret) : CFWL_Timer(pCaret) {} + +void CFWL_Caret::Timer::Run(CFWL_TimerInfo* pTimerInfo) { + CFWL_Caret* pCaret = static_cast<CFWL_Caret*>(m_pWidget); + pCaret->SetStates(FWL_STATE_CAT_HightLight, + !(pCaret->GetStates() & FWL_STATE_CAT_HightLight)); + + CFX_RectF rt; + pCaret->GetWidgetRect(rt); + rt.Set(0, 0, rt.width + 1, rt.height); + pCaret->Repaint(&rt); +} |