Rename SetRect to something more appropriate and tune it

This commit is contained in:
Flamefire committed 2014-09-25 12:15:18 +02:00
1 parent 2ba5f9ee7f
commit 879176a87f
4 files changed
+31 -27

No files matched your search

+1 -2
View File
@@ -381,8 +381,7 @@ namespace Vocaluxe.Base
if (textureRef == null)
return;
SRectF rect;
CHelper.SetRect(bounds, out rect, textureRef.OrigAspect, aspect);
SRectF rect = CHelper.FitInBounds(bounds, textureRef.OrigAspect, aspect);
DrawTexture(textureRef, rect, color);
}
+28 -21
View File
@@ -78,51 +78,58 @@ namespace VocaluxeLib
return result;
}
public static void SetRect(SRectF bounds, out SRectF rect, float aspectRatio, EAspect aspect)
/// <summary>
/// Places a rect within the bounds maintaining the aspectRatio and using the given aspect
/// </summary>
/// <param name="bounds">Bounds to fit the rect in</param>
/// <param name="aspectRatio">The original aspectRatio of the rect/image/...</param>
/// <param name="aspect">
/// Crop: Fit fully in bounds cutting off overhanging parts (same on both sides)<br />
/// LetterBox: Fit the long side possibly leaving some space on the other (rect will be centered)<br />
/// StretcH: Just fit the rect in the bounds (rect=bounds)
/// </param>
public static SRectF FitInBounds(SRectF bounds, float aspectRatio, EAspect aspect)
{
float boundsW = bounds.W;
float boundsH = bounds.H;
float boundsAspectRatio = boundsW / boundsH;
if (aspect == EAspect.Stretch)
return bounds;
float scaledWidth;
float scaledHeight;
float boundsAspectRatio = bounds.W / bounds.H;
float scaledWidth, scaledHeight;
switch (aspect)
{
case EAspect.Crop:
if (boundsAspectRatio >= aspectRatio)
{
scaledWidth = boundsW;
scaledHeight = boundsW / aspectRatio;
scaledWidth = bounds.W;
scaledHeight = bounds.W / aspectRatio;
}
else
{
scaledHeight = boundsH;
scaledWidth = boundsH * aspectRatio;
scaledHeight = bounds.H;
scaledWidth = bounds.H * aspectRatio;
}
break;
case EAspect.LetterBox:
if (boundsAspectRatio <= aspectRatio)
{
scaledWidth = boundsW;
scaledHeight = boundsW / aspectRatio;
scaledWidth = bounds.W;
scaledHeight = bounds.W / aspectRatio;
}
else
{
scaledHeight = boundsH;
scaledWidth = boundsH * aspectRatio;
scaledHeight = bounds.H;
scaledWidth = bounds.H * aspectRatio;
}
break;
default:
scaledWidth = boundsW;
scaledHeight = boundsH;
break;
return bounds;
}
float left = (bounds.W - scaledWidth) / 2 + bounds.X;
float top = (bounds.H - scaledHeight) / 2 + bounds.Y;
float left = (boundsW - scaledWidth) / 2 + bounds.X;
float upper = (boundsH - scaledHeight) / 2 + bounds.Y;
rect = new SRectF(left, upper, scaledWidth, scaledHeight, bounds.Z);
return new SRectF(left, top, scaledWidth, scaledHeight, bounds.Z);
}
/// <summary>
+1 -1
View File
@@ -196,7 +196,7 @@ namespace VocaluxeLib.Menu
SRectF rect = Rect.Scale(scale);
rect.Z += zModify;
if (texture != null)
CHelper.SetRect(rect, out rect, texture.OrigAspect, aspect);
rect = CHelper.FitInBounds(rect, texture.OrigAspect, aspect);
var color = new SColorF(Color.R, Color.G, Color.B, Color.A * Alpha);
if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
@@ -17,7 +17,6 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using VocaluxeLib.Draw;
@@ -473,8 +472,7 @@ namespace VocaluxeLib.Menu.SongMenu
{
if (vidtex.Color.A < 1)
_CoverBig.Draw(EAspect.Crop);
SRectF rect;
CHelper.SetRect(_CoverBig.Rect, out rect, vidtex.OrigAspect, EAspect.Crop);
SRectF rect = CHelper.FitInBounds(_CoverBig.Rect, vidtex.OrigAspect, EAspect.Crop);
CBase.Drawing.DrawTexture(vidtex, rect);
CBase.Drawing.DrawTextureReflection(vidtex, rect, vidtex.Color, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight);