internal static AnimationControler.AnimePacket AnimeIntPropPacket(string queueName, string propName, int height, int time, SpeedMode speedMode, bool queue, int queueLevel, object qOwner, AnimationControler.FinalCallback finalCallback, bool CompleteIfCancel) { IntValueThreadParam sizeParam = new IntValueThreadParam() { CompleteIfCancel = CompleteIfCancel }; sizeParam.value = height; 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 = SetIntProperty, threadParam = sizeParam }; }
private static void SetIntProperty(object intThreadParam) { IntValueThreadParam td = (IntValueThreadParam)intThreadParam; try { int iterations = AnimationControler.GetIterations(td.time); int currHeight = (int)td.control.GetProperty(td.PropertyName); int changeSize = td.value - currHeight; SizeCalculator cacl = new SizeCalculator(changeSize, td.speedMode, iterations); StepProcesor procesor = new StepProcesor(iterations, td.time); bool up = changeSize > 0; int newHeight = currHeight; int prevHeight = currHeight; procesor.Start((d) => { newHeight = currHeight + cacl.NextSize; if (up && newHeight > td.value || !up && newHeight < td.value) newHeight = td.value; if (td.animatorState.Canceled) { d.Cancel = true; return; } if (newHeight != prevHeight) SetObjectProperty(td.control, td.PropertyName, newHeight); prevHeight = newHeight; }); if (newHeight != td.value) { try { if (td.animatorState.Canceled && !td.CompleteIfCancel) return; SetObjectProperty(td.control, td.PropertyName, td.value); } catch (Exception e) { } } } finally { td.controlState.AnimatorEnd(td.animatorState); } }