Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
direct_manipulation_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9#include "gtest/gtest.h"
10
11using testing::_;
12
13namespace flutter {
14namespace testing {
15
16class MockIDirectManipulationViewport : public IDirectManipulationViewport {
17 public:
19
20 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG());
21 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG());
22 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
23 QueryInterface,
24 HRESULT(REFIID, void**));
25 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Abandon, HRESULT());
26 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
27 ActivateConfiguration,
28 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
29 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
30 AddConfiguration,
31 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
32 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
33 AddContent,
34 HRESULT(IDirectManipulationContent*));
35 MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE,
36 AddEventHandler,
37 HRESULT(HWND,
38 IDirectManipulationViewportEventHandler*,
39 DWORD*));
40 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Disable, HRESULT());
41 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Enable, HRESULT());
42 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
43 GetPrimaryContent,
44 HRESULT(REFIID, void**));
45 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
46 GetStatus,
47 HRESULT(DIRECTMANIPULATION_STATUS*));
48 MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE,
49 GetTag,
50 HRESULT(REFIID, void**, UINT32*));
51 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
52 GetViewportRect,
53 HRESULT(RECT*));
54 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, ReleaseAllContacts, HRESULT());
55 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
56 ReleaseContact,
57 HRESULT(UINT32));
58 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
59 RemoveConfiguration,
60 HRESULT(DIRECTMANIPULATION_CONFIGURATION));
61 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
62 RemoveContent,
63 HRESULT(IDirectManipulationContent*));
64 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
65 RemoveEventHandler,
66 HRESULT(DWORD));
67 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
68 SetChaining,
69 HRESULT(DIRECTMANIPULATION_MOTION_TYPES));
70 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetContact, HRESULT(UINT32));
71 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
72 SetInputMode,
73 HRESULT(DIRECTMANIPULATION_INPUT_MODE));
74 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
75 SetManualGesture,
76 HRESULT(DIRECTMANIPULATION_GESTURE_CONFIGURATION));
77 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
78 SetTag,
79 HRESULT(IUnknown*, UINT32));
80 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
81 SetUpdateMode,
82 HRESULT(DIRECTMANIPULATION_INPUT_MODE));
83 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
84 SetViewportOptions,
85 HRESULT(DIRECTMANIPULATION_VIEWPORT_OPTIONS));
86 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
87 SetViewportRect,
88 HRESULT(const RECT*));
89 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
90 SetViewportTransform,
91 HRESULT(const float*, DWORD));
92 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Stop, HRESULT());
93 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
94 SyncDisplayTransform,
95 HRESULT(const float*, DWORD));
97 STDMETHODCALLTYPE,
98 ZoomToRect,
99 HRESULT(const float, const float, const float, const float, BOOL));
100
101 private:
103};
104
105class MockIDirectManipulationContent : public IDirectManipulationContent {
106 public:
108
109 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG());
110 MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG());
111 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
112 QueryInterface,
113 HRESULT(REFIID, void**));
114 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetContentRect, HRESULT(RECT*));
115 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
116 GetContentTransform,
117 HRESULT(float*, DWORD));
118 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
119 GetOutputTransform,
120 HRESULT(float*, DWORD));
121 MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE,
122 GetTag,
123 HRESULT(REFIID, void**, UINT32*));
124 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
125 GetViewport,
126 HRESULT(REFIID, void**));
127 MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE,
128 SetContentRect,
129 HRESULT(const RECT*));
130 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
131 SetTag,
132 HRESULT(IUnknown*, UINT32));
133 MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE,
134 SyncContentTransform,
135 HRESULT(const float*, DWORD));
136
137 private:
139};
140
141TEST(DirectManipulationTest, TestGesture) {
145 const float scale = 1.5;
146 const float pan_x = 32.0;
147 const float pan_y = 16.0;
148 const int DISPLAY_WIDTH = 800;
149 const int DISPLAY_HEIGHT = 600;
150 auto owner = std::make_unique<DirectManipulationOwner>(nullptr);
151 owner->SetBindingHandlerDelegate(&delegate);
152 auto handler =
153 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
154 int32_t device_id = (int32_t)reinterpret_cast<int64_t>(handler.get());
155 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
156 .WillOnce([&content](REFIID in, void** out) {
157 *out = &content;
158 return S_OK;
159 })
160 .RetiresOnSaturation();
161 EXPECT_CALL(content, GetContentTransform(_, 6))
162 .WillOnce([scale](float* transform, DWORD size) {
163 transform[0] = 1.0f;
164 transform[4] = 0.0;
165 transform[5] = 0.0;
166 return S_OK;
167 })
168 .RetiresOnSaturation();
169 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
170 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
171 DIRECTMANIPULATION_RUNNING,
172 DIRECTMANIPULATION_READY);
173 EXPECT_CALL(content, GetContentTransform(_, 6))
174 .WillOnce([scale, pan_x, pan_y](float* transform, DWORD size) {
175 transform[0] = scale;
176 transform[4] = pan_x;
177 transform[5] = pan_y;
178 return S_OK;
179 });
180 EXPECT_CALL(delegate,
181 OnPointerPanZoomUpdate(device_id, pan_x, pan_y, scale, 0));
182 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
183 (IDirectManipulationContent*)&content);
184 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
185 EXPECT_CALL(viewport, GetViewportRect(_))
186 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
187 rect->left = 0;
188 rect->top = 0;
189 rect->right = DISPLAY_WIDTH;
190 rect->bottom = DISPLAY_HEIGHT;
191 return S_OK;
192 });
193 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, false))
194 .WillOnce(::testing::Return(S_OK));
195 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
196 DIRECTMANIPULATION_INERTIA,
197 DIRECTMANIPULATION_RUNNING);
198 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
199 DIRECTMANIPULATION_READY,
200 DIRECTMANIPULATION_INERTIA);
201}
202
203// Verify that scale mantissa rounding works as expected
204TEST(DirectManipulationTest, TestRounding) {
208 const float scale = 1.5;
209 const int DISPLAY_WIDTH = 800;
210 const int DISPLAY_HEIGHT = 600;
211 auto owner = std::make_unique<DirectManipulationOwner>(nullptr);
212 owner->SetBindingHandlerDelegate(&delegate);
213 auto handler =
214 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
215 int32_t device_id = (int32_t)reinterpret_cast<int64_t>(handler.get());
216 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
217 .WillOnce([&content](REFIID in, void** out) {
218 *out = &content;
219 return S_OK;
220 })
221 .RetiresOnSaturation();
222 EXPECT_CALL(content, GetContentTransform(_, 6))
223 .WillOnce([scale](float* transform, DWORD size) {
224 transform[0] = 1.0f;
225 transform[4] = 0.0;
226 transform[5] = 0.0;
227 return S_OK;
228 })
229 .RetiresOnSaturation();
230 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
231 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
232 DIRECTMANIPULATION_RUNNING,
233 DIRECTMANIPULATION_READY);
234 EXPECT_CALL(content, GetContentTransform(_, 6))
235 .WillOnce([scale](float* transform, DWORD size) {
236 transform[0] = 1.5000001f;
237 transform[4] = 4.0;
238 transform[5] = 0.0;
239 return S_OK;
240 })
241 .RetiresOnSaturation();
242 EXPECT_CALL(delegate,
243 OnPointerPanZoomUpdate(device_id, 4.0, 0, 1.5000001f, 0))
244 .Times(0);
245 EXPECT_CALL(delegate, OnPointerPanZoomUpdate(device_id, 4.0, 0, 1.5f, 0))
246 .Times(1)
247 .RetiresOnSaturation();
248 EXPECT_CALL(content, GetContentTransform(_, 6))
249 .WillOnce([scale](float* transform, DWORD size) {
250 transform[0] = 1.50000065f;
251 transform[4] = 2.0;
252 transform[5] = 0.0;
253 return S_OK;
254 })
255 .RetiresOnSaturation();
256 EXPECT_CALL(delegate,
257 OnPointerPanZoomUpdate(device_id, 2.0, 0, 1.50000065f, 0))
258 .Times(0);
259 EXPECT_CALL(delegate,
260 OnPointerPanZoomUpdate(device_id, 2.0, 0, 1.50000047f, 0))
261 .Times(1)
262 .RetiresOnSaturation();
263 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
264 EXPECT_CALL(viewport, GetViewportRect(_))
265 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
266 rect->left = 0;
267 rect->top = 0;
268 rect->right = DISPLAY_WIDTH;
269 rect->bottom = DISPLAY_HEIGHT;
270 return S_OK;
271 });
272 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, false))
273 .WillOnce(::testing::Return(S_OK));
274 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
275 (IDirectManipulationContent*)&content);
276 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
277 (IDirectManipulationContent*)&content);
278 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
279 DIRECTMANIPULATION_INERTIA,
280 DIRECTMANIPULATION_RUNNING);
281 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
282 DIRECTMANIPULATION_READY,
283 DIRECTMANIPULATION_INERTIA);
284}
285
286TEST(DirectManipulationTest, TestInertiaCancelSentForUserCancel) {
290 const int DISPLAY_WIDTH = 800;
291 const int DISPLAY_HEIGHT = 600;
292 auto owner = std::make_unique<DirectManipulationOwner>(nullptr);
293 owner->SetBindingHandlerDelegate(&delegate);
294 auto handler =
295 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
296 int32_t device_id = (int32_t)reinterpret_cast<int64_t>(handler.get());
297 // No need to mock the actual gesture, just start at the end.
298 EXPECT_CALL(viewport, GetViewportRect(_))
299 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
300 rect->left = 0;
301 rect->top = 0;
302 rect->right = DISPLAY_WIDTH;
303 rect->bottom = DISPLAY_HEIGHT;
304 return S_OK;
305 });
306 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, false))
307 .WillOnce(::testing::Return(S_OK));
308 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
309 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
310 DIRECTMANIPULATION_INERTIA,
311 DIRECTMANIPULATION_RUNNING);
312 // Have pan_y change by 10 between inertia updates.
313 EXPECT_CALL(content, GetContentTransform(_, 6))
314 .WillOnce([](float* transform, DWORD size) {
315 transform[0] = 1;
316 transform[4] = 0;
317 transform[5] = 100;
318 return S_OK;
319 });
320 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
321 (IDirectManipulationContent*)&content);
322 EXPECT_CALL(content, GetContentTransform(_, 6))
323 .WillOnce([](float* transform, DWORD size) {
324 transform[0] = 1;
325 transform[4] = 0;
326 transform[5] = 110;
327 return S_OK;
328 });
329 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
330 (IDirectManipulationContent*)&content);
331 // This looks like an interruption in the middle of synthetic inertia because
332 // of user input.
333 EXPECT_CALL(delegate, OnScrollInertiaCancel(device_id));
334 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
335 DIRECTMANIPULATION_READY,
336 DIRECTMANIPULATION_INERTIA);
337}
338
339TEST(DirectManipulationTest, TestInertiaCamcelNotSentAtInertiaEnd) {
343 const int DISPLAY_WIDTH = 800;
344 const int DISPLAY_HEIGHT = 600;
345 auto owner = std::make_unique<DirectManipulationOwner>(nullptr);
346 owner->SetBindingHandlerDelegate(&delegate);
347 auto handler =
348 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
349 int32_t device_id = (int32_t)reinterpret_cast<int64_t>(handler.get());
350 // No need to mock the actual gesture, just start at the end.
351 EXPECT_CALL(viewport, GetViewportRect(_))
352 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
353 rect->left = 0;
354 rect->top = 0;
355 rect->right = DISPLAY_WIDTH;
356 rect->bottom = DISPLAY_HEIGHT;
357 return S_OK;
358 });
359 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, false))
360 .WillOnce(::testing::Return(S_OK));
361 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
362 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
363 DIRECTMANIPULATION_INERTIA,
364 DIRECTMANIPULATION_RUNNING);
365 // Have no change in pan between events.
366 EXPECT_CALL(content, GetContentTransform(_, 6))
367 .WillOnce([](float* transform, DWORD size) {
368 transform[0] = 1;
369 transform[4] = 0;
370 transform[5] = 140;
371 return S_OK;
372 });
373 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
374 (IDirectManipulationContent*)&content);
375 EXPECT_CALL(content, GetContentTransform(_, 6))
376 .WillOnce([](float* transform, DWORD size) {
377 transform[0] = 1;
378 transform[4] = 0;
379 transform[5] = 140;
380 return S_OK;
381 });
382 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
383 (IDirectManipulationContent*)&content);
384 // OnScrollInertiaCancel should not be called.
385 EXPECT_CALL(delegate, OnScrollInertiaCancel(device_id)).Times(0);
386 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
387 DIRECTMANIPULATION_READY,
388 DIRECTMANIPULATION_INERTIA);
389}
390
391// Have some initial values in the matrix, only the differences should be
392// reported.
393TEST(DirectManipulationTest, TestGestureWithInitialData) {
397 const float scale = 1.5;
398 const float pan_x = 32.0;
399 const float pan_y = 16.0;
400 const int DISPLAY_WIDTH = 800;
401 const int DISPLAY_HEIGHT = 600;
402 auto owner = std::make_unique<DirectManipulationOwner>(nullptr);
403 owner->SetBindingHandlerDelegate(&delegate);
404 auto handler =
405 fml::MakeRefCounted<DirectManipulationEventHandler>(owner.get());
406 int32_t device_id = (int32_t)reinterpret_cast<int64_t>(handler.get());
407 EXPECT_CALL(viewport, GetPrimaryContent(_, _))
408 .WillOnce([&content](REFIID in, void** out) {
409 *out = &content;
410 return S_OK;
411 })
412 .RetiresOnSaturation();
413 EXPECT_CALL(content, GetContentTransform(_, 6))
414 .WillOnce([scale](float* transform, DWORD size) {
415 transform[0] = 2.0f;
416 transform[4] = 234.0;
417 transform[5] = 345.0;
418 return S_OK;
419 })
420 .RetiresOnSaturation();
421 EXPECT_CALL(delegate, OnPointerPanZoomStart(device_id));
422 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
423 DIRECTMANIPULATION_RUNNING,
424 DIRECTMANIPULATION_READY);
425 EXPECT_CALL(content, GetContentTransform(_, 6))
426 .WillOnce([scale, pan_x, pan_y](float* transform, DWORD size) {
427 transform[0] = 2.0f * scale;
428 transform[4] = 234.0 + pan_x;
429 transform[5] = 345.0 + pan_y;
430 return S_OK;
431 });
432 EXPECT_CALL(delegate,
433 OnPointerPanZoomUpdate(device_id, pan_x, pan_y, scale, 0));
434 handler->OnContentUpdated((IDirectManipulationViewport*)&viewport,
435 (IDirectManipulationContent*)&content);
436 EXPECT_CALL(delegate, OnPointerPanZoomEnd(device_id));
437 EXPECT_CALL(viewport, GetViewportRect(_))
438 .WillOnce([DISPLAY_WIDTH, DISPLAY_HEIGHT](RECT* rect) {
439 rect->left = 0;
440 rect->top = 0;
441 rect->right = DISPLAY_WIDTH;
442 rect->bottom = DISPLAY_HEIGHT;
443 return S_OK;
444 });
445 EXPECT_CALL(viewport, ZoomToRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, false))
446 .WillOnce(::testing::Return(S_OK));
447 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
448 DIRECTMANIPULATION_INERTIA,
449 DIRECTMANIPULATION_RUNNING);
450 handler->OnViewportStatusChanged((IDirectManipulationViewport*)&viewport,
451 DIRECTMANIPULATION_READY,
452 DIRECTMANIPULATION_INERTIA);
453}
454
455} // namespace testing
456} // namespace flutter
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, QueryInterface, HRESULT(REFIID, void **))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetContentTransform, HRESULT(float *, DWORD))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetOutputTransform, HRESULT(float *, DWORD))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG())
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, GetTag, HRESULT(REFIID, void **, UINT32 *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SyncContentTransform, HRESULT(const float *, DWORD))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetContentRect, HRESULT(RECT *))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG())
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetTag, HRESULT(IUnknown *, UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetContentRect, HRESULT(const RECT *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetViewport, HRESULT(REFIID, void **))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, QueryInterface, HRESULT(REFIID, void **))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Abandon, HRESULT())
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, AddRef, ULONG())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportRect, HRESULT(const RECT *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SyncDisplayTransform, HRESULT(const float *, DWORD))
MOCK_METHOD5_WITH_CALLTYPE(STDMETHODCALLTYPE, ZoomToRect, HRESULT(const float, const float, const float, const float, BOOL))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Enable, HRESULT())
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Disable, HRESULT())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveEventHandler, HRESULT(DWORD))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, AddConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportOptions, HRESULT(DIRECTMANIPULATION_VIEWPORT_OPTIONS))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveContent, HRESULT(IDirectManipulationContent *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetTag, HRESULT(IUnknown *, UINT32))
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, GetTag, HRESULT(REFIID, void **, UINT32 *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetInputMode, HRESULT(DIRECTMANIPULATION_INPUT_MODE))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Stop, HRESULT())
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetViewportTransform, HRESULT(const float *, DWORD))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, ReleaseAllContacts, HRESULT())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetUpdateMode, HRESULT(DIRECTMANIPULATION_INPUT_MODE))
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Release, ULONG())
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, ActivateConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, RemoveConfiguration, HRESULT(DIRECTMANIPULATION_CONFIGURATION))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, AddContent, HRESULT(IDirectManipulationContent *))
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, AddEventHandler, HRESULT(HWND, IDirectManipulationViewportEventHandler *, DWORD *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetChaining, HRESULT(DIRECTMANIPULATION_MOTION_TYPES))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetStatus, HRESULT(DIRECTMANIPULATION_STATUS *))
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetPrimaryContent, HRESULT(REFIID, void **))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, ReleaseContact, HRESULT(UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetViewportRect, HRESULT(RECT *))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetContact, HRESULT(UINT32))
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetManualGesture, HRESULT(DIRECTMANIPULATION_GESTURE_CONFIGURATION))
const gchar FlBinaryMessengerMessageHandler handler
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition macros.h:27
union flutter::testing::@2883::KeyboardChange::@77 content
TEST(NativeAssetsManagerTest, NoAvailableAssets)
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
int BOOL
DWORD ULONG
unsigned long DWORD