mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Merge #6286
6286: Add tooltip to demo seekbar showing the currently hovered time r=Chairn a=Robyt3 When hovering the demo seekbar, show a tooltip with the time at the hovered position. ![screenshot](https://user-images.githubusercontent.com/23437060/212565749-a38951a3-1f08-43a6-b607-02f379b28c52.png) ## Checklist - [X] Tested the change ingame - [X] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test (especially base/) or added coverage to integration test - [ ] Considered possible null pointers and out of bounds array indexing - [ ] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) Co-authored-by: Robert Müller <robytemueller@gmail.com>
This commit is contained in:
commit
4c639a5965
|
@ -339,29 +339,31 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
|
||||
// do seekbar
|
||||
{
|
||||
const float Rounding = 5.0f;
|
||||
|
||||
static int s_SeekBarID = 0;
|
||||
void *pId = &s_SeekBarID;
|
||||
char aBuffer[128];
|
||||
|
||||
// draw seek bar
|
||||
SeekBar.Draw(ColorRGBA(0, 0, 0, 0.5f), IGraphics::CORNER_ALL, 5.0f);
|
||||
SeekBar.Draw(ColorRGBA(0, 0, 0, 0.5f), IGraphics::CORNER_ALL, Rounding);
|
||||
|
||||
// draw filled bar
|
||||
float Amount = CurrentTick / (float)TotalTicks;
|
||||
CUIRect FilledBar = SeekBar;
|
||||
FilledBar.w = 10.0f + (FilledBar.w - 10.0f) * Amount;
|
||||
FilledBar.Draw(ColorRGBA(1, 1, 1, 0.5f), IGraphics::CORNER_ALL, 5.0f);
|
||||
FilledBar.w = 2 * Rounding + (FilledBar.w - 2 * Rounding) * Amount;
|
||||
FilledBar.Draw(ColorRGBA(1, 1, 1, 0.5f), IGraphics::CORNER_ALL, Rounding);
|
||||
|
||||
// draw highlighting
|
||||
if(g_Config.m_ClDemoSliceBegin != -1 && g_Config.m_ClDemoSliceEnd != -1)
|
||||
{
|
||||
float RatioBegin = (g_Config.m_ClDemoSliceBegin - pInfo->m_FirstTick) / (float)TotalTicks;
|
||||
float RatioEnd = (g_Config.m_ClDemoSliceEnd - pInfo->m_FirstTick) / (float)TotalTicks;
|
||||
float Span = ((SeekBar.w - 10.0f) * RatioEnd) - ((SeekBar.w - 10.0f) * RatioBegin);
|
||||
float Span = ((SeekBar.w - 2 * Rounding) * RatioEnd) - ((SeekBar.w - 2 * Rounding) * RatioBegin);
|
||||
Graphics()->TextureClear();
|
||||
Graphics()->QuadsBegin();
|
||||
Graphics()->SetColor(1.0f, 0.0f, 0.0f, 0.25f);
|
||||
IGraphics::CQuadItem QuadItem(10.0f + SeekBar.x + (SeekBar.w - 10.0f) * RatioBegin, SeekBar.y, Span, SeekBar.h);
|
||||
IGraphics::CQuadItem QuadItem(2 * Rounding + SeekBar.x + (SeekBar.w - 2 * Rounding) * RatioBegin, SeekBar.y, Span, SeekBar.h);
|
||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||
Graphics()->QuadsEnd();
|
||||
}
|
||||
|
@ -373,7 +375,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
Graphics()->TextureClear();
|
||||
Graphics()->QuadsBegin();
|
||||
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
IGraphics::CQuadItem QuadItem(8.0f + SeekBar.x + (SeekBar.w - 10.0f) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
IGraphics::CQuadItem QuadItem(2 * Rounding + SeekBar.x + (SeekBar.w - 2 * Rounding) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||
Graphics()->QuadsEnd();
|
||||
}
|
||||
|
@ -386,7 +388,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
Graphics()->TextureClear();
|
||||
Graphics()->QuadsBegin();
|
||||
Graphics()->SetColor(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
IGraphics::CQuadItem QuadItem(10.0f + SeekBar.x + (SeekBar.w - 10.0f) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
IGraphics::CQuadItem QuadItem(2 * Rounding + SeekBar.x + (SeekBar.w - 2 * Rounding) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||
Graphics()->QuadsEnd();
|
||||
}
|
||||
|
@ -398,7 +400,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
Graphics()->TextureClear();
|
||||
Graphics()->QuadsBegin();
|
||||
Graphics()->SetColor(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
IGraphics::CQuadItem QuadItem(10.0f + SeekBar.x + (SeekBar.w - 10.0f) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
IGraphics::CQuadItem QuadItem(2 * Rounding + SeekBar.x + (SeekBar.w - 2 * Rounding) * Ratio, SeekBar.y, UI()->PixelSize(), SeekBar.h);
|
||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||
Graphics()->QuadsEnd();
|
||||
}
|
||||
|
@ -421,7 +423,7 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
else
|
||||
{
|
||||
static float s_PrevAmount = 0.0f;
|
||||
float AmountSeek = (UI()->MouseX() - SeekBar.x) / SeekBar.w;
|
||||
float AmountSeek = clamp((UI()->MouseX() - SeekBar.x - Rounding) / (float)(SeekBar.w - 2 * Rounding), 0.0f, 1.0f);
|
||||
|
||||
if(Input()->ShiftIsPressed())
|
||||
{
|
||||
|
@ -444,7 +446,16 @@ void CMenus::RenderDemoPlayer(CUIRect MainView)
|
|||
else if(UI()->HotItem() == pId)
|
||||
{
|
||||
if(UI()->MouseButton(0))
|
||||
{
|
||||
UI()->SetActiveItem(pId);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int HoveredTick = (int)(clamp((UI()->MouseX() - SeekBar.x - Rounding) / (float)(SeekBar.w - 2 * Rounding), 0.0f, 1.0f) * TotalTicks);
|
||||
static char s_aHoveredTime[32];
|
||||
str_time((int64_t)HoveredTick / SERVER_TICK_SPEED * 100, TIME_HOURS, s_aHoveredTime, sizeof(s_aHoveredTime));
|
||||
GameClient()->m_Tooltips.DoToolTip(pId, &SeekBar, s_aHoveredTime);
|
||||
}
|
||||
}
|
||||
|
||||
if(Inside)
|
||||
|
|
Loading…
Reference in a new issue