blob: 6c026a6ced91ead26bc06ef2c72b0688b3cf2c66 [file] [log] [blame]
/*
* Copyright 2017 Alistair Leslie-Hughes
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
import "wtypes.idl";
import "unknwn.idl";
interface IUIAnimationStoryboard;
interface IUIAnimationVariable;
typedef DOUBLE UI_ANIMATION_SECONDS;
typedef struct { int _; } *UI_ANIMATION_KEYFRAME;
typedef enum
{
UI_ANIMATION_MANAGER_IDLE,
UI_ANIMATION_MANAGER_BUSY
} UI_ANIMATION_MANAGER_STATUS;
typedef enum
{
UI_ANIMATION_ROUNDING_NEAREST,
UI_ANIMATION_ROUNDING_FLOOR,
UI_ANIMATION_ROUNDING_CEILING
} UI_ANIMATION_ROUNDING_MODE;
typedef enum
{
UI_ANIMATION_SCHEDULING_UNEXPECTED_FAILURE,
UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY,
UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED,
UI_ANIMATION_SCHEDULING_SUCCEEDED,
UI_ANIMATION_SCHEDULING_DEFERRED
} UI_ANIMATION_SCHEDULING_RESULT;
typedef enum
{
UI_ANIMATION_STORYBOARD_BUILDING,
UI_ANIMATION_STORYBOARD_SCHEDULED,
UI_ANIMATION_STORYBOARD_CANCELLED,
UI_ANIMATION_STORYBOARD_PLAYING,
UI_ANIMATION_STORYBOARD_TRUNCATED,
UI_ANIMATION_STORYBOARD_FINISHED,
UI_ANIMATION_STORYBOARD_READY,
UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY
} UI_ANIMATION_STORYBOARD_STATUS;
typedef enum
{
UI_ANIMATION_UPDATE_NO_CHANGE,
UI_ANIMATION_UPDATE_VARIABLES_CHANGED,
} UI_ANIMATION_UPDATE_RESULT;
typedef enum
{
UI_ANIMATION_TIMER_CLIENT_IDLE,
UI_ANIMATION_TIMER_CLIENT_BUSY,
} UI_ANIMATION_TIMER_CLIENT_STATUS;
typedef enum
{
UI_ANIMATION_IDLE_BEHAVIOR_CONTINUE,
UI_ANIMATION_IDLE_BEHAVIOR_DISABLE,
} UI_ANIMATION_IDLE_BEHAVIOR;
[
local,
object,
uuid(783321ed-78a3-4366-b574-6af607a64788),
pointer_default(unique)
]
interface IUIAnimationManagerEventHandler : IUnknown
{
HRESULT OnManagerStatusChanged (
[in] UI_ANIMATION_MANAGER_STATUS status,
[in] UI_ANIMATION_MANAGER_STATUS prev_status);
}
[
local,
object,
uuid(6358b7ba-87d2-42d5-bf71-82e919dd5862),
pointer_default(unique)
]
interface IUIAnimationVariableChangeHandler : IUnknown
{
HRESULT OnValueChanged (
[in] IUIAnimationStoryboard *storyboard,
[in] IUIAnimationVariable *variable,
[in] DOUBLE value,
[in] DOUBLE prev_value);
}
[
local,
object,
uuid(bb3e1550-356e-44b0-99da-85ac6017865e),
pointer_default(unique)
]
interface IUIAnimationVariableIntegerChangeHandler : IUnknown
{
HRESULT OnIntegerValueChanged (
[in] IUIAnimationStoryboard *storyboard,
[in] IUIAnimationVariable *variable,
[in] INT32 value,
[in] INT32 prev_value);
}
[
local,
object,
uuid(3d5c9008-ec7c-4364-9f8a-9af3c58cbae6),
pointer_default(unique)
]
interface IUIAnimationStoryboardEventHandler : IUnknown
{
HRESULT OnStoryboardStatusChanged (
[in] IUIAnimationStoryboard *storyboard,
[in] UI_ANIMATION_STORYBOARD_STATUS status,
[in] UI_ANIMATION_STORYBOARD_STATUS prev_status);
HRESULT OnStoryboardUpdated ([in] IUIAnimationStoryboard *storyboard);
}
[
local,
object,
uuid(dc6ce252-f731-41cf-b610-614b6ca049ad),
pointer_default(unique)
]
interface IUIAnimationTransition : IUnknown
{
HRESULT SetInitialValue ([in] DOUBLE value);
HRESULT SetInitialVelocity ([in] DOUBLE velocity);
HRESULT IsDurationKnown ();
HRESULT GetDuration ([out, retval] UI_ANIMATION_SECONDS *duration);
}
[
local,
object,
uuid(8ceeb155-2849-4ce5-9448-91ff70e1e4d9),
pointer_default(unique)
]
interface IUIAnimationVariable : IUnknown
{
HRESULT GetValue ([out, retval] DOUBLE *value);
HRESULT GetFinalValue ([out, retval] DOUBLE *value);
HRESULT GetPreviousValue ([out, retval] DOUBLE *value);
HRESULT GetIntegerValue ([out, retval] INT32 *value);
HRESULT GetFinalIntegerValue ([out, retval] INT32 *value);
HRESULT GetPreviousIntegerValue ([out, retval] INT32 *value);
HRESULT GetCurrentStoryboard ([out, retval] IUIAnimationStoryboard **storyboard);
HRESULT SetLowerBound ([in] DOUBLE bound);
HRESULT SetUpperBound ([in] DOUBLE bound);
HRESULT SetRoundingMode ([in] UI_ANIMATION_ROUNDING_MODE mode);
HRESULT SetTag (
[in] IUnknown *object,
[in] UINT32 id);
HRESULT GetTag (
[out] IUnknown **object,
[out] UINT32 *id);
HRESULT SetVariableChangeHandler ([in, unique] IUIAnimationVariableChangeHandler *handler);
HRESULT SetVariableIntegerChangeHandler ([in, unique] IUIAnimationVariableIntegerChangeHandler *handler);
}
[
local,
object,
uuid(a8ff128f-9bf9-4af1-9e67-e5e410defb84),
pointer_default(unique)
]
interface IUIAnimationStoryboard : IUnknown
{
HRESULT AddTransition (
[in] IUIAnimationVariable *variable,
[in] IUIAnimationTransition *transition);
HRESULT AddKeyframeAtOffset (
[in] UI_ANIMATION_KEYFRAME existingframe,
[in] UI_ANIMATION_SECONDS offset,
[out, retval] UI_ANIMATION_KEYFRAME *keyframe);
HRESULT AddKeyframeAfterTransition (
[in] IUIAnimationTransition *transition,
[out, retval] UI_ANIMATION_KEYFRAME *keyframe);
HRESULT AddTransitionAtKeyframe (
[in] IUIAnimationVariable *variable,
[in] IUIAnimationTransition *transition,
[in] UI_ANIMATION_KEYFRAME start_key);
HRESULT AddTransitionBetweenKeyframes (
[in] IUIAnimationVariable *variable,
[in] IUIAnimationTransition *transition,
[in] UI_ANIMATION_KEYFRAME start_key,
[in] UI_ANIMATION_KEYFRAME end_key);
HRESULT RepeatBetweenKeyframes (
[in] UI_ANIMATION_KEYFRAME start_key,
[in] UI_ANIMATION_KEYFRAME end_key,
[in] INT32 count);
HRESULT HoldVariable ([in] IUIAnimationVariable *variable);
HRESULT SetLongestAcceptableDelay ([in] UI_ANIMATION_SECONDS delay);
HRESULT Schedule (
[in] UI_ANIMATION_SECONDS now,
[out, defaultvalue(0)] UI_ANIMATION_SCHEDULING_RESULT *result);
HRESULT Conclude ();
HRESULT Finish ([in] UI_ANIMATION_SECONDS deadline);
HRESULT Abandon ();
HRESULT SetTag(
[in, unique] IUnknown *object,
[in] UINT32 id);
HRESULT GetTag (
[out] IUnknown **object,
[out] UINT32 *id);
HRESULT GetStatus ([out, retval] UI_ANIMATION_STORYBOARD_STATUS *status);
HRESULT GetElapsedTime ([out] UI_ANIMATION_SECONDS *elapsed);
HRESULT SetStoryboardEventHandler ([in, unique] IUIAnimationStoryboardEventHandler *handler);
}
[
local,
object,
uuid(bedb4db6-94fa-4bfb-a47f-ef2d9e408c25),
pointer_default(unique)
]
interface IUIAnimationTimerClientEventHandler : IUnknown
{
HRESULT OnTimerClientStatusChanged (
[in] UI_ANIMATION_TIMER_CLIENT_STATUS new_status,
[in] UI_ANIMATION_TIMER_CLIENT_STATUS previous_status);
}
[
local,
object,
uuid(195509b7-5d5e-4e3e-b278-ee3759b367ad),
pointer_default(unique)
]
interface IUIAnimationTimerUpdateHandler : IUnknown
{
HRESULT OnUpdate (
[in] UI_ANIMATION_SECONDS now,
[out, retval] UI_ANIMATION_UPDATE_RESULT *result);
HRESULT SetTimerClientEventHandler (
[in] IUIAnimationTimerClientEventHandler *handler);
HRESULT ClearTimerClientEventHandler ();
}
[
local,
object,
uuid(274a7dea-d771-4095-abbd-8df7abd23ce3),
pointer_default(unique)
]
interface IUIAnimationTimerEventHandler : IUnknown
{
HRESULT OnPreUpdate ();
HRESULT OnPostUpdate ();
HRESULT OnRenderingTooSlow (
[in] UINT32 fps);
}
[
local,
object,
uuid(6b0efad1-a053-41d6-9085-33a689144665),
pointer_default(unique)
]
interface IUIAnimationTimer : IUnknown
{
HRESULT SetTimerUpdateHandler (
[in, unique] IUIAnimationTimerUpdateHandler *handler,
[in] UI_ANIMATION_IDLE_BEHAVIOR idlebehavior);
HRESULT SetTimerEventHandler (
[in, unique] IUIAnimationTimerEventHandler *handler);
HRESULT Enable ();
HRESULT Disable ();
HRESULT IsEnabled ();
HRESULT GetTime (
[out] UI_ANIMATION_SECONDS *time);
HRESULT SetFrameRateThreshold (
[in] UINT32 fps);
}
[
uuid(44ca24db-1a92-4149-bab5-fb14d64b401e),
version(1.0)
]
library UIAnimation
{
[
uuid(bfcd4a0c-06b6-4384-b768-0daa792c380e)
]
coclass UIAnimationTimer
{
[default] interface IUIAnimationTimer;
}
}