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