public void EnforceScaleAndRange()
{
float a = this.rect.width / this.m_HScaleMin;
float num2 = this.rect.height / this.m_VScaleMin;
if ((this.hRangeMax != float.PositiveInfinity) && (this.hRangeMin != float.NegativeInfinity))
{
a = Mathf.Min(a, this.hRangeMax - this.hRangeMin);
}
if ((this.vRangeMax != float.PositiveInfinity) && (this.vRangeMin != float.NegativeInfinity))
{
num2 = Mathf.Min(num2, this.vRangeMax - this.vRangeMin);
}
Rect lastShownAreaInsideMargins = this.m_LastShownAreaInsideMargins;
Rect shownAreaInsideMargins = this.shownAreaInsideMargins;
if (shownAreaInsideMargins != lastShownAreaInsideMargins)
{
float num3 = 1E-05f;
if (shownAreaInsideMargins.width < (lastShownAreaInsideMargins.width - num3))
{
float t = Mathf.InverseLerp(lastShownAreaInsideMargins.width, shownAreaInsideMargins.width, this.rect.width / this.m_HScaleMax);
float x = Mathf.Lerp(lastShownAreaInsideMargins.x, shownAreaInsideMargins.x, t);
float width = Mathf.Lerp(lastShownAreaInsideMargins.width, shownAreaInsideMargins.width, t);
shownAreaInsideMargins = new Rect(x, shownAreaInsideMargins.y, width, shownAreaInsideMargins.height);
}
if (shownAreaInsideMargins.height < (lastShownAreaInsideMargins.height - num3))
{
float num5 = Mathf.InverseLerp(lastShownAreaInsideMargins.height, shownAreaInsideMargins.height, this.rect.height / this.m_VScaleMax);
float y = Mathf.Lerp(lastShownAreaInsideMargins.y, shownAreaInsideMargins.y, num5);
shownAreaInsideMargins = new Rect(shownAreaInsideMargins.x, y, shownAreaInsideMargins.width, Mathf.Lerp(lastShownAreaInsideMargins.height, shownAreaInsideMargins.height, num5));
}
if (shownAreaInsideMargins.width > (lastShownAreaInsideMargins.width + num3))
{
float num6 = Mathf.InverseLerp(lastShownAreaInsideMargins.width, shownAreaInsideMargins.width, a);
float introduced16 = Mathf.Lerp(lastShownAreaInsideMargins.x, shownAreaInsideMargins.x, num6);
float introduced17 = Mathf.Lerp(lastShownAreaInsideMargins.width, shownAreaInsideMargins.width, num6);
shownAreaInsideMargins = new Rect(introduced16, shownAreaInsideMargins.y, introduced17, shownAreaInsideMargins.height);
}
if (shownAreaInsideMargins.height > (lastShownAreaInsideMargins.height + num3))
{
float num7 = Mathf.InverseLerp(lastShownAreaInsideMargins.height, shownAreaInsideMargins.height, num2);
float introduced18 = Mathf.Lerp(lastShownAreaInsideMargins.y, shownAreaInsideMargins.y, num7);
shownAreaInsideMargins = new Rect(shownAreaInsideMargins.x, introduced18, shownAreaInsideMargins.width, Mathf.Lerp(lastShownAreaInsideMargins.height, shownAreaInsideMargins.height, num7));
}
if (shownAreaInsideMargins.xMin < this.hRangeMin)
{
shownAreaInsideMargins.x = this.hRangeMin;
}
if (shownAreaInsideMargins.xMax > this.hRangeMax)
{
shownAreaInsideMargins.x = this.hRangeMax - shownAreaInsideMargins.width;
}
if (shownAreaInsideMargins.yMin < this.vRangeMin)
{
shownAreaInsideMargins.y = this.vRangeMin;
}
if (shownAreaInsideMargins.yMax > this.vRangeMax)
{
shownAreaInsideMargins.y = this.vRangeMax - shownAreaInsideMargins.height;
}
this.shownAreaInsideMarginsInternal = shownAreaInsideMargins;
this.m_LastShownAreaInsideMargins = shownAreaInsideMargins;
}
}