xref: /aosp_15_r20/external/pdfium/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_pageview.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/graphics/cfgas_gegraphics.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdocview.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffpageview.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffwidget.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffwidgethandler.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_node.h"
18*3ac0a46fSAndroid Build Coastguard Worker 
19*3ac0a46fSAndroid Build Coastguard Worker #define CHECK_FWL_VKEY_ENUM____(name)                                   \
20*3ac0a46fSAndroid Build Coastguard Worker   static_assert(static_cast<int>(name) == static_cast<int>(XFA_##name), \
21*3ac0a46fSAndroid Build Coastguard Worker                 "FWL_VKEYCODE enum mismatch")
22*3ac0a46fSAndroid Build Coastguard Worker 
23*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Back);
24*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Tab);
25*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NewLine);
26*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Clear);
27*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Return);
28*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Shift);
29*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Control);
30*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Menu);
31*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Pause);
32*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Capital);
33*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Kana);
34*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Hangul);
35*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Junja);
36*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Final);
37*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Hanja);
38*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Kanji);
39*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Escape);
40*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Convert);
41*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NonConvert);
42*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Accept);
43*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_ModeChange);
44*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Space);
45*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Prior);
46*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Next);
47*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_End);
48*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Home);
49*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Left);
50*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Up);
51*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Right);
52*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Down);
53*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Select);
54*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Print);
55*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Execute);
56*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Snapshot);
57*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Insert);
58*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Delete);
59*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Help);
60*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_0);
61*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_1);
62*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_2);
63*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_3);
64*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_4);
65*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_5);
66*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_6);
67*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_7);
68*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_8);
69*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_9);
70*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_A);
71*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_B);
72*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_C);
73*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_D);
74*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_E);
75*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F);
76*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_G);
77*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_H);
78*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_I);
79*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_J);
80*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_K);
81*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_L);
82*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_M);
83*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_N);
84*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_O);
85*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_P);
86*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Q);
87*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_R);
88*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_S);
89*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_T);
90*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_U);
91*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_V);
92*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_W);
93*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_X);
94*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Y);
95*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Z);
96*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_LWin);
97*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Command);
98*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_RWin);
99*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Apps);
100*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Sleep);
101*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad0);
102*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad1);
103*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad2);
104*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad3);
105*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad4);
106*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad5);
107*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad6);
108*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad7);
109*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad8);
110*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NumPad9);
111*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Multiply);
112*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Add);
113*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Separator);
114*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Subtract);
115*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Decimal);
116*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Divide);
117*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F1);
118*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F2);
119*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F3);
120*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F4);
121*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F5);
122*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F6);
123*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F7);
124*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F8);
125*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F9);
126*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F10);
127*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F11);
128*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F12);
129*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F13);
130*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F14);
131*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F15);
132*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F16);
133*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F17);
134*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F18);
135*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F19);
136*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F20);
137*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F21);
138*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F22);
139*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F23);
140*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_F24);
141*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NunLock);
142*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Scroll);
143*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_LShift);
144*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_RShift);
145*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_LControl);
146*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_RControl);
147*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_LMenu);
148*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_RMenu);
149*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Back);
150*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Forward);
151*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Refresh);
152*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Stop);
153*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Search);
154*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Favorites);
155*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_BROWSER_Home);
156*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_VOLUME_Mute);
157*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_VOLUME_Down);
158*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_VOLUME_Up);
159*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_NEXT_Track);
160*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_PREV_Track);
161*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_Stop);
162*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_PLAY_Pause);
163*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_LAUNCH_Mail);
164*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_LAUNCH_MEDIA_Select);
165*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_LAUNCH_APP1);
166*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_MEDIA_LAUNCH_APP2);
167*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_1);
168*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_Plus);
169*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_Comma);
170*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_Minus);
171*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_Period);
172*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_2);
173*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_3);
174*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_4);
175*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_5);
176*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_6);
177*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_7);
178*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_8);
179*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_102);
180*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_ProcessKey);
181*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Packet);
182*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Attn);
183*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Crsel);
184*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Exsel);
185*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Ereof);
186*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Play);
187*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Zoom);
188*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_NoName);
189*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_PA1);
190*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_OEM_Clear);
191*3ac0a46fSAndroid Build Coastguard Worker CHECK_FWL_VKEY_ENUM____(FWL_VKEY_Unknown);
192*3ac0a46fSAndroid Build Coastguard Worker 
193*3ac0a46fSAndroid Build Coastguard Worker #undef CHECK_FWL_VKEY_ENUM____
194*3ac0a46fSAndroid Build Coastguard Worker 
195*3ac0a46fSAndroid Build Coastguard Worker namespace {
196*3ac0a46fSAndroid Build Coastguard Worker 
GetKeyFlags(Mask<FWL_EVENTFLAG> input)197*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_FWL_KeyFlag> GetKeyFlags(Mask<FWL_EVENTFLAG> input) {
198*3ac0a46fSAndroid Build Coastguard Worker   Mask<XFA_FWL_KeyFlag> results;
199*3ac0a46fSAndroid Build Coastguard Worker 
200*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_ControlKey)
201*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kCtrl;
202*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_LeftButtonDown)
203*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kLButton;
204*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_MiddleButtonDown)
205*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kMButton;
206*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_RightButtonDown)
207*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kRButton;
208*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_ShiftKey)
209*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kShift;
210*3ac0a46fSAndroid Build Coastguard Worker   if (input & FWL_EVENTFLAG_AltKey)
211*3ac0a46fSAndroid Build Coastguard Worker     results |= XFA_FWL_KeyFlag::kAlt;
212*3ac0a46fSAndroid Build Coastguard Worker 
213*3ac0a46fSAndroid Build Coastguard Worker   return results;
214*3ac0a46fSAndroid Build Coastguard Worker }
215*3ac0a46fSAndroid Build Coastguard Worker 
216*3ac0a46fSAndroid Build Coastguard Worker }  // namespace
217*3ac0a46fSAndroid Build Coastguard Worker 
CPDFXFA_Widget(CXFA_FFWidget * pXFAFFWidget,CPDFSDK_PageView * pPageView)218*3ac0a46fSAndroid Build Coastguard Worker CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pXFAFFWidget,
219*3ac0a46fSAndroid Build Coastguard Worker                                CPDFSDK_PageView* pPageView)
220*3ac0a46fSAndroid Build Coastguard Worker     : CPDFSDK_Annot(pPageView), m_pXFAFFWidget(pXFAFFWidget) {}
221*3ac0a46fSAndroid Build Coastguard Worker 
222*3ac0a46fSAndroid Build Coastguard Worker CPDFXFA_Widget::~CPDFXFA_Widget() = default;
223*3ac0a46fSAndroid Build Coastguard Worker 
AsXFAWidget()224*3ac0a46fSAndroid Build Coastguard Worker CPDFXFA_Widget* CPDFXFA_Widget::AsXFAWidget() {
225*3ac0a46fSAndroid Build Coastguard Worker   return this;
226*3ac0a46fSAndroid Build Coastguard Worker }
227*3ac0a46fSAndroid Build Coastguard Worker 
GetUnsafeInputHandlers()228*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot::UnsafeInputHandlers* CPDFXFA_Widget::GetUnsafeInputHandlers() {
229*3ac0a46fSAndroid Build Coastguard Worker   return this;
230*3ac0a46fSAndroid Build Coastguard Worker }
231*3ac0a46fSAndroid Build Coastguard Worker 
GetAnnotSubtype() const232*3ac0a46fSAndroid Build Coastguard Worker CPDF_Annot::Subtype CPDFXFA_Widget::GetAnnotSubtype() const {
233*3ac0a46fSAndroid Build Coastguard Worker   return CPDF_Annot::Subtype::XFAWIDGET;
234*3ac0a46fSAndroid Build Coastguard Worker }
235*3ac0a46fSAndroid Build Coastguard Worker 
GetRect() const236*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect CPDFXFA_Widget::GetRect() const {
237*3ac0a46fSAndroid Build Coastguard Worker   return GetXFAFFWidget()->GetLayoutItem()->GetAbsoluteRect().ToFloatRect();
238*3ac0a46fSAndroid Build Coastguard Worker }
239*3ac0a46fSAndroid Build Coastguard Worker 
OnDraw(CFX_RenderDevice * pDevice,const CFX_Matrix & mtUser2Device,bool bDrawAnnots)240*3ac0a46fSAndroid Build Coastguard Worker void CPDFXFA_Widget::OnDraw(CFX_RenderDevice* pDevice,
241*3ac0a46fSAndroid Build Coastguard Worker                             const CFX_Matrix& mtUser2Device,
242*3ac0a46fSAndroid Build Coastguard Worker                             bool bDrawAnnots) {
243*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
244*3ac0a46fSAndroid Build Coastguard Worker   if (!widget_handler)
245*3ac0a46fSAndroid Build Coastguard Worker     return;
246*3ac0a46fSAndroid Build Coastguard Worker 
247*3ac0a46fSAndroid Build Coastguard Worker   CFGAS_GEGraphics gs(pDevice);
248*3ac0a46fSAndroid Build Coastguard Worker   bool is_highlight = GetPageView()->GetFormFillEnv()->GetFocusAnnot() != this;
249*3ac0a46fSAndroid Build Coastguard Worker   widget_handler->RenderWidget(GetXFAFFWidget(), &gs, mtUser2Device,
250*3ac0a46fSAndroid Build Coastguard Worker                                is_highlight);
251*3ac0a46fSAndroid Build Coastguard Worker 
252*3ac0a46fSAndroid Build Coastguard Worker   // to do highlight and shadow
253*3ac0a46fSAndroid Build Coastguard Worker }
254*3ac0a46fSAndroid Build Coastguard Worker 
DoHitTest(const CFX_PointF & point)255*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::DoHitTest(const CFX_PointF& point) {
256*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
257*3ac0a46fSAndroid Build Coastguard Worker   if (!widget_handler)
258*3ac0a46fSAndroid Build Coastguard Worker     return false;
259*3ac0a46fSAndroid Build Coastguard Worker 
260*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler->HitTest(GetXFAFFWidget(), point) !=
261*3ac0a46fSAndroid Build Coastguard Worker          FWL_WidgetHit::Unknown;
262*3ac0a46fSAndroid Build Coastguard Worker }
263*3ac0a46fSAndroid Build Coastguard Worker 
OnChangedFocus()264*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnChangedFocus() {
265*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFDocView* doc_view = GetDocView();
266*3ac0a46fSAndroid Build Coastguard Worker   if (!doc_view)
267*3ac0a46fSAndroid Build Coastguard Worker     return false;
268*3ac0a46fSAndroid Build Coastguard Worker 
269*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidget* widget = GetXFAFFWidget();
270*3ac0a46fSAndroid Build Coastguard Worker   if (doc_view->SetFocus(widget))
271*3ac0a46fSAndroid Build Coastguard Worker     return false;
272*3ac0a46fSAndroid Build Coastguard Worker 
273*3ac0a46fSAndroid Build Coastguard Worker   return doc_view->GetFocusWidget() != widget;
274*3ac0a46fSAndroid Build Coastguard Worker }
275*3ac0a46fSAndroid Build Coastguard Worker 
GetViewBBox()276*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect CPDFXFA_Widget::GetViewBBox() {
277*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidget* widget = GetXFAFFWidget();
278*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Node* node = widget->GetNode();
279*3ac0a46fSAndroid Build Coastguard Worker   DCHECK(node->IsWidgetReady());
280*3ac0a46fSAndroid Build Coastguard Worker 
281*3ac0a46fSAndroid Build Coastguard Worker   CFX_RectF bbox =
282*3ac0a46fSAndroid Build Coastguard Worker       widget->GetBBox(node->GetFFWidgetType() == XFA_FFWidgetType::kSignature
283*3ac0a46fSAndroid Build Coastguard Worker                           ? CXFA_FFWidget::kDrawFocus
284*3ac0a46fSAndroid Build Coastguard Worker                           : CXFA_FFWidget::kDoNotDrawFocus);
285*3ac0a46fSAndroid Build Coastguard Worker 
286*3ac0a46fSAndroid Build Coastguard Worker   CFX_FloatRect result = bbox.ToFloatRect();
287*3ac0a46fSAndroid Build Coastguard Worker   result.Inflate(1.0f, 1.0f);
288*3ac0a46fSAndroid Build Coastguard Worker   return result;
289*3ac0a46fSAndroid Build Coastguard Worker }
290*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseEnter(Mask<FWL_EVENTFLAG> nFlags)291*3ac0a46fSAndroid Build Coastguard Worker void CPDFXFA_Widget::OnMouseEnter(Mask<FWL_EVENTFLAG> nFlags) {
292*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
293*3ac0a46fSAndroid Build Coastguard Worker   if (widget_handler)
294*3ac0a46fSAndroid Build Coastguard Worker     widget_handler->OnMouseEnter(GetXFAFFWidget());
295*3ac0a46fSAndroid Build Coastguard Worker }
296*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseExit(Mask<FWL_EVENTFLAG> nFlags)297*3ac0a46fSAndroid Build Coastguard Worker void CPDFXFA_Widget::OnMouseExit(Mask<FWL_EVENTFLAG> nFlags) {
298*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
299*3ac0a46fSAndroid Build Coastguard Worker   if (widget_handler)
300*3ac0a46fSAndroid Build Coastguard Worker     widget_handler->OnMouseExit(GetXFAFFWidget());
301*3ac0a46fSAndroid Build Coastguard Worker }
302*3ac0a46fSAndroid Build Coastguard Worker 
OnLButtonDown(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)303*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnLButtonDown(Mask<FWL_EVENTFLAG> nFlags,
304*3ac0a46fSAndroid Build Coastguard Worker                                    const CFX_PointF& point) {
305*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
306*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnLButtonDown(
307*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
308*3ac0a46fSAndroid Build Coastguard Worker }
309*3ac0a46fSAndroid Build Coastguard Worker 
OnLButtonUp(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)310*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnLButtonUp(Mask<FWL_EVENTFLAG> nFlags,
311*3ac0a46fSAndroid Build Coastguard Worker                                  const CFX_PointF& point) {
312*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
313*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnLButtonUp(
314*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
315*3ac0a46fSAndroid Build Coastguard Worker }
316*3ac0a46fSAndroid Build Coastguard Worker 
OnLButtonDblClk(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)317*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnLButtonDblClk(Mask<FWL_EVENTFLAG> nFlags,
318*3ac0a46fSAndroid Build Coastguard Worker                                      const CFX_PointF& point) {
319*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
320*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnLButtonDblClk(
321*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
322*3ac0a46fSAndroid Build Coastguard Worker }
323*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseMove(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)324*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnMouseMove(Mask<FWL_EVENTFLAG> nFlags,
325*3ac0a46fSAndroid Build Coastguard Worker                                  const CFX_PointF& point) {
326*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
327*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnMouseMove(
328*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
329*3ac0a46fSAndroid Build Coastguard Worker }
330*3ac0a46fSAndroid Build Coastguard Worker 
OnMouseWheel(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point,const CFX_Vector & delta)331*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnMouseWheel(Mask<FWL_EVENTFLAG> nFlags,
332*3ac0a46fSAndroid Build Coastguard Worker                                   const CFX_PointF& point,
333*3ac0a46fSAndroid Build Coastguard Worker                                   const CFX_Vector& delta) {
334*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
335*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler &&
336*3ac0a46fSAndroid Build Coastguard Worker          widget_handler->OnMouseWheel(GetXFAFFWidget(), GetKeyFlags(nFlags),
337*3ac0a46fSAndroid Build Coastguard Worker                                       point, delta);
338*3ac0a46fSAndroid Build Coastguard Worker }
339*3ac0a46fSAndroid Build Coastguard Worker 
OnRButtonDown(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)340*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnRButtonDown(Mask<FWL_EVENTFLAG> nFlags,
341*3ac0a46fSAndroid Build Coastguard Worker                                    const CFX_PointF& point) {
342*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
343*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnRButtonDown(
344*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
345*3ac0a46fSAndroid Build Coastguard Worker }
346*3ac0a46fSAndroid Build Coastguard Worker 
OnRButtonUp(Mask<FWL_EVENTFLAG> nFlags,const CFX_PointF & point)347*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnRButtonUp(Mask<FWL_EVENTFLAG> nFlags,
348*3ac0a46fSAndroid Build Coastguard Worker                                  const CFX_PointF& point) {
349*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
350*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->OnRButtonUp(
351*3ac0a46fSAndroid Build Coastguard Worker                                GetXFAFFWidget(), GetKeyFlags(nFlags), point);
352*3ac0a46fSAndroid Build Coastguard Worker }
353*3ac0a46fSAndroid Build Coastguard Worker 
OnChar(uint32_t nChar,Mask<FWL_EVENTFLAG> nFlags)354*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnChar(uint32_t nChar, Mask<FWL_EVENTFLAG> nFlags) {
355*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
356*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler &&
357*3ac0a46fSAndroid Build Coastguard Worker          widget_handler->OnChar(GetXFAFFWidget(), nChar, GetKeyFlags(nFlags));
358*3ac0a46fSAndroid Build Coastguard Worker }
359*3ac0a46fSAndroid Build Coastguard Worker 
OnKeyDown(FWL_VKEYCODE nKeyCode,Mask<FWL_EVENTFLAG> nFlags)360*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnKeyDown(FWL_VKEYCODE nKeyCode,
361*3ac0a46fSAndroid Build Coastguard Worker                                Mask<FWL_EVENTFLAG> nFlags) {
362*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
363*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler &&
364*3ac0a46fSAndroid Build Coastguard Worker          widget_handler->OnKeyDown(GetXFAFFWidget(),
365*3ac0a46fSAndroid Build Coastguard Worker                                    static_cast<XFA_FWL_VKEYCODE>(nKeyCode),
366*3ac0a46fSAndroid Build Coastguard Worker                                    GetKeyFlags(nFlags));
367*3ac0a46fSAndroid Build Coastguard Worker }
368*3ac0a46fSAndroid Build Coastguard Worker 
OnSetFocus(Mask<FWL_EVENTFLAG> nFlags)369*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnSetFocus(Mask<FWL_EVENTFLAG> nFlags) {
370*3ac0a46fSAndroid Build Coastguard Worker   return true;
371*3ac0a46fSAndroid Build Coastguard Worker }
372*3ac0a46fSAndroid Build Coastguard Worker 
OnKillFocus(Mask<FWL_EVENTFLAG> nFlags)373*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::OnKillFocus(Mask<FWL_EVENTFLAG> nFlags) {
374*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFDocView* doc_view = GetDocView();
375*3ac0a46fSAndroid Build Coastguard Worker   if (doc_view)
376*3ac0a46fSAndroid Build Coastguard Worker     doc_view->SetFocus(nullptr);
377*3ac0a46fSAndroid Build Coastguard Worker   return true;
378*3ac0a46fSAndroid Build Coastguard Worker }
379*3ac0a46fSAndroid Build Coastguard Worker 
CanUndo()380*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::CanUndo() {
381*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
382*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->CanUndo(GetXFAFFWidget());
383*3ac0a46fSAndroid Build Coastguard Worker }
384*3ac0a46fSAndroid Build Coastguard Worker 
CanRedo()385*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::CanRedo() {
386*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
387*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->CanRedo(GetXFAFFWidget());
388*3ac0a46fSAndroid Build Coastguard Worker }
389*3ac0a46fSAndroid Build Coastguard Worker 
Undo()390*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::Undo() {
391*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
392*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->Undo(GetXFAFFWidget());
393*3ac0a46fSAndroid Build Coastguard Worker }
394*3ac0a46fSAndroid Build Coastguard Worker 
Redo()395*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::Redo() {
396*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
397*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->Redo(GetXFAFFWidget());
398*3ac0a46fSAndroid Build Coastguard Worker }
399*3ac0a46fSAndroid Build Coastguard Worker 
GetText()400*3ac0a46fSAndroid Build Coastguard Worker WideString CPDFXFA_Widget::GetText() {
401*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
402*3ac0a46fSAndroid Build Coastguard Worker   if (!widget_handler)
403*3ac0a46fSAndroid Build Coastguard Worker     return WideString();
404*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler->GetText(GetXFAFFWidget());
405*3ac0a46fSAndroid Build Coastguard Worker }
406*3ac0a46fSAndroid Build Coastguard Worker 
GetSelectedText()407*3ac0a46fSAndroid Build Coastguard Worker WideString CPDFXFA_Widget::GetSelectedText() {
408*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
409*3ac0a46fSAndroid Build Coastguard Worker   if (!widget_handler)
410*3ac0a46fSAndroid Build Coastguard Worker     return WideString();
411*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler->GetSelectedText(GetXFAFFWidget());
412*3ac0a46fSAndroid Build Coastguard Worker }
413*3ac0a46fSAndroid Build Coastguard Worker 
ReplaceAndKeepSelection(const WideString & text)414*3ac0a46fSAndroid Build Coastguard Worker void CPDFXFA_Widget::ReplaceAndKeepSelection(const WideString& text) {
415*3ac0a46fSAndroid Build Coastguard Worker   // XFA does not seem to support IME input at all. Therefore we don't bother
416*3ac0a46fSAndroid Build Coastguard Worker   // to keep selection for IMEs.
417*3ac0a46fSAndroid Build Coastguard Worker   ReplaceSelection(text);
418*3ac0a46fSAndroid Build Coastguard Worker }
419*3ac0a46fSAndroid Build Coastguard Worker 
ReplaceSelection(const WideString & text)420*3ac0a46fSAndroid Build Coastguard Worker void CPDFXFA_Widget::ReplaceSelection(const WideString& text) {
421*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
422*3ac0a46fSAndroid Build Coastguard Worker   if (widget_handler)
423*3ac0a46fSAndroid Build Coastguard Worker     widget_handler->PasteText(GetXFAFFWidget(), text);
424*3ac0a46fSAndroid Build Coastguard Worker }
425*3ac0a46fSAndroid Build Coastguard Worker 
SelectAllText()426*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::SelectAllText() {
427*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFWidgetHandler* widget_handler = GetWidgetHandler();
428*3ac0a46fSAndroid Build Coastguard Worker   return widget_handler && widget_handler->SelectAllText(GetXFAFFWidget());
429*3ac0a46fSAndroid Build Coastguard Worker }
430*3ac0a46fSAndroid Build Coastguard Worker 
SetIndexSelected(int index,bool selected)431*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::SetIndexSelected(int index, bool selected) {
432*3ac0a46fSAndroid Build Coastguard Worker   return false;
433*3ac0a46fSAndroid Build Coastguard Worker }
434*3ac0a46fSAndroid Build Coastguard Worker 
IsIndexSelected(int index)435*3ac0a46fSAndroid Build Coastguard Worker bool CPDFXFA_Widget::IsIndexSelected(int index) {
436*3ac0a46fSAndroid Build Coastguard Worker   return false;
437*3ac0a46fSAndroid Build Coastguard Worker }
438*3ac0a46fSAndroid Build Coastguard Worker 
GetDocView()439*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDocView* CPDFXFA_Widget::GetDocView() {
440*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFPageView* page_view = GetXFAFFWidget()->GetPageView();
441*3ac0a46fSAndroid Build Coastguard Worker   return page_view ? page_view->GetDocView() : nullptr;
442*3ac0a46fSAndroid Build Coastguard Worker }
443*3ac0a46fSAndroid Build Coastguard Worker 
GetWidgetHandler()444*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidgetHandler* CPDFXFA_Widget::GetWidgetHandler() {
445*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFDocView* doc_view = GetDocView();
446*3ac0a46fSAndroid Build Coastguard Worker   return doc_view ? doc_view->GetWidgetHandler() : nullptr;
447*3ac0a46fSAndroid Build Coastguard Worker }
448