1 // Copyright 2016 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FPDFDOC_CPDF_FORMCONTROL_H_ 8 #define CORE_FPDFDOC_CPDF_FORMCONTROL_H_ 9 10 #include <optional> 11 12 #include "constants/appearance.h" 13 #include "core/fpdfdoc/cpdf_aaction.h" 14 #include "core/fpdfdoc/cpdf_action.h" 15 #include "core/fpdfdoc/cpdf_annot.h" 16 #include "core/fpdfdoc/cpdf_annotlist.h" 17 #include "core/fpdfdoc/cpdf_apsettings.h" 18 #include "core/fpdfdoc/cpdf_defaultappearance.h" 19 #include "core/fpdfdoc/cpdf_formfield.h" 20 #include "core/fpdfdoc/cpdf_iconfit.h" 21 #include "core/fxcrt/fx_coordinates.h" 22 #include "core/fxcrt/fx_string.h" 23 #include "core/fxcrt/retain_ptr.h" 24 #include "core/fxcrt/unowned_ptr.h" 25 #include "core/fxge/cfx_color.h" 26 #include "core/fxge/dib/fx_dib.h" 27 28 class CFX_RenderDevice; 29 class CPDF_Dictionary; 30 class CPDF_Font; 31 class CPDF_FormField; 32 class CPDF_InteractiveForm; 33 class CPDF_Stream; 34 35 class CPDF_FormControl { 36 public: 37 enum HighlightingMode { kNone = 0, kInvert, kOutline, kPush, kToggle }; 38 39 CPDF_FormControl(CPDF_FormField* pField, 40 RetainPtr<CPDF_Dictionary> pWidgetDict, 41 CPDF_InteractiveForm* pForm); 42 ~CPDF_FormControl(); 43 GetType()44 CPDF_FormField::Type GetType() const { return m_pField->GetType(); } GetField()45 CPDF_FormField* GetField() const { return m_pField; } GetWidgetDict()46 RetainPtr<const CPDF_Dictionary> GetWidgetDict() const { 47 return m_pWidgetDict; 48 } 49 CFX_FloatRect GetRect() const; 50 51 ByteString GetCheckedAPState() const; 52 WideString GetExportValue() const; 53 54 bool IsChecked() const; 55 bool IsDefaultChecked() const; 56 57 HighlightingMode GetHighlightingMode() const; 58 bool HasMKEntry(const ByteString& csEntry) const; 59 int GetRotation() const; 60 61 CFX_Color::TypeAndARGB GetColorARGB(const ByteString& csEntry); 62 float GetOriginalColorComponent(int index, const ByteString& csEntry); 63 GetOriginalBorderColor()64 CFX_Color GetOriginalBorderColor() { 65 return GetOriginalColor(pdfium::appearance::kBC); 66 } 67 GetOriginalBackgroundColor()68 CFX_Color GetOriginalBackgroundColor() { 69 return GetOriginalColor(pdfium::appearance::kBG); 70 } 71 GetNormalCaption()72 WideString GetNormalCaption() const { 73 return GetCaption(pdfium::appearance::kCA); 74 } GetRolloverCaption()75 WideString GetRolloverCaption() const { 76 return GetCaption(pdfium::appearance::kRC); 77 } GetDownCaption()78 WideString GetDownCaption() const { 79 return GetCaption(pdfium::appearance::kAC); 80 } 81 GetNormalIcon()82 RetainPtr<CPDF_Stream> GetNormalIcon() { 83 return GetIcon(pdfium::appearance::kI); 84 } GetRolloverIcon()85 RetainPtr<CPDF_Stream> GetRolloverIcon() { 86 return GetIcon(pdfium::appearance::kRI); 87 } GetDownIcon()88 RetainPtr<CPDF_Stream> GetDownIcon() { 89 return GetIcon(pdfium::appearance::kIX); 90 } 91 CPDF_IconFit GetIconFit() const; 92 93 int GetTextPosition() const; 94 CPDF_DefaultAppearance GetDefaultAppearance() const; 95 96 std::optional<WideString> GetDefaultControlFontName() const; 97 int GetControlAlignment() const; 98 99 ByteString GetOnStateName() const; 100 void CheckControl(bool bChecked); 101 102 private: 103 RetainPtr<CPDF_Font> GetDefaultControlFont() const; 104 CFX_Color GetOriginalColor(const ByteString& csEntry); 105 106 WideString GetCaption(const ByteString& csEntry) const; 107 RetainPtr<CPDF_Stream> GetIcon(const ByteString& csEntry); 108 CPDF_ApSettings GetMK() const; 109 110 UnownedPtr<CPDF_FormField> const m_pField; 111 RetainPtr<CPDF_Dictionary> const m_pWidgetDict; 112 UnownedPtr<const CPDF_InteractiveForm> const m_pForm; 113 }; 114 115 #endif // CORE_FPDFDOC_CPDF_FORMCONTROL_H_ 116