static void MeasureImageSize(CssImageRun imgRun, LayoutVisitor lay)
{
var width = imgRun.OwnerBox.Width;
var height = imgRun.OwnerBox.Height;
bool hasImageTagWidth = width.Number > 0 && width.UnitOrNames == Css.CssUnitOrNames.Pixels;
bool hasImageTagHeight = height.Number > 0 && height.UnitOrNames == Css.CssUnitOrNames.Pixels;
bool scaleImageHeight = false;
if (hasImageTagWidth)
{
imgRun.Width = width.Number;
}
else if (width.Number > 0 && width.IsPercentage)
{
imgRun.Width = width.Number * lay.LatestContainingBlock.VisualWidth;
scaleImageHeight = true;
}
else if (imgRun.HasUserImageContent)
{
imgRun.Width = imgRun.ImageRectangle == Rectangle.Empty ? imgRun.OriginalImageWidth : imgRun.ImageRectangle.Width;
}
else
{
imgRun.Width = hasImageTagHeight ? height.Number / 1.14f : 20;
}
var maxWidth = imgRun.OwnerBox.MaxWidth;// new CssLength(imageWord.OwnerBox.MaxWidth);
if (maxWidth.Number > 0)
{
float maxWidthVal = -1;
switch (maxWidth.UnitOrNames)
{
case Css.CssUnitOrNames.Percent:
{
maxWidthVal = maxWidth.Number * lay.LatestContainingBlock.VisualWidth;
}
break;
case Css.CssUnitOrNames.Pixels:
{
maxWidthVal = maxWidth.Number;
}
break;
}
if (maxWidthVal > -1 && imgRun.Width > maxWidthVal)
{
imgRun.Width = maxWidthVal;
scaleImageHeight = !hasImageTagHeight;
}
}
if (hasImageTagHeight)
{
imgRun.Height = height.Number;
}
else if (imgRun.HasUserImageContent)
{
imgRun.Height = imgRun.ImageRectangle == Rectangle.Empty ? imgRun.OriginalImageHeight : imgRun.ImageRectangle.Height;
}
else
{
imgRun.Height = imgRun.Width > 0 ? imgRun.Width * 1.14f : 22.8f;
}
if (imgRun.HasUserImageContent)
{
// If only the width was set in the html tag, ratio the height.
if ((hasImageTagWidth && !hasImageTagHeight) || scaleImageHeight)
{
// Divide the given tag width with the actual image width, to get the ratio.
float ratio = imgRun.Width / imgRun.OriginalImageWidth;
imgRun.Height = imgRun.OriginalImageHeight * ratio;
}
// If only the height was set in the html tag, ratio the width.
else if (hasImageTagHeight && !hasImageTagWidth)
{
// Divide the given tag height with the actual image height, to get the ratio.
float ratio = imgRun.Height / imgRun.OriginalImageHeight;
imgRun.Width = imgRun.OriginalImageWidth * ratio;
}
}
//imageWord.Height += imageWord.OwnerBox.ActualBorderBottomWidth + imageWord.OwnerBox.ActualBorderTopWidth + imageWord.OwnerBox.ActualPaddingTop + imageWord.OwnerBox.ActualPaddingBottom;
}
}