mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-10 10:41:50 +00:00
Proper handling of mouse over timeline view.
This fixes: - Dead zones between header, frame sets and the rest of timeline display. - One-frame frame set position lag when panning the view with mouse over zones region of timeline.
This commit is contained in:
parent
f37a324a9e
commit
ff5daf9df7
@ -1876,7 +1876,7 @@ const char* View::GetFrameText( const FrameData& fd, int i, uint64_t ftime, uint
|
||||
return buf;
|
||||
}
|
||||
|
||||
bool View::DrawZoneFramesHeader()
|
||||
void View::DrawZoneFramesHeader()
|
||||
{
|
||||
const auto wpos = ImGui::GetCursorScreenPos();
|
||||
const auto w = ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ScrollbarSize;
|
||||
@ -1887,13 +1887,10 @@ bool View::DrawZoneFramesHeader()
|
||||
const auto ty05 = round( ty * 0.5f );
|
||||
|
||||
ImGui::InvisibleButton( "##zoneFrames", ImVec2( w, ty * 1.5f ) );
|
||||
bool hover = ImGui::IsItemHovered();
|
||||
|
||||
auto timespan = m_vd.zvEnd - m_vd.zvStart;
|
||||
auto pxns = w / double( timespan );
|
||||
|
||||
if( hover ) HandleZoneViewMouse( timespan, wpos, w, pxns );
|
||||
|
||||
{
|
||||
const auto nspx = 1.0 / pxns;
|
||||
const auto scale = std::max( 0.0, round( log10( nspx ) + 2 ) );
|
||||
@ -1944,8 +1941,6 @@ bool View::DrawZoneFramesHeader()
|
||||
tt += step;
|
||||
}
|
||||
}
|
||||
|
||||
return hover;
|
||||
}
|
||||
|
||||
static uint32_t DarkenColor( uint32_t color )
|
||||
@ -2016,7 +2011,7 @@ static uint32_t GetColorMuted( uint32_t color, bool active )
|
||||
}
|
||||
}
|
||||
|
||||
bool View::DrawZoneFrames( const FrameData& frames )
|
||||
void View::DrawZoneFrames( const FrameData& frames )
|
||||
{
|
||||
const auto wpos = ImGui::GetCursorScreenPos();
|
||||
const auto w = ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ScrollbarSize;
|
||||
@ -2032,12 +2027,10 @@ bool View::DrawZoneFrames( const FrameData& frames )
|
||||
auto timespan = m_vd.zvEnd - m_vd.zvStart;
|
||||
auto pxns = w / double( timespan );
|
||||
|
||||
if( hover ) HandleZoneViewMouse( timespan, wpos, w, pxns );
|
||||
|
||||
const auto nspx = 1.0 / pxns;
|
||||
|
||||
const std::pair <int, int> zrange = m_worker.GetFrameRange( frames, m_vd.zvStart, m_vd.zvEnd );
|
||||
if( zrange.first < 0 ) return hover;
|
||||
if( zrange.first < 0 ) return;
|
||||
|
||||
int64_t prev = -1;
|
||||
int64_t prevEnd = -1;
|
||||
@ -2248,8 +2241,6 @@ bool View::DrawZoneFrames( const FrameData& frames )
|
||||
m_frames = &frames;
|
||||
}
|
||||
}
|
||||
|
||||
return hover;
|
||||
}
|
||||
|
||||
static float AdjustThreadPosition( View::VisData& vis, float wy, int& offset )
|
||||
@ -2333,13 +2324,21 @@ void View::DrawZones()
|
||||
}
|
||||
}
|
||||
|
||||
bool drawMouseLine = DrawZoneFramesHeader();
|
||||
const auto winpos = ImGui::GetWindowPos();
|
||||
const auto winsize = ImGui::GetWindowSize();
|
||||
const bool drawMouseLine = ImGui::IsMouseHoveringRect( winpos, winpos + winsize, false );
|
||||
if( drawMouseLine )
|
||||
{
|
||||
HandleZoneViewMouse( timespan, ImGui::GetCursorScreenPos(), w, pxns );
|
||||
}
|
||||
|
||||
DrawZoneFramesHeader();
|
||||
auto& frames = m_worker.GetFrames();
|
||||
for( auto fd : frames )
|
||||
{
|
||||
if( Vis( fd ).visible )
|
||||
{
|
||||
drawMouseLine |= DrawZoneFrames( *fd );
|
||||
DrawZoneFrames( *fd );
|
||||
}
|
||||
}
|
||||
|
||||
@ -2355,12 +2354,6 @@ void View::DrawZones()
|
||||
bool hover = ImGui::IsItemHovered();
|
||||
draw = ImGui::GetWindowDrawList();
|
||||
|
||||
if( hover )
|
||||
{
|
||||
drawMouseLine = true;
|
||||
HandleZoneViewMouse( timespan, wpos, w, pxns );
|
||||
}
|
||||
|
||||
const auto nspx = 1.0 / pxns;
|
||||
|
||||
const auto ty = ImGui::GetFontSize();
|
||||
|
@ -133,8 +133,8 @@ private:
|
||||
void DrawNotificationArea();
|
||||
bool DrawConnection();
|
||||
void DrawFrames();
|
||||
bool DrawZoneFramesHeader();
|
||||
bool DrawZoneFrames( const FrameData& frames );
|
||||
void DrawZoneFramesHeader();
|
||||
void DrawZoneFrames( const FrameData& frames );
|
||||
void DrawZones();
|
||||
void DrawContextSwitches( const ContextSwitch* ctx, bool hover, double pxns, int64_t nspx, const ImVec2& wpos, int offset, int endOffset );
|
||||
void DrawSamples( const Vector<SampleData>& vec, bool hover, double pxns, int64_t nspx, const ImVec2& wpos, int offset );
|
||||
|
Loading…
Reference in New Issue
Block a user