diff options
author | dsinclair <dsinclair@chromium.org> | 2016-12-08 10:06:32 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-12-08 10:06:33 -0800 |
commit | 447b1f3ffc7e0df233d15300bbf8a85ce2bc7278 (patch) | |
tree | adbd5fa0a3b63a666575636b4c5af9462e2f9c0b /xfa/fwl/cfwl_caret.cpp | |
parent | 64f4e25304dfd93651ac5c9d5379ed2fffbb993f (diff) | |
download | pdfium-447b1f3ffc7e0df233d15300bbf8a85ce2bc7278.tar.xz |
Move xfa/fwl/core to xfa/fwl.
The core/ directory in FWL no-longer provides any context. This Cl moves all
of the core/ files up to the fwl/ folder.
As well, the CFWL_EvtFoo files are renamed CFWL_EventFoo and the CFWL_MsgFoo
files are renamed CFWL_MessageFoo. The event and message preceed the type in
order to keep the files sorted together and to make it clear that they're all
related.
Review-Url: https://codereview.chromium.org/2559173002
Diffstat (limited to 'xfa/fwl/cfwl_caret.cpp')
-rw-r--r-- | xfa/fwl/cfwl_caret.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/xfa/fwl/cfwl_caret.cpp b/xfa/fwl/cfwl_caret.cpp new file mode 100644 index 0000000000..fdac8ec040 --- /dev/null +++ b/xfa/fwl/cfwl_caret.cpp @@ -0,0 +1,112 @@ +// 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/cfwl_caret.h" + +#include <utility> + +#include "third_party/base/ptr_util.h" +#include "xfa/fwl/cfwl_notedriver.h" +#include "xfa/fwl/cfwl_themebackground.h" +#include "xfa/fwl/cfwl_timerinfo.h" +#include "xfa/fwl/cfwl_widgetproperties.h" +#include "xfa/fwl/ifwl_themeprovider.h" + +namespace { + +const uint32_t kFrequency = 400; + +} // namespace + +CFWL_Caret::CFWL_Caret(const CFWL_App* app, + std::unique_ptr<CFWL_WidgetProperties> properties, + CFWL_Widget* pOuter) + : CFWL_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() { + if (m_pTimerInfo) + m_pTimerInfo->StopTimer(); + m_pTimerInfo = m_pTimer->StartTimer(kFrequency, true); + RemoveStates(FWL_WGTSTATE_Invisible); +} + +void CFWL_Caret::HideCaret() { + if (m_pTimerInfo) { + m_pTimerInfo->StopTimer(); + m_pTimerInfo = nullptr; + } + SetStates(FWL_WGTSTATE_Invisible); +} + +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.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); + if (!(pCaret->GetStates() & FWL_STATE_CAT_HightLight)) + pCaret->SetStates(FWL_STATE_CAT_HightLight); + else + pCaret->RemoveStates(FWL_STATE_CAT_HightLight); + + CFX_RectF rt = pCaret->GetWidgetRect(); + rt.Set(0, 0, rt.width + 1, rt.height); + pCaret->Repaint(&rt); +} |