internal static AnimationControler.AnimePacket AnimeSizePropPacket(string queueName, string propName, Size size, int time, SpeedMode speedMode, bool queue, int queueLevel, object qOwner, AnimationControler.FinalCallback finalCallback, bool CompleteIfCancel) { SizeThreadParam sizeParam = new SizeThreadParam() { CompleteIfCancel = CompleteIfCancel }; sizeParam.size = size; 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 = SetSizeProperty, threadParam = sizeParam }; }
private static void SetSizeProperty(object sizeThreadParam) { SizeThreadParam td = (SizeThreadParam)sizeThreadParam; try { int iterations = AnimationControler.GetIterations(td.time); Size currSize = (Size)td.control.GetProperty(td.PropertyName); int changeX = td.size.Width - currSize.Width; int changeY = td.size.Height - currSize.Height; SizeCalculator calcX = new SizeCalculator(changeX, td.speedMode, iterations); SizeCalculator calcY = new SizeCalculator(changeY, td.speedMode, iterations); StepProcesor procesor = new StepProcesor(iterations, td.time); Size newSize = currSize; Size prevSize = currSize; procesor.Start((d) => { newSize = new Size(currSize.Width + calcX.NextSize, currSize.Height + calcY.NextSize); if (td.animatorState.Canceled) { d.Cancel = true; return; } if (newSize != prevSize) SetObjectProperty(td.control, td.PropertyName, newSize); prevSize = newSize; }); if (newSize != td.size) { try { if (td.animatorState.Canceled && !td.CompleteIfCancel) return; SetObjectProperty(td.control, td.PropertyName, td.size); } catch (Exception e) { } } } finally { td.controlState.AnimatorEnd(td.animatorState); } }