Some alpha blended rectangles spinning and scaling, nothing much, but it could allow you to understand the timeline system:
Code: Select all
XIncludeFile "Includes/clutter.pbi"
XIncludeFile "Includes/gobject.pbi"
EnableExplicit
Define.ClutterColor stage_color, Red,Green,Blue,Yellow,Cyan,Purple
Define *TimeLine.ClutterTimeline
Global.ClutterActor *rect1, *rect2, *rect3, *rect4, *rect5, *rect6, *stage
Global Rotation.d, Scale.d
;{ colors
With stage_color
\alpha = 255
\red = 0
\blue = 0
\green = 0
EndWith
With Red
\alpha = 128
\red = 255
\blue = 0
\green = 0
EndWith
With Green
\alpha = 128
\red = 0
\blue = 0
\green = 255
EndWith
With Blue
\alpha = 128
\red = 0
\blue = 255
\green = 0
EndWith
With Yellow
\alpha = 128
\red = 255
\blue = 0
\green = 255
EndWith
With Cyan
\alpha = 128
\red = 0
\blue = 255
\green = 255
EndWith
With Purple
\alpha = 128
\red = 255
\blue = 255
\green = 0
EndWith
;}
Procedure CreateRect(*Color.ClutterColor)
Protected *Rect.ClutterActor
*Rect = clutter_rectangle_new_with_color(*Color)
clutter_actor_set_size(*Rect, 256, 128)
clutter_actor_set_position(*rect, 256,256)
clutter_container_add_actor(*stage, *rect)
clutter_actor_set_anchor_point(*rect, 128, 64)
clutter_actor_show(*rect)
ProcedureReturn *Rect
EndProcedure
Procedure.d Clamp(Value.d,Minval.d,Maxval.d)
If Value > Maxval
value = Maxval
ElseIf value < Minval
Value = Minval
EndIf
ProcedureReturn Value
EndProcedure
Procedure.d Hermite(Value1.d,tangent1.d,Value2.d,tangent2.d,amount.d)
Protected.d AmountSquared = amount * amount, AmountCubed.d = AmountSquared * amount, Result
If amount = 0.0
Result = Value1
ElseIf amount = 1.0
result = value2
Else
result = (2 * value1 - 2 * value2 + tangent2 + tangent1) * AmountCubed + (3 * value2 - 3 * value1 - 2 * tangent1 - tangent2) * AmountSquared + tangent1 * amount + value1
EndIf
ProcedureReturn Result
EndProcedure
Procedure.d Smoot_Step(Value1.d,Value2.d,Amount.d)
Protected Result = Clamp(Amount,0.0,1.0)
result = hermite(value1, 0.0, value2, 0.0, result)
ProcedureReturn Result
EndProcedure
Procedure.d Smoot_Step2(Value1.d,Value2.d,Amount.d)
Protected Result.d
If Amount > 0.5
Result = hermite(value2, 0, value1, 0, (Amount - 0.5) * 2)
Else
Result = hermite(value1, 0, value2, 0, Amount* 2)
EndIf
ProcedureReturn Result
EndProcedure
Procedure on_stage_button_press(*Stage.ClutterStage,*Event,*Data_)
Protected.f X,Y
clutter_event_get_coords(*Event,@X,@Y)
Protected *Clicked. ClutterActor = clutter_stage_get_actor_at_pos(*Stage,#CLUTTER_PICK_ALL,x,y)
If *Clicked <> *stage
clutter_actor_hide(*Clicked)
EndIf
EndProcedure
Procedure On_Timeline_New_Frame(*TimeLine.ClutterTimeline,Frame_Num.i,*Data_)
Rotation + 0.3
clutter_actor_set_rotation(*rect1,#CLUTTER_Z_AXIS,Rotation*5,0,0,0)
clutter_actor_set_rotation(*rect2,#CLUTTER_Z_AXIS,Rotation*4,0,0,0)
clutter_actor_set_rotation(*rect3,#CLUTTER_Z_AXIS,Rotation*3,0,0,0)
clutter_actor_set_rotation(*rect4,#CLUTTER_Z_AXIS,Rotation*2,0,0,0)
clutter_actor_set_rotation(*rect5,#CLUTTER_Z_AXIS,Rotation,0,0,0)
clutter_actor_set_rotation(*rect6,#CLUTTER_Z_AXIS,Rotation*0.5,0,0,0)
Protected Scale_Amount.f
scale + 0.01
If Scale > 1.0
Scale = 0
EndIf
Scale_Amount = Smoot_Step2(1.0,2.0,scale)
clutter_actor_set_scale(*rect1, scale_amount, scale_amount)
clutter_actor_set_scale(*rect2, scale_amount, scale_amount)
clutter_actor_set_scale(*rect3, scale_amount, scale_amount)
clutter_actor_set_scale(*rect4, scale_amount, scale_amount)
clutter_actor_set_scale(*rect5, scale_amount, scale_amount)
clutter_actor_set_scale(*rect6, scale_amount, scale_amount)
EndProcedure
clutter_init(0,0)
*stage= clutter_stage_get_default()
clutter_actor_set_size(*stage,512,512)
clutter_stage_set_color(*stage,@stage_color)
*rect1 = CreateRect(Red)
*rect2 = CreateRect(Green)
*rect3 = CreateRect(Blue)
*rect4 = CreateRect(Yellow)
*rect5 = CreateRect(Cyan)
*rect6 = CreateRect(Purple)
g_signal_connect_data(*stage,"button-press-event",@on_stage_button_press(),#Null,#Null,#Null)
*TimeLine = clutter_timeline_new(60)
g_signal_connect_data(*TimeLine, "new-frame",@On_Timeline_New_Frame(),#Null,#Null,#Null)
clutter_timeline_set_loop(*TimeLine,#True)
clutter_timeline_start(*TimeLine)
clutter_actor_show(*stage)
clutter_main()