1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Hoverwatch wordwrapping

This commit is contained in:
Brian Fiete 2021-02-01 13:56:17 -08:00
parent ed30e7ad06
commit 142332baaa
3 changed files with 59 additions and 16 deletions

View file

@ -862,6 +862,12 @@ namespace Beefy.gfx
else if (stringEndMode == FontOverflowMode.Wrap)
{
int32 maxChars = (int32)GetCharCountToLength(workingStr, width);
if (maxChars == 0)
{
if (workingStr.IsEmpty)
break;
maxChars = 1;
}
int32 checkIdx = maxChars;
if (checkIdx < workingStr.Length)

View file

@ -332,7 +332,12 @@ namespace Beefy.theme.dark
}
using (g.PushColor(mTextColor ?? DarkTheme.COLOR_TEXT))
g.DrawString(mLabel, labelX, 0, .Left, wantWidth, ((nextContentColumn != -1) || (listView.mEndInEllipsis)) ? .Ellipsis : .Overflow);
{
FontOverflowMode overflowMode = ((nextContentColumn != -1) || (listView.mEndInEllipsis)) ? .Ellipsis : .Overflow;
if (listView.mWordWrap)
overflowMode = .Wrap;
g.DrawString(mLabel, labelX, 0, .Left, wantWidth, overflowMode);
}
}
}
@ -893,6 +898,7 @@ namespace Beefy.theme.dark
public Color mGridLinesColor = 0x0CFFFFFF;
public bool mShowHeader = true;
public bool mEndInEllipsis;
public bool mWordWrap;
public float mLabelX = DarkTheme.sUnitSize;
public float mChildIndent = DarkTheme.sUnitSize;
public float mOpenButtonX = 0;

View file

@ -168,15 +168,22 @@ namespace IDE.ui
public override void Draw(Graphics g)
{
using (g.PushColor(0x80000000))
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.DropShadow), 0, 0, mWidth + GS!(8), mHeight + GS!(8));
using (g.PushColor(0xFFFFFFFF))
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Menu), 0, 0, mWidth, mHeight);
base.Draw(g);
base.Draw(g);
}
public override void DrawAll(Graphics g)
{
using (g.PushColor(0x80000000))
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.DropShadow), 0, 0, mWidth + GS!(8), mHeight + GS!(8));
using (g.PushColor(0xFFFFFFFF))
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Menu), 0, 0, mWidth, mHeight);
using (g.PushClip(0, 0, mWidth - GS!(3), mHeight))
base.DrawAll(g);
}
public override void Update()
{
base.Update();
@ -1029,8 +1036,8 @@ namespace IDE.ui
{
minX = Math.Min(minX, childWidget.mX);
minY = Math.Min(minY, childWidget.mY);
maxX = Math.Max(maxX, childWidget.mX + childWidget.mWidth + 8);
maxY = Math.Max(maxY, childWidget.mY + childWidget.mHeight + 8);
maxX = Math.Max(maxX, childWidget.mX + childWidget.mWidth + GS!(8));
maxY = Math.Max(maxY, childWidget.mY + childWidget.mHeight + GS!(8));
}
mContentWidget.mX = -minX;
@ -1088,6 +1095,8 @@ namespace IDE.ui
bool hasLeftIcon = false;
bool hasRightValues = false;
bool wantWordWrap = false;
listView.mLabelX = GS!(40);
float childHeights = 0;
for (WatchListViewItem listViewItem in listView.GetRoot().mChildItems)
@ -1100,6 +1109,10 @@ namespace IDE.ui
if (listViewItem.mLabel == null)
continue;
if (listViewItem.mWatchEntry.mEvalStr.StartsWith(':'))
wantWordWrap = true;
//nameWidth = Math.Max(nameWidth, font.GetWidth(listViewItem.mLabel));
//TODO:
FontMetrics fontMetrics = .();
@ -1144,7 +1157,7 @@ namespace IDE.ui
listView.mColumns[0].mWidth = nameWidth + listView.mLabelX + GS!(8);
listView.mColumns[1].mWidth = valueWidth + GS!(10);
float width = listView.mColumns[0].mWidth + listView.mColumns[1].mWidth + GS!(8);
float wantWidth = listView.mColumns[0].mWidth + listView.mColumns[1].mWidth + GS!(8);
float height = childHeights + GS!(6);
float maxHeight = font.GetLineSpacing() * 12 + 6.001f;
@ -1201,7 +1214,7 @@ namespace IDE.ui
});
}
height = maxHeight;
width += GS!(20);
wantWidth += GS!(20);
}
int workspaceX;
@ -1220,7 +1233,7 @@ namespace IDE.ui
maxWidth = Math.Min(maxWidth, mTextPanel.mWidgetWindow.mWindowWidth);
}
width = Math.Min(width, maxWidth);
var useWidth = Math.Min(wantWidth, maxWidth);
if (!listView.mIsReversed)
{
@ -1237,12 +1250,30 @@ namespace IDE.ui
if (wantsHorzResize)
{
if (mWidgetWindow != null)
width = Math.Max(width, mWidgetWindow.mMouseX - popupX + GS!(12));
useWidth = Math.Max(useWidth, mWidgetWindow.mMouseX - popupX + GS!(12));
}
else
width = listView.mWidth;
useWidth = listView.mWidth;
listView.Resize(popupX, popupY, width, height);
if ((wantWordWrap) && (useWidth < wantWidth))
{
for (WatchListViewItem listViewItem in listView.GetRoot().mChildItems)
{
if (listViewItem.mLabel == null)
continue;
listView.mWordWrap = true;
FontMetrics fontMetrics = .();
float nameHeight = font.Draw(null, listViewItem.mLabel, 0, 0, -1, useWidth - GS!(32), FontOverflowMode.Wrap, &fontMetrics);
float addHeight = nameHeight - listViewItem.mSelfHeight;
height += addHeight;
}
listView.mColumns[0].mWidth = useWidth - GS!(2);
}
listView.Resize(popupX, popupY, useWidth, height);
ResizeWindow();
}