OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include <map> | 7 #include <map> |
| 8 #include <vector> |
8 | 9 |
9 #include "fpdfsdk/pdfwindow/PWL_ScrollBar.h" | 10 #include "fpdfsdk/pdfwindow/PWL_ScrollBar.h" |
10 #include "fpdfsdk/pdfwindow/PWL_Utils.h" | 11 #include "fpdfsdk/pdfwindow/PWL_Utils.h" |
11 #include "fpdfsdk/pdfwindow/PWL_Wnd.h" | 12 #include "fpdfsdk/pdfwindow/PWL_Wnd.h" |
12 #include "third_party/base/ptr_util.h" | 13 #include "third_party/base/ptr_util.h" |
| 14 #include "third_party/base/stl_util.h" |
13 | 15 |
14 static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap() { | 16 static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap() { |
15 // Leak the object at shutdown. | 17 // Leak the object at shutdown. |
16 static auto timeMap = new std::map<int32_t, CPWL_Timer*>; | 18 static auto timeMap = new std::map<int32_t, CPWL_Timer*>; |
17 return *timeMap; | 19 return *timeMap; |
18 } | 20 } |
19 | 21 |
20 PWL_CREATEPARAM::PWL_CREATEPARAM() | 22 PWL_CREATEPARAM::PWL_CREATEPARAM() |
21 : rcRectWnd(0, 0, 0, 0), | 23 : rcRectWnd(0, 0, 0, 0), |
22 pSystemHandler(nullptr), | 24 pSystemHandler(nullptr), |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 | 106 |
105 public: | 107 public: |
106 explicit CPWL_MsgControl(CPWL_Wnd* pWnd) { | 108 explicit CPWL_MsgControl(CPWL_Wnd* pWnd) { |
107 m_pCreatedWnd = pWnd; | 109 m_pCreatedWnd = pWnd; |
108 Default(); | 110 Default(); |
109 } | 111 } |
110 | 112 |
111 ~CPWL_MsgControl() { Default(); } | 113 ~CPWL_MsgControl() { Default(); } |
112 | 114 |
113 void Default() { | 115 void Default() { |
114 m_aMousePath.RemoveAll(); | 116 m_aMousePath.clear(); |
115 m_aKeyboardPath.RemoveAll(); | 117 m_aKeyboardPath.clear(); |
116 m_pMainMouseWnd = nullptr; | 118 m_pMainMouseWnd = nullptr; |
117 m_pMainKeyboardWnd = nullptr; | 119 m_pMainKeyboardWnd = nullptr; |
118 } | 120 } |
119 | 121 |
120 bool IsWndCreated(const CPWL_Wnd* pWnd) const { | 122 bool IsWndCreated(const CPWL_Wnd* pWnd) const { |
121 return m_pCreatedWnd == pWnd; | 123 return m_pCreatedWnd == pWnd; |
122 } | 124 } |
123 | 125 |
124 bool IsMainCaptureMouse(const CPWL_Wnd* pWnd) const { | 126 bool IsMainCaptureMouse(const CPWL_Wnd* pWnd) const { |
125 return pWnd == m_pMainMouseWnd; | 127 return pWnd == m_pMainMouseWnd; |
126 } | 128 } |
127 | 129 |
128 bool IsWndCaptureMouse(const CPWL_Wnd* pWnd) const { | 130 bool IsWndCaptureMouse(const CPWL_Wnd* pWnd) const { |
129 if (pWnd) { | 131 return pWnd && pdfium::ContainsValue(m_aMousePath, pWnd); |
130 for (int32_t i = 0, sz = m_aMousePath.GetSize(); i < sz; i++) { | |
131 if (m_aMousePath.GetAt(i) == pWnd) | |
132 return true; | |
133 } | |
134 } | |
135 | |
136 return false; | |
137 } | 132 } |
138 | 133 |
139 bool IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const { | 134 bool IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const { |
140 return pWnd == m_pMainKeyboardWnd; | 135 return pWnd == m_pMainKeyboardWnd; |
141 } | 136 } |
142 | 137 |
143 bool IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const { | 138 bool IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const { |
144 if (pWnd) { | 139 return pWnd && pdfium::ContainsValue(m_aKeyboardPath, pWnd); |
145 for (int32_t i = 0, sz = m_aKeyboardPath.GetSize(); i < sz; i++) { | |
146 if (m_aKeyboardPath.GetAt(i) == pWnd) | |
147 return true; | |
148 } | |
149 } | |
150 | |
151 return false; | |
152 } | 140 } |
153 | 141 |
154 void SetFocus(CPWL_Wnd* pWnd) { | 142 void SetFocus(CPWL_Wnd* pWnd) { |
155 m_aKeyboardPath.RemoveAll(); | 143 m_aKeyboardPath.clear(); |
156 | |
157 if (pWnd) { | 144 if (pWnd) { |
158 m_pMainKeyboardWnd = pWnd; | 145 m_pMainKeyboardWnd = pWnd; |
159 | |
160 CPWL_Wnd* pParent = pWnd; | 146 CPWL_Wnd* pParent = pWnd; |
161 while (pParent) { | 147 while (pParent) { |
162 m_aKeyboardPath.Add(pParent); | 148 m_aKeyboardPath.push_back(pParent); |
163 pParent = pParent->GetParentWindow(); | 149 pParent = pParent->GetParentWindow(); |
164 } | 150 } |
165 | |
166 pWnd->OnSetFocus(); | 151 pWnd->OnSetFocus(); |
167 } | 152 } |
168 } | 153 } |
169 | 154 |
170 void KillFocus() { | 155 void KillFocus() { |
171 if (m_aKeyboardPath.GetSize() > 0) | 156 if (!m_aKeyboardPath.empty()) |
172 if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0)) | 157 if (CPWL_Wnd* pWnd = m_aKeyboardPath[0]) |
173 pWnd->OnKillFocus(); | 158 pWnd->OnKillFocus(); |
174 | 159 |
175 m_pMainKeyboardWnd = nullptr; | 160 m_pMainKeyboardWnd = nullptr; |
176 m_aKeyboardPath.RemoveAll(); | 161 m_aKeyboardPath.clear(); |
177 } | 162 } |
178 | 163 |
179 void SetCapture(CPWL_Wnd* pWnd) { | 164 void SetCapture(CPWL_Wnd* pWnd) { |
180 m_aMousePath.RemoveAll(); | 165 m_aMousePath.clear(); |
181 | |
182 if (pWnd) { | 166 if (pWnd) { |
183 m_pMainMouseWnd = pWnd; | 167 m_pMainMouseWnd = pWnd; |
184 | |
185 CPWL_Wnd* pParent = pWnd; | 168 CPWL_Wnd* pParent = pWnd; |
186 while (pParent) { | 169 while (pParent) { |
187 m_aMousePath.Add(pParent); | 170 m_aMousePath.push_back(pParent); |
188 pParent = pParent->GetParentWindow(); | 171 pParent = pParent->GetParentWindow(); |
189 } | 172 } |
190 } | 173 } |
191 } | 174 } |
192 | 175 |
193 void ReleaseCapture() { | 176 void ReleaseCapture() { |
194 m_pMainMouseWnd = nullptr; | 177 m_pMainMouseWnd = nullptr; |
195 m_aMousePath.RemoveAll(); | 178 m_aMousePath.clear(); |
196 } | 179 } |
197 | 180 |
198 private: | 181 private: |
199 CFX_ArrayTemplate<CPWL_Wnd*> m_aMousePath; | 182 std::vector<CPWL_Wnd*> m_aMousePath; |
200 CFX_ArrayTemplate<CPWL_Wnd*> m_aKeyboardPath; | 183 std::vector<CPWL_Wnd*> m_aKeyboardPath; |
201 CPWL_Wnd* m_pCreatedWnd; | 184 CPWL_Wnd* m_pCreatedWnd; |
202 CPWL_Wnd* m_pMainMouseWnd; | 185 CPWL_Wnd* m_pMainMouseWnd; |
203 CPWL_Wnd* m_pMainKeyboardWnd; | 186 CPWL_Wnd* m_pMainKeyboardWnd; |
204 }; | 187 }; |
205 | 188 |
206 CPWL_Wnd::CPWL_Wnd() | 189 CPWL_Wnd::CPWL_Wnd() |
207 : m_pVScrollBar(nullptr), | 190 : m_pVScrollBar(nullptr), |
208 m_rcWindow(), | 191 m_rcWindow(), |
209 m_rcClip(), | 192 m_rcClip(), |
210 m_bCreated(false), | 193 m_bCreated(false), |
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1005 return false; | 988 return false; |
1006 } | 989 } |
1007 | 990 |
1008 bool CPWL_Wnd::IsALTpressed(uint32_t nFlag) const { | 991 bool CPWL_Wnd::IsALTpressed(uint32_t nFlag) const { |
1009 if (CFX_SystemHandler* pSystemHandler = GetSystemHandler()) { | 992 if (CFX_SystemHandler* pSystemHandler = GetSystemHandler()) { |
1010 return pSystemHandler->IsALTKeyDown(nFlag); | 993 return pSystemHandler->IsALTKeyDown(nFlag); |
1011 } | 994 } |
1012 | 995 |
1013 return false; | 996 return false; |
1014 } | 997 } |
OLD | NEW |