// Copyright 2017 The PDFium Authors // 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 "fpdfsdk/formfiller/cffl_textobject.h" #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfdoc/cpdf_bafontmap.h" #include "fpdfsdk/cpdfsdk_widget.h" CFFL_TextObject::CFFL_TextObject(CFFL_InteractiveFormFiller* pFormFiller, CPDFSDK_Widget* pWidget) : CFFL_FormField(pFormFiller, pWidget) {} CFFL_TextObject::~CFFL_TextObject() { // Destroy view classes before this object's members are destroyed since // the view classes have pointers to m_pFontMap that would be left dangling. DestroyWindows(); } CPWL_Wnd* CFFL_TextObject::ResetPWLWindow(const CPDFSDK_PageView* pPageView) { DestroyPWLWindow(pPageView); ObservedPtr pRet(CreateOrUpdatePWLWindow(pPageView)); m_pWidget->UpdateField(); // May invoke JS, invalidating |pRet|. return pRet.Get(); } CPWL_Wnd* CFFL_TextObject::RestorePWLWindow(const CPDFSDK_PageView* pPageView) { SavePWLWindowState(pPageView); DestroyPWLWindow(pPageView); RecreatePWLWindowFromSavedState(pPageView); ObservedPtr pRet(GetPWLWindow(pPageView)); m_pWidget->UpdateField(); // May invoke JS, invalidating |pRet|. return pRet.Get(); } CPDF_BAFontMap* CFFL_TextObject::GetOrCreateFontMap() { if (!m_pFontMap) { m_pFontMap = std::make_unique( m_pWidget->GetPDFPage()->GetDocument(), m_pWidget->GetPDFAnnot()->GetMutableAnnotDict(), "N"); } return m_pFontMap.get(); }