2 * Copyright 2017 Alistair Leslie-Hughes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 interface IUIAnimationStoryboard
;
22 interface IUIAnimationVariable
;
23 interface IUIAnimationManager
;
24 interface IUIAnimationPriorityComparison
;
25 interface IUIAnimationTransitionFactory
;
26 interface IUIAnimationInterpolator
;
27 interface IUIAnimationManagerEventHandler
;
28 interface IUIAnimationTransition
;
29 interface IUIAnimationTransitionLibrary
;
31 typedef DOUBLE UI_ANIMATION_SECONDS
;
32 typedef struct { int _
; } *UI_ANIMATION_KEYFRAME
;
34 const UI_ANIMATION_SECONDS UI_ANIMATION_SECONDS_EVENTUALLY
= -1.0;
38 UI_ANIMATION_MANAGER_IDLE
,
39 UI_ANIMATION_MANAGER_BUSY
40 } UI_ANIMATION_MANAGER_STATUS
;
44 UI_ANIMATION_ROUNDING_NEAREST
,
45 UI_ANIMATION_ROUNDING_FLOOR
,
46 UI_ANIMATION_ROUNDING_CEILING
47 } UI_ANIMATION_ROUNDING_MODE
;
51 UI_ANIMATION_SCHEDULING_UNEXPECTED_FAILURE
,
52 UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY
,
53 UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED
,
54 UI_ANIMATION_SCHEDULING_SUCCEEDED
,
55 UI_ANIMATION_SCHEDULING_DEFERRED
56 } UI_ANIMATION_SCHEDULING_RESULT
;
60 UI_ANIMATION_STORYBOARD_BUILDING
,
61 UI_ANIMATION_STORYBOARD_SCHEDULED
,
62 UI_ANIMATION_STORYBOARD_CANCELLED
,
63 UI_ANIMATION_STORYBOARD_PLAYING
,
64 UI_ANIMATION_STORYBOARD_TRUNCATED
,
65 UI_ANIMATION_STORYBOARD_FINISHED
,
66 UI_ANIMATION_STORYBOARD_READY
,
67 UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY
68 } UI_ANIMATION_STORYBOARD_STATUS
;
72 UI_ANIMATION_UPDATE_NO_CHANGE
,
73 UI_ANIMATION_UPDATE_VARIABLES_CHANGED
,
74 } UI_ANIMATION_UPDATE_RESULT
;
78 UI_ANIMATION_TIMER_CLIENT_IDLE
,
79 UI_ANIMATION_TIMER_CLIENT_BUSY
,
80 } UI_ANIMATION_TIMER_CLIENT_STATUS
;
84 UI_ANIMATION_IDLE_BEHAVIOR_CONTINUE
,
85 UI_ANIMATION_IDLE_BEHAVIOR_DISABLE
,
86 } UI_ANIMATION_IDLE_BEHAVIOR
;
88 typedef [v1_enum] enum
90 UI_ANIMATION_MODE_DISABLED
,
91 UI_ANIMATION_MODE_SYSTEM_DEFAULT
,
92 UI_ANIMATION_MODE_ENABLED
95 typedef [v1_enum] enum
97 UI_ANIMATION_PRIORITY_EFFECT_FAILURE
,
98 UI_ANIMATION_PRIORITY_EFFECT_DELAY
99 } UI_ANIMATION_PRIORITY_EFFECT
;
101 typedef [v1_enum] enum
103 UI_ANIMATION_DEPENDENCY_NONE
= 0,
104 UI_ANIMATION_DEPENDENCY_INTERMEDIATE_VALUES
= 0x1,
105 UI_ANIMATION_DEPENDENCY_FINAL_VALUE
= 0x2,
106 UI_ANIMATION_DEPENDENCY_FINAL_VELOCITY
= 0x4,
107 UI_ANIMATION_DEPENDENCY_DURATION
= 0x8
108 } UI_ANIMATION_DEPENDENCIES
;
110 typedef [v1_enum] enum
112 UI_ANIMATION_SLOPE_INCREASING
,
113 UI_ANIMATION_SLOPE_DECREASING
114 } UI_ANIMATION_SLOPE
;
119 uuid(783321ed
-78a3
-4366-b574
-6af607a64788
),
120 pointer_default(unique)
122 interface IUIAnimationManagerEventHandler
: IUnknown
124 HRESULT OnManagerStatusChanged
(
125 [in] UI_ANIMATION_MANAGER_STATUS status
,
126 [in] UI_ANIMATION_MANAGER_STATUS prev_status
);
132 uuid(6358b7ba
-87d2
-42d5
-bf71
-82e919dd5862
),
133 pointer_default(unique)
135 interface IUIAnimationVariableChangeHandler
: IUnknown
137 HRESULT OnValueChanged
(
138 [in] IUIAnimationStoryboard
*storyboard
,
139 [in] IUIAnimationVariable
*variable
,
141 [in] DOUBLE prev_value
);
147 uuid(bb3e1550
-356e-44b0
-99da
-85ac6017865e
),
148 pointer_default(unique)
150 interface IUIAnimationVariableIntegerChangeHandler
: IUnknown
152 HRESULT OnIntegerValueChanged
(
153 [in] IUIAnimationStoryboard
*storyboard
,
154 [in] IUIAnimationVariable
*variable
,
156 [in] INT32 prev_value
);
162 uuid(3d5c9008
-ec7c
-4364-9f8a
-9af3c58cbae6
),
163 pointer_default(unique)
165 interface IUIAnimationStoryboardEventHandler
: IUnknown
167 HRESULT OnStoryboardStatusChanged
(
168 [in] IUIAnimationStoryboard
*storyboard
,
169 [in] UI_ANIMATION_STORYBOARD_STATUS status
,
170 [in] UI_ANIMATION_STORYBOARD_STATUS prev_status
);
172 HRESULT OnStoryboardUpdated
([in] IUIAnimationStoryboard
*storyboard
);
178 uuid(dc6ce252
-f731
-41cf
-b610
-614b6ca049ad
),
179 pointer_default(unique)
181 interface IUIAnimationTransition
: IUnknown
183 HRESULT SetInitialValue
([in] DOUBLE value
);
185 HRESULT SetInitialVelocity
([in] DOUBLE velocity
);
187 HRESULT IsDurationKnown
();
189 HRESULT GetDuration
([out, retval] UI_ANIMATION_SECONDS
*duration
);
195 uuid(8ceeb155
-2849-4ce5
-9448-91ff70e1e4d9
),
196 pointer_default(unique)
198 interface IUIAnimationVariable
: IUnknown
200 HRESULT GetValue
([out, retval] DOUBLE *value
);
202 HRESULT GetFinalValue
([out, retval] DOUBLE *value
);
204 HRESULT GetPreviousValue
([out, retval] DOUBLE *value
);
206 HRESULT GetIntegerValue
([out, retval] INT32
*value
);
208 HRESULT GetFinalIntegerValue
([out, retval] INT32
*value
);
210 HRESULT GetPreviousIntegerValue
([out, retval] INT32
*value
);
212 HRESULT GetCurrentStoryboard
([out, retval] IUIAnimationStoryboard
**storyboard
);
214 HRESULT SetLowerBound
([in] DOUBLE bound
);
216 HRESULT SetUpperBound
([in] DOUBLE bound
);
218 HRESULT SetRoundingMode
([in] UI_ANIMATION_ROUNDING_MODE mode
);
221 [in] IUnknown
*object,
225 [out] IUnknown
**object,
228 HRESULT SetVariableChangeHandler
([in, unique] IUIAnimationVariableChangeHandler
*handler
);
230 HRESULT SetVariableIntegerChangeHandler
([in, unique] IUIAnimationVariableIntegerChangeHandler
*handler
);
236 uuid(a8ff128f
-9bf9
-4af1
-9e67
-e5e410defb84
),
237 pointer_default(unique)
239 interface IUIAnimationStoryboard
: IUnknown
241 HRESULT AddTransition
(
242 [in] IUIAnimationVariable
*variable
,
243 [in] IUIAnimationTransition
*transition
);
245 HRESULT AddKeyframeAtOffset
(
246 [in] UI_ANIMATION_KEYFRAME existingframe
,
247 [in] UI_ANIMATION_SECONDS offset
,
248 [out, retval] UI_ANIMATION_KEYFRAME
*keyframe
);
250 HRESULT AddKeyframeAfterTransition
(
251 [in] IUIAnimationTransition
*transition
,
252 [out, retval] UI_ANIMATION_KEYFRAME
*keyframe
);
254 HRESULT AddTransitionAtKeyframe
(
255 [in] IUIAnimationVariable
*variable
,
256 [in] IUIAnimationTransition
*transition
,
257 [in] UI_ANIMATION_KEYFRAME start_key
);
259 HRESULT AddTransitionBetweenKeyframes
(
260 [in] IUIAnimationVariable
*variable
,
261 [in] IUIAnimationTransition
*transition
,
262 [in] UI_ANIMATION_KEYFRAME start_key
,
263 [in] UI_ANIMATION_KEYFRAME end_key
);
265 HRESULT RepeatBetweenKeyframes
(
266 [in] UI_ANIMATION_KEYFRAME start_key
,
267 [in] UI_ANIMATION_KEYFRAME end_key
,
270 HRESULT HoldVariable
([in] IUIAnimationVariable
*variable
);
272 HRESULT SetLongestAcceptableDelay
([in] UI_ANIMATION_SECONDS delay
);
275 [in] UI_ANIMATION_SECONDS now
,
276 [out, defaultvalue(0)] UI_ANIMATION_SCHEDULING_RESULT
*result
);
280 HRESULT Finish
([in] UI_ANIMATION_SECONDS deadline
);
285 [in, unique] IUnknown
*object,
289 [out] IUnknown
**object,
292 HRESULT GetStatus
([out, retval] UI_ANIMATION_STORYBOARD_STATUS
*status
);
294 HRESULT GetElapsedTime
([out] UI_ANIMATION_SECONDS
*elapsed
);
296 HRESULT SetStoryboardEventHandler
([in, unique] IUIAnimationStoryboardEventHandler
*handler
);
302 uuid(bedb4db6
-94fa
-4bfb
-a47f
-ef2d9e408c25
),
303 pointer_default(unique)
305 interface IUIAnimationTimerClientEventHandler
: IUnknown
307 HRESULT OnTimerClientStatusChanged
(
308 [in] UI_ANIMATION_TIMER_CLIENT_STATUS new_status
,
309 [in] UI_ANIMATION_TIMER_CLIENT_STATUS previous_status
);
315 uuid(195509b7
-5d5e
-4e3e
-b278
-ee3759b367ad
),
316 pointer_default(unique)
318 interface IUIAnimationTimerUpdateHandler
: IUnknown
321 [in] UI_ANIMATION_SECONDS now
,
322 [out, retval] UI_ANIMATION_UPDATE_RESULT
*result
);
324 HRESULT SetTimerClientEventHandler
(
325 [in] IUIAnimationTimerClientEventHandler
*handler
);
327 HRESULT ClearTimerClientEventHandler
();
333 uuid(274a7dea
-d771
-4095-abbd
-8df7abd23ce3
),
334 pointer_default(unique)
336 interface IUIAnimationTimerEventHandler
: IUnknown
338 HRESULT OnPreUpdate
();
340 HRESULT OnPostUpdate
();
342 HRESULT OnRenderingTooSlow
(
349 uuid(6b0efad1
-a053
-41d6
-9085-33a689144665
),
350 pointer_default(unique)
352 interface IUIAnimationTimer
: IUnknown
354 HRESULT SetTimerUpdateHandler
(
355 [in, unique] IUIAnimationTimerUpdateHandler
*handler
,
356 [in] UI_ANIMATION_IDLE_BEHAVIOR idlebehavior
);
358 HRESULT SetTimerEventHandler
(
359 [in, unique] IUIAnimationTimerEventHandler
*handler
);
365 HRESULT IsEnabled
();
368 [out] UI_ANIMATION_SECONDS
*time
);
370 HRESULT SetFrameRateThreshold
(
377 uuid(9169896c
-ac8d
-4e7d
-94e5
-67fa4dc2f2e8
),
378 pointer_default(unique)
380 interface IUIAnimationManager
: IUnknown
382 HRESULT CreateAnimationVariable
(
383 [in] UI_ANIMATION_SECONDS initialvalue
,
384 [out, retval] IUIAnimationVariable
**variable
);
386 HRESULT ScheduleTransition
(
387 [in] IUIAnimationVariable
*variable
,
388 [in] IUIAnimationTransition
*transition
,
389 [in] UI_ANIMATION_SECONDS timenow
);
391 HRESULT CreateStoryboard
(
392 [out, retval] IUIAnimationStoryboard
**storyboard
);
394 HRESULT FinishAllStoryboards
(
395 [in] UI_ANIMATION_SECONDS deadline
);
397 HRESULT AbandonAllStoryboards
();
400 [in] UI_ANIMATION_SECONDS timenow
,
401 [out, defaultvalue(0)] UI_ANIMATION_UPDATE_RESULT
*updateresult
);
403 HRESULT GetVariableFromTag
(
404 [in] IUnknown
* object,
406 [out, retval] IUIAnimationVariable
**variable
);
408 HRESULT GetStoryboardFromTag
(
409 [in] IUnknown
* object,
411 [out, retval] IUIAnimationStoryboard
**storyboard
);
414 [out, retval] UI_ANIMATION_MANAGER_STATUS
*status
);
416 HRESULT SetAnimationMode
(
417 [in] UI_ANIMATION_MODE mode
);
423 HRESULT SetManagerEventHandler
(
424 [in] IUIAnimationManagerEventHandler
*handler
);
426 HRESULT SetCancelPriorityComparison
(
427 [in] IUIAnimationPriorityComparison
*comparison
);
429 HRESULT SetTrimPriorityComparison
(
430 [in] IUIAnimationPriorityComparison
*comparison
);
432 HRESULT SetCompressPriorityComparison
(
433 [in] IUIAnimationPriorityComparison
*comparison
);
435 HRESULT SetConcludePriorityComparison
(
436 [in] IUIAnimationPriorityComparison
*comparison
);
438 HRESULT SetDefaultLongestAcceptableDelay
(
439 [in] UI_ANIMATION_SECONDS delay
);
447 uuid(83fa9b74
-5f86
-4618-bc6a
-a2fac19b3f44
),
448 pointer_default(unique)
450 interface IUIAnimationPriorityComparison
: IUnknown
453 [in] IUIAnimationStoryboard
*scheduledboard
,
454 [in] IUIAnimationStoryboard
*newboard
,
455 [in] UI_ANIMATION_PRIORITY_EFFECT effect
);
461 uuid(fcd91e03
-3e3b
-45ad
-bbb1
-6dfc8153743d
),
462 pointer_default(unique)
464 interface IUIAnimationTransitionFactory
: IUnknown
466 HRESULT CreateTransition
(
467 [in] IUIAnimationInterpolator
*interpolator
,
468 [out, retval] IUIAnimationTransition
**transition
);
474 uuid(7815cbba
-ddf7
-478c
-a46c
-7b6c738b7978
),
475 pointer_default(unique)
477 interface IUIAnimationInterpolator
: IUnknown
479 HRESULT SetInitialValueAndVelocity
(
480 [in] double initialvalue
,
481 [in] double initialvelocity
);
484 [in] UI_ANIMATION_SECONDS duration
);
487 [out, retval] UI_ANIMATION_SECONDS
*duration
);
489 HRESULT GetFinalValue
(
490 [out, retval] double *value
);
492 HRESULT InterpolateValue
(
493 [in] UI_ANIMATION_SECONDS offset
,
494 [out, retval] double *value
);
496 HRESULT InterpolateVelocity
(
497 [in] UI_ANIMATION_SECONDS offset
,
498 [out, retval] double *velocity
);
500 HRESULT GetDependencies
(
501 [out] UI_ANIMATION_DEPENDENCIES
*initialvaluedependencies
,
502 [out] UI_ANIMATION_DEPENDENCIES
*initialvelocitydependencies
,
503 [out] UI_ANIMATION_DEPENDENCIES
*durationdependencies
);
509 uuid(ca5a14b1
-d24f
-48b8
-8fe4
-c78169ba954e
),
510 pointer_default(unique)
512 interface IUIAnimationTransitionLibrary
: IUnknown
514 HRESULT CreateInstantaneousTransition
(
515 [in] double finalvalue
,
516 [out, retval] IUIAnimationTransition
**transition
);
518 HRESULT CreateConstantTransition
(
519 [in] UI_ANIMATION_SECONDS duration
,
520 [out, retval] IUIAnimationTransition
**transition
);
522 HRESULT CreateDiscreteTransition
(
523 [in] UI_ANIMATION_SECONDS delay
,
524 [in] double finalvalue
,
525 [in] UI_ANIMATION_SECONDS hold
,
526 [out, retval] IUIAnimationTransition
**transition
);
528 HRESULT CreateLinearTransition
(
529 [in] UI_ANIMATION_SECONDS duration
,
530 [in] double finalvalue
,
531 [out, retval] IUIAnimationTransition
**transition
);
533 HRESULT CreateLinearTransitionFromSpeed
(
535 [in] double finalvalue
,
536 [out, retval] IUIAnimationTransition
**transition
);
538 HRESULT CreateSinusoidalTransitionFromVelocity
(
539 [in] UI_ANIMATION_SECONDS duration
,
540 [in] UI_ANIMATION_SECONDS period
,
541 [out, retval] IUIAnimationTransition
**transition
);
543 HRESULT CreateSinusoidalTransitionFromRange
(
544 [in] UI_ANIMATION_SECONDS duration
,
545 [in] double minimumvalue
,
546 [in] double maximumvalue
,
547 [in] UI_ANIMATION_SECONDS period
,
548 [in] UI_ANIMATION_SLOPE slope
,
549 [out, retval] IUIAnimationTransition
**transition
);
551 HRESULT CreateAccelerateDecelerateTransition
(
552 [in] UI_ANIMATION_SECONDS duration
,
553 [in] double finalvalue
,
554 [in] double accelerationratio
,
555 [in] double decelerationratio
,
556 [out, retval] IUIAnimationTransition
**transition
);
558 HRESULT CreateReversalTransition
(
559 [in] UI_ANIMATION_SECONDS duration
,
560 [out, retval] IUIAnimationTransition
**transition
);
562 HRESULT CreateCubicTransition
(
563 [in] UI_ANIMATION_SECONDS duration
,
564 [in] double finalvalue
,
565 [in] double finalvelocity
,
566 [out, retval] IUIAnimationTransition
**transition
);
568 HRESULT CreateSmoothStopTransition
(
569 [in] UI_ANIMATION_SECONDS maximumduration
,
570 [in] double finalvalue
,
571 [out, retval] IUIAnimationTransition
**transition
);
573 HRESULT CreateParabolicTransitionFromAcceleration
(
574 [in] UI_ANIMATION_SECONDS finalvalue
,
575 [in] double finalvelocity
,
576 [in] double acceleration
,
577 [out, retval] IUIAnimationTransition
**transition
);
581 uuid(44ca24db
-1a92
-4149-bab5
-fb14d64b401e
),
587 uuid(bfcd4a0c
-06b6
-4384-b768
-0daa792c380e
)
589 coclass UIAnimationTimer
591 [default] interface IUIAnimationTimer
;
595 uuid(4c1fc63a
-695c
-47e8
-a339
-1a194be3d0b8
)
597 coclass UIAnimationManager
599 [default] interface IUIAnimationManager
;
603 uuid(8a9b1cdd
-fcd7
-419c
-8b44
-42fd17db1887
)
605 coclass UIAnimationTransitionFactory
607 [default] interface IUIAnimationTransitionFactory
;
611 uuid(1d6322ad
-aa85
-4ef5
-a828
-86d71067d145
)
613 coclass UIAnimationTransitionLibrary
615 [default] interface IUIAnimationTransitionLibrary
;