internal static AnimationControler.AnimePacket AnimePointPropPacket(string queueName, string propName, Point point, int time, SpeedMode speedMode, bool queue, int queueLevel, object qOwner, AnimationControler.FinalCallback finalCallback, bool CompleteIfCancel) { LocationThreadParam sizeParam = new LocationThreadParam() { CompleteIfCancel = CompleteIfCancel }; sizeParam.location = point; sizeParam.time = time; sizeParam.PropertyName = propName; sizeParam.speedMode = speedMode; sizeParam.QueueLevel = queueLevel; sizeParam.finalCallback = finalCallback; sizeParam.queueName = queueName; return new AnimationControler.AnimePacket() { isQueue = queue && queueLevel >= 0, queueOwner = qOwner, method = SetPointProperty, threadParam = sizeParam }; }
private static void SetPointProperty(object pointThreadParam) { LocationThreadParam td = (LocationThreadParam)pointThreadParam; try { int iterations = AnimationControler.GetIterations(td.time); Point currPos = (Point)td.control.GetProperty(td.PropertyName); int changeX = td.location.X - currPos.X; int changeY = td.location.Y - currPos.Y; SizeCalculator calcX = new SizeCalculator(changeX, td.speedMode, iterations); SizeCalculator calcY = new SizeCalculator(changeY, td.speedMode, iterations); StepProcesor procesor = new StepProcesor(iterations, td.time); Point newPos = currPos; Point prevPos = currPos; procesor.Start((d) => { newPos = new Point(currPos.X + calcX.NextSize, currPos.Y + calcY.NextSize); if (td.animatorState.Canceled) { d.Cancel = true; return; } if (newPos != prevPos) SetObjectProperty(td.control, td.PropertyName, newPos); prevPos = newPos; }); if (newPos != td.location) { try { if (td.animatorState.Canceled && !td.CompleteIfCancel) return; SetObjectProperty(td.control, td.PropertyName, td.location); } catch (Exception e) { } } } finally { td.controlState.AnimatorEnd(td.animatorState); } }