Fixed bounds calculation of CText
This commit is contained in:
1 parent
9021a444b5
commit
fa22096914
4 files changed
+39
-123
No files matched your search
@@ -116,10 +116,10 @@ namespace Vocaluxe.Base.Fonts
|
|||||||
float dx = (fullSize.Width - boundingSize.Width - 1) / 2;
|
float dx = (fullSize.Width - boundingSize.Width - 1) / 2;
|
||||||
_DrawBounding.X -= dx;
|
_DrawBounding.X -= dx;
|
||||||
_Texture = CDraw.AddTexture(bmpCropped);
|
_Texture = CDraw.AddTexture(bmpCropped);
|
||||||
_DrawBounding.X *= _Texture.Width / _DrawBounding.Width;
|
/*_DrawBounding.X *= _Texture.Width / _DrawBounding.Width;
|
||||||
_DrawBounding.Y *= _Texture.Width / _DrawBounding.Width;
|
_DrawBounding.Y *= _Texture.Width / _DrawBounding.Width;
|
||||||
_DrawBounding.Width = _Texture.Width;
|
_DrawBounding.Width = _Texture.Width;
|
||||||
_DrawBounding.Height = _Texture.Height;
|
_DrawBounding.Height = _Texture.Height;*/
|
||||||
if (false)
|
if (false)
|
||||||
{
|
{
|
||||||
if (outline > 0)
|
if (outline > 0)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Vocaluxe.Screens
|
|||||||
base.Init();
|
base.Init();
|
||||||
const string test = " ÖÄÜabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWGXZ1234567890";
|
const string test = " ÖÄÜabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWGXZ1234567890";
|
||||||
SColorF color = new SColorF(1, 0, 0, 1);
|
SColorF color = new SColorF(1, 0, 0, 1);
|
||||||
CText text = new CText(10, 50, 1, 32, 0, EAlignment.Left, EStyle.Normal, "Normal", color, "Normal Text" + test, -1, 26, 0);
|
CText text = new CText(10, 50, 1, 200, 0, EAlignment.Left, EStyle.Normal, "Normal", color, "Normal Text" + test, -1, 26, 0);
|
||||||
_AddText(text);
|
_AddText(text);
|
||||||
text = new CText(10, 90, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Normal", color, "Bold Text" + test, -1, 26, 0);
|
text = new CText(10, 90, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Normal", color, "Bold Text" + test, -1, 26, 0);
|
||||||
_AddText(text);
|
_AddText(text);
|
||||||
@@ -51,7 +51,7 @@ namespace Vocaluxe.Screens
|
|||||||
_AddText(text);
|
_AddText(text);
|
||||||
text = new CText(10, 210, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Outline", color, "Bold Text" + test, -1, 26, 0);
|
text = new CText(10, 210, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Outline", color, "Bold Text" + test, -1, 26, 0);
|
||||||
_AddText(text);
|
_AddText(text);
|
||||||
text = new CText(10, 250, 1, 400, 0, EAlignment.Left, EStyle.Italic, "Outline", color, "Italic Text" + test, -1, 26, 0);
|
text = new CText(10, 250, 1, 32, 0, EAlignment.Left, EStyle.Italic, "Outline", color, "Italic Text" + test, -1, 26, 0);
|
||||||
_AddText(text);
|
_AddText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -999,51 +999,13 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
private bool _IsMouseOver(int x, int y, CInteraction interact)
|
private bool _IsMouseOver(int x, int y, CInteraction interact)
|
||||||
{
|
{
|
||||||
switch (interact.Type)
|
bool result = CHelper.IsInBounds(_GetRect(interact.Num), x, y);
|
||||||
|
if (result)
|
||||||
|
return true;
|
||||||
|
if (interact.Type == EType.SelectSlide)
|
||||||
{
|
{
|
||||||
case EType.Button:
|
return CHelper.IsInBounds(_SelectSlides[interact.Num].RectArrowLeft, x, y) ||
|
||||||
if (CHelper.IsInBounds(_Buttons[interact.Num].Rect, x, y))
|
CHelper.IsInBounds(_SelectSlides[interact.Num].RectArrowRight, x, y);
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.SelectSlide:
|
|
||||||
if (CHelper.IsInBounds(_SelectSlides[interact.Num].Rect, x, y) ||
|
|
||||||
CHelper.IsInBounds(_SelectSlides[interact.Num].RectArrowLeft, x, y) ||
|
|
||||||
CHelper.IsInBounds(_SelectSlides[interact.Num].RectArrowRight, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.Static:
|
|
||||||
if (CHelper.IsInBounds(_Statics[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.Text:
|
|
||||||
RectangleF bounds = CBase.Fonts.GetTextBounds(_Texts[interact.Num]);
|
|
||||||
if (CHelper.IsInBounds(new SRectF(_Texts[interact.Num].X, _Texts[interact.Num].Y, bounds.Width, bounds.Height, _Texts[interact.Num].Z), x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.SongMenu:
|
|
||||||
if (CHelper.IsInBounds(_SongMenus[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.Lyric:
|
|
||||||
if (CHelper.IsInBounds(_Lyrics[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.NameSelection:
|
|
||||||
if (CHelper.IsInBounds(_NameSelections[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.Equalizer:
|
|
||||||
if (CHelper.IsInBounds(_Equalizers[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.Playlist:
|
|
||||||
if (CHelper.IsInBounds(_Playlists[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
case EType.ParticleEffect:
|
|
||||||
if (CHelper.IsInBounds(_ParticleEffects[interact.Num].Rect, x, y))
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1634,7 +1596,7 @@ namespace VocaluxeLib.Menu
|
|||||||
return _Statics[_Interactions[interaction].Num].Rect;
|
return _Statics[_Interactions[interaction].Num].Rect;
|
||||||
|
|
||||||
case EType.Text:
|
case EType.Text:
|
||||||
return _Texts[_Interactions[interaction].Num].Bounds;
|
return _Texts[_Interactions[interaction].Num].Rect;
|
||||||
|
|
||||||
case EType.SongMenu:
|
case EType.SongMenu:
|
||||||
return _SongMenus[_Interactions[interaction].Num].Rect;
|
return _SongMenus[_Interactions[interaction].Num].Rect;
|
||||||
|
|||||||
+28
-74
@@ -32,24 +32,6 @@ namespace VocaluxeLib.Menu
|
|||||||
public string SelColorName; //for Buttons
|
public string SelColorName; //for Buttons
|
||||||
}
|
}
|
||||||
|
|
||||||
struct STextPosition
|
|
||||||
{
|
|
||||||
public float X;
|
|
||||||
public float Y;
|
|
||||||
public float TextHeight;
|
|
||||||
public float Width;
|
|
||||||
public float Height;
|
|
||||||
|
|
||||||
public STextPosition(float initVal)
|
|
||||||
{
|
|
||||||
X = initVal;
|
|
||||||
Y = initVal;
|
|
||||||
TextHeight = initVal;
|
|
||||||
Width = initVal;
|
|
||||||
Height = initVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CText : IMenuElement
|
public class CText : IMenuElement
|
||||||
{
|
{
|
||||||
private SThemeText _Theme;
|
private SThemeText _Theme;
|
||||||
@@ -65,8 +47,6 @@ namespace VocaluxeLib.Menu
|
|||||||
private bool _ButtonText;
|
private bool _ButtonText;
|
||||||
private bool _PositionNeedsUpdate = true;
|
private bool _PositionNeedsUpdate = true;
|
||||||
|
|
||||||
private STextPosition _DrawPosition = new STextPosition(0);
|
|
||||||
|
|
||||||
private float _X;
|
private float _X;
|
||||||
public float X
|
public float X
|
||||||
{
|
{
|
||||||
@@ -127,28 +107,6 @@ namespace VocaluxeLib.Menu
|
|||||||
if (Math.Abs(_MaxWidth - value) > 0.01)
|
if (Math.Abs(_MaxWidth - value) > 0.01)
|
||||||
{
|
{
|
||||||
_MaxWidth = value;
|
_MaxWidth = value;
|
||||||
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
if (_MaxWidth > 0)
|
|
||||||
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), _MaxWidth, 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
else
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), 3f * CBase.Settings.GetRenderW(), 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
|
|
||||||
_PositionNeedsUpdate = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private SRectF _Bounds;
|
|
||||||
public SRectF Bounds
|
|
||||||
{
|
|
||||||
get { return _Bounds; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (Math.Abs(_Bounds.X - value.X) > 0.01 || Math.Abs(_Bounds.Y - value.Y) > 0.01 || Math.Abs(_Bounds.W - value.W) > 0.01 || Math.Abs(_Bounds.H - value.H) > 0.01 ||
|
|
||||||
Math.Abs(_Bounds.Z - value.Z) > 0.01)
|
|
||||||
{
|
|
||||||
_Bounds = value;
|
|
||||||
_PositionNeedsUpdate = true;
|
_PositionNeedsUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -210,6 +168,20 @@ namespace VocaluxeLib.Menu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Do NOT read/write this anywhere but in _UpdateTextPosition!
|
||||||
|
/// </summary>
|
||||||
|
private SRectF _Rect;
|
||||||
|
public SRectF Rect
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_PositionNeedsUpdate)
|
||||||
|
_UpdateTextPosition();
|
||||||
|
return _Rect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public SColorF Color; //normal Color
|
public SColorF Color; //normal Color
|
||||||
public SColorF SelColor; //selected Color for Buttons
|
public SColorF SelColor; //selected Color for Buttons
|
||||||
|
|
||||||
@@ -287,7 +259,6 @@ namespace VocaluxeLib.Menu
|
|||||||
_Z = text._Z;
|
_Z = text._Z;
|
||||||
_Height = text._Height;
|
_Height = text._Height;
|
||||||
_MaxWidth = text._MaxWidth;
|
_MaxWidth = text._MaxWidth;
|
||||||
_Bounds = new SRectF(text._Bounds);
|
|
||||||
_Align = text._Align;
|
_Align = text._Align;
|
||||||
_HAlign = text._HAlign;
|
_HAlign = text._HAlign;
|
||||||
_Style = text._Style;
|
_Style = text._Style;
|
||||||
@@ -332,13 +303,6 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
Selected = false;
|
Selected = false;
|
||||||
|
|
||||||
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
if (MaxWidth > 0)
|
|
||||||
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), MaxWidth, 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
else
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), 3f * CBase.Settings.GetRenderW(), 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
|
|
||||||
ReflectionSpace = rspace;
|
ReflectionSpace = rspace;
|
||||||
ReflectionHeight = rheight;
|
ReflectionHeight = rheight;
|
||||||
}
|
}
|
||||||
@@ -403,16 +367,7 @@ namespace VocaluxeLib.Menu
|
|||||||
_PositionNeedsUpdate = true;
|
_PositionNeedsUpdate = true;
|
||||||
|
|
||||||
if (_ThemeLoaded)
|
if (_ThemeLoaded)
|
||||||
{
|
|
||||||
LoadTextures();
|
LoadTextures();
|
||||||
|
|
||||||
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
if (MaxWidth > 0)
|
|
||||||
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), MaxWidth, 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
else
|
|
||||||
Bounds = new SRectF(-CBase.Settings.GetRenderW(), -CBase.Settings.GetRenderH(), 3f * CBase.Settings.GetRenderW(), 3f * CBase.Settings.GetRenderH(), 0f);
|
|
||||||
}
|
|
||||||
return _ThemeLoaded;
|
return _ThemeLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,7 +475,7 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
SColorF color = new SColorF(currentColor.R, currentColor.G, currentColor.B, currentColor.A * Alpha);
|
SColorF color = new SColorF(currentColor.R, currentColor.G, currentColor.B, currentColor.A * Alpha);
|
||||||
|
|
||||||
CBase.Fonts.DrawText(_Text, _DrawPosition.TextHeight, _DrawPosition.X, _DrawPosition.Y, Z, color);
|
CBase.Fonts.DrawText(_Text, Rect.H, Rect.X, Rect.Y, Z, color);
|
||||||
|
|
||||||
if (ReflectionHeight > 0)
|
if (ReflectionHeight > 0)
|
||||||
{
|
{
|
||||||
@@ -528,23 +483,23 @@ namespace VocaluxeLib.Menu
|
|||||||
switch (HAlign)
|
switch (HAlign)
|
||||||
{
|
{
|
||||||
case EHAlignment.Top:
|
case EHAlignment.Top:
|
||||||
factor = (Height - _DrawPosition.TextHeight) * 1.5f;
|
factor = (Height - Rect.H) * 1.5f;
|
||||||
break;
|
break;
|
||||||
case EHAlignment.Center:
|
case EHAlignment.Center:
|
||||||
factor = (Height - _DrawPosition.TextHeight) * 1.0f;
|
factor = (Height - Rect.H) * 1.0f;
|
||||||
break;
|
break;
|
||||||
case EHAlignment.Bottom:
|
case EHAlignment.Bottom:
|
||||||
factor = (Height - _DrawPosition.TextHeight) * 0.5f;
|
factor = (Height - Rect.H) * 0.5f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
CBase.Fonts.DrawTextReflection(_Text, _DrawPosition.TextHeight, _DrawPosition.X, _DrawPosition.Y, Z, color, ReflectionSpace + factor, ReflectionHeight);
|
CBase.Fonts.DrawTextReflection(_Text, Rect.H, Rect.X, Rect.Y, Z, color, ReflectionSpace + factor, ReflectionHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Selected && (CBase.Settings.GetGameState() == EGameState.EditTheme))
|
if (Selected && (CBase.Settings.GetGameState() == EGameState.EditTheme))
|
||||||
{
|
{
|
||||||
CBase.Drawing.DrawColor(
|
CBase.Drawing.DrawColor(
|
||||||
new SColorF(0.5f, 1f, 0.5f, 0.5f * CBase.Graphics.GetGlobalAlpha()),
|
new SColorF(0.5f, 1f, 0.5f, 0.5f * CBase.Graphics.GetGlobalAlpha()),
|
||||||
new SRectF(_DrawPosition.X, _DrawPosition.Y, _DrawPosition.Width, _DrawPosition.Height, Z)
|
new SRectF(Rect.X, Rect.Y, Rect.W, Rect.H, Z)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -599,9 +554,9 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
RectangleF bounds = CBase.Fonts.GetTextBounds(this);
|
RectangleF bounds = CBase.Fonts.GetTextBounds(this);
|
||||||
|
|
||||||
if (bounds.Width > Bounds.W && Bounds.W > 0f && bounds.Width > 0f)
|
if (bounds.Width > MaxWidth && MaxWidth > 0f && bounds.Width > 0f)
|
||||||
{
|
{
|
||||||
float factor = Bounds.W / bounds.Width;
|
float factor = MaxWidth / bounds.Width;
|
||||||
float step = h * (1 - factor);
|
float step = h * (1 - factor);
|
||||||
h *= factor;
|
h *= factor;
|
||||||
switch (HAlign)
|
switch (HAlign)
|
||||||
@@ -693,9 +648,9 @@ namespace VocaluxeLib.Menu
|
|||||||
float y = Y;
|
float y = Y;
|
||||||
RectangleF bounds = CBase.Fonts.GetTextBounds(this);
|
RectangleF bounds = CBase.Fonts.GetTextBounds(this);
|
||||||
|
|
||||||
if (bounds.Width > Bounds.W && Bounds.W > 0f && bounds.Width > 0f)
|
if (bounds.Width > MaxWidth && MaxWidth > 0f && bounds.Width > 0f)
|
||||||
{
|
{
|
||||||
float factor = Bounds.W / bounds.Width;
|
float factor = MaxWidth / bounds.Width;
|
||||||
float step = h * (1 - factor);
|
float step = h * (1 - factor);
|
||||||
h *= factor;
|
h *= factor;
|
||||||
switch (HAlign)
|
switch (HAlign)
|
||||||
@@ -725,11 +680,10 @@ namespace VocaluxeLib.Menu
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_DrawPosition.X = x;
|
_Rect.X = x;
|
||||||
_DrawPosition.Y = y;
|
_Rect.Y = y;
|
||||||
_DrawPosition.TextHeight = h;
|
_Rect.W = bounds.Width;
|
||||||
_DrawPosition.Width = bounds.Width;
|
_Rect.H = bounds.Height;
|
||||||
_DrawPosition.Height = bounds.Height;
|
|
||||||
|
|
||||||
_PositionNeedsUpdate = false;
|
_PositionNeedsUpdate = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user