8
8
#include " flutter/shell/platform/windows/window_binding_handler_delegate.h"
9
9
#include " flutter/shell/platform/windows/window_win32.h"
10
10
11
+ #define VERIFY_HR (operation ) \
12
+ if (FAILED(operation)) { \
13
+ FML_LOG (ERROR) << #operation << " failed" ; \
14
+ manager_ = nullptr ; \
15
+ updateManager_ = nullptr ; \
16
+ viewport_ = nullptr ; \
17
+ return -1 ; \
18
+ }
19
+
20
+ #define WARN_HR (operation ) \
21
+ if (FAILED(operation)) { \
22
+ FML_LOG (ERROR) << #operation << " failed" ; \
23
+ }
24
+
11
25
namespace flutter {
12
26
13
27
STDMETHODIMP DirectManipulationEventHandler::QueryInterface (REFIID iid,
@@ -31,20 +45,23 @@ HRESULT DirectManipulationEventHandler::OnViewportStatusChanged(
31
45
DIRECTMANIPULATION_STATUS previous) {
32
46
if (current == DIRECTMANIPULATION_RUNNING) {
33
47
if (!resetting_) {
48
+ // Not a false event
34
49
if (owner_->binding_handler_delegate ) {
35
50
owner_->binding_handler_delegate ->OnPointerPanZoomStart (
36
51
(int32_t ) reinterpret_cast <int64_t >(this ));
37
52
}
38
53
}
39
54
} else if (previous == DIRECTMANIPULATION_RUNNING) {
40
55
if (resetting_) {
56
+ // The resetting transition has concluded
41
57
resetting_ = false ;
42
58
} else {
43
59
if (owner_->binding_handler_delegate ) {
44
60
owner_->binding_handler_delegate ->OnPointerPanZoomEnd (
45
61
(int32_t ) reinterpret_cast <int64_t >(this ));
46
62
}
47
- // Need to reset the content transform
63
+ // Need to reset the content transform to its original position
64
+ // so that we are ready for the next gesture
48
65
// Use resetting_ flag to prevent sending reset also to the framework
49
66
resetting_ = true ;
50
67
RECT rect;
@@ -117,120 +134,38 @@ DirectManipulationOwner::DirectManipulationOwner(WindowWin32* window)
117
134
: window_(window) {}
118
135
119
136
int DirectManipulationOwner::Init (unsigned int width, unsigned int height) {
120
- HRESULT hr = CoCreateInstance (CLSID_DirectManipulationManager, nullptr ,
121
- CLSCTX_INPROC_SERVER,
122
- IID_IDirectManipulationManager, &manager_);
123
- if (FAILED (hr)) {
124
- FML_LOG (ERROR)
125
- << " CoCreateInstance(CLSID_DirectManipulationManager) failed" ;
126
- manager_ = nullptr ;
127
- return -1 ;
128
- }
129
-
130
- hr = manager_->GetUpdateManager (IID_IDirectManipulationUpdateManager,
131
- &updateManager_);
132
- if (FAILED (hr)) {
133
- FML_LOG (ERROR) << " GetUpdateManager failed" ;
134
- manager_ = nullptr ;
135
- updateManager_ = nullptr ;
136
- return -1 ;
137
- }
138
-
139
- hr = manager_->CreateViewport (nullptr , window_->GetWindowHandle (),
140
- IID_IDirectManipulationViewport, &viewport_);
141
- if (FAILED (hr)) {
142
- FML_LOG (ERROR) << " CreateViewport failed" ;
143
- manager_ = nullptr ;
144
- updateManager_ = nullptr ;
145
- viewport_ = nullptr ;
146
- return -1 ;
147
- }
148
-
137
+ VERIFY_HR (CoCreateInstance (CLSID_DirectManipulationManager, nullptr ,
138
+ CLSCTX_INPROC_SERVER,
139
+ IID_IDirectManipulationManager, &manager_));
140
+ VERIFY_HR (manager_->GetUpdateManager (IID_IDirectManipulationUpdateManager,
141
+ &updateManager_));
142
+ VERIFY_HR (manager_->CreateViewport (nullptr , window_->GetWindowHandle (),
143
+ IID_IDirectManipulationViewport,
144
+ &viewport_));
149
145
DIRECTMANIPULATION_CONFIGURATION configuration =
150
146
DIRECTMANIPULATION_CONFIGURATION_INTERACTION |
151
147
DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_X |
152
148
DIRECTMANIPULATION_CONFIGURATION_TRANSLATION_Y |
153
149
DIRECTMANIPULATION_CONFIGURATION_SCALING;
154
-
155
- hr = viewport_->ActivateConfiguration (configuration);
156
- if (FAILED (hr)) {
157
- FML_LOG (ERROR) << " ActivateConfiguration failed" ;
158
- manager_ = nullptr ;
159
- updateManager_ = nullptr ;
160
- viewport_ = nullptr ;
161
- return -1 ;
162
- }
163
-
164
- hr = viewport_->SetViewportOptions (
165
- DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE);
166
- if (FAILED (hr)) {
167
- FML_LOG (ERROR) << " SetViewportOptions failed" ;
168
- manager_ = nullptr ;
169
- updateManager_ = nullptr ;
170
- viewport_ = nullptr ;
171
- return -1 ;
172
- }
173
-
150
+ VERIFY_HR (viewport_->ActivateConfiguration (configuration));
151
+ VERIFY_HR (viewport_->SetViewportOptions (
152
+ DIRECTMANIPULATION_VIEWPORT_OPTIONS_MANUALUPDATE));
174
153
handler_ = fml::MakeRefCounted<DirectManipulationEventHandler>(window_, this );
175
-
176
- hr = viewport_->AddEventHandler (window_->GetWindowHandle (), handler_.get (),
177
- &viewportHandlerCookie_);
178
- if (FAILED (hr)) {
179
- FML_LOG (ERROR) << " AddEventHandler failed" ;
180
- manager_ = nullptr ;
181
- updateManager_ = nullptr ;
182
- viewport_ = nullptr ;
183
- return -1 ;
184
- }
185
-
154
+ VERIFY_HR (viewport_->AddEventHandler (
155
+ window_->GetWindowHandle (), handler_.get (), &viewportHandlerCookie_));
186
156
RECT rect = {0 , 0 , (LONG)width, (LONG)height};
187
- hr = viewport_->SetViewportRect (&rect);
188
- if (FAILED (hr)) {
189
- FML_LOG (ERROR) << " SetViewportRect failed" ;
190
- manager_ = nullptr ;
191
- updateManager_ = nullptr ;
192
- viewport_ = nullptr ;
193
- return -1 ;
194
- }
195
-
196
- hr = manager_->Activate (window_->GetWindowHandle ());
197
- if (FAILED (hr)) {
198
- FML_LOG (ERROR) << " manager_->Activate failed" ;
199
- manager_ = nullptr ;
200
- updateManager_ = nullptr ;
201
- viewport_ = nullptr ;
202
- return -1 ;
203
- }
204
-
205
- hr = viewport_->Enable ();
206
- if (FAILED (hr)) {
207
- FML_LOG (ERROR) << " viewport_->Enable failed" ;
208
- manager_ = nullptr ;
209
- updateManager_ = nullptr ;
210
- viewport_ = nullptr ;
211
- return -1 ;
212
- }
213
-
214
- hr = updateManager_->Update (nullptr );
215
- if (FAILED (hr)) {
216
- FML_LOG (ERROR) << " updateManager_->Update failed" ;
217
- manager_ = nullptr ;
218
- updateManager_ = nullptr ;
219
- viewport_ = nullptr ;
220
- return -1 ;
221
- }
222
-
157
+ VERIFY_HR (viewport_->SetViewportRect (&rect));
158
+ VERIFY_HR (manager_->Activate (window_->GetWindowHandle ()));
159
+ VERIFY_HR (viewport_->Enable ());
160
+ VERIFY_HR (updateManager_->Update (nullptr ));
223
161
return 0 ;
224
162
}
225
163
226
164
void DirectManipulationOwner::ResizeViewport (unsigned int width,
227
165
unsigned int height) {
228
166
if (viewport_) {
229
167
RECT rect = {0 , 0 , (LONG)width, (LONG)height};
230
- HRESULT hr = viewport_->SetViewportRect (&rect);
231
- if (FAILED (hr)) {
232
- FML_LOG (ERROR) << " SetViewportRect failed" ;
233
- }
168
+ WARN_HR (viewport_->SetViewportRect (&rect));
234
169
}
235
170
}
236
171
@@ -240,34 +175,15 @@ void DirectManipulationOwner::Destroy() {
240
175
handler_->owner_ = nullptr ;
241
176
}
242
177
243
- HRESULT hr;
244
178
if (viewport_) {
245
- hr = viewport_->Disable ();
246
- if (FAILED (hr)) {
247
- FML_LOG (ERROR) << " viewport_->Stop failed" ;
248
- }
249
-
250
- hr = viewport_->Disable ();
251
- if (FAILED (hr)) {
252
- FML_LOG (ERROR) << " viewport_->Disable failed" ;
253
- }
254
-
255
- hr = viewport_->RemoveEventHandler (viewportHandlerCookie_);
256
- if (FAILED (hr)) {
257
- FML_LOG (ERROR) << " viewport_->RemoveEventHandler failed" ;
258
- }
259
-
260
- hr = viewport_->Abandon ();
261
- if (FAILED (hr)) {
262
- FML_LOG (ERROR) << " viewport_->Abandon failed" ;
263
- }
179
+ WARN_HR (viewport_->Disable ());
180
+ WARN_HR (viewport_->Disable ());
181
+ WARN_HR (viewport_->RemoveEventHandler (viewportHandlerCookie_));
182
+ WARN_HR (viewport_->Abandon ());
264
183
}
265
184
266
185
if (window_ && manager_) {
267
- hr = manager_->Deactivate (window_->GetWindowHandle ());
268
- if (FAILED (hr)) {
269
- FML_LOG (ERROR) << " manager_->Deactivate failed" ;
270
- }
186
+ WARN_HR (manager_->Deactivate (window_->GetWindowHandle ()));
271
187
}
272
188
273
189
handler_ = nullptr ;
0 commit comments