private IList<float> GetValues(int maxCount, Func<SvgTextBase, IEnumerable<SvgUnit>> listGetter, UnitRenderingType renderingType)
{
var currState = this;
int charCount = 0;
var results = new List<float>();
int resultCount = 0;
while (currState != null)
{
charCount += currState.NumChars;
results.AddRange(listGetter.Invoke(currState.Element).Skip(charCount).Take(maxCount).Select(p => p.ToDeviceValue(currState.Renderer, renderingType, currState.Element)));
if (results.Count > resultCount)
{
maxCount -= results.Count - resultCount;
charCount += results.Count - resultCount;
resultCount = results.Count;
}
if (maxCount < 1) return results;
currState = currState.Parent;
}
return results;
}