xref: /aosp_15_r20/external/pdfium/core/fpdfdoc/cpdf_formcontrol.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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