mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 16:18:42 +00:00
Clip the Meter Widgets to the visible portion of the Video Window (#3462)
When the video widget is scrolled, the MeterWidget windows appeared on top of the Main Window user interface. Now the visible portion of the Video Window is tracked and used as a clipping region. This avoids blocking the controls on bottom toolbar.
This commit is contained in:
@@ -70,6 +70,7 @@ void MeterWidget::SetRelativePos(float RelativePosX, float RelativePosY)
|
||||
|
||||
void MeterWidget::AdjustSizePos()
|
||||
{
|
||||
// Compute the size and position relative to its parent
|
||||
QPoint p;
|
||||
if (m_container->windowFlags() & Qt::Window)
|
||||
p = m_container->pos();
|
||||
@@ -80,6 +81,11 @@ void MeterWidget::AdjustSizePos()
|
||||
m_PosY = p.y() + m_container->height() * m_RelativePosY - m_Height/2;
|
||||
move(m_PosX, m_PosY);
|
||||
adjustSize();
|
||||
|
||||
// Translate the Video Container visible region to our coordinate for clipping
|
||||
QPoint vp = m_VideoContainer->pos();
|
||||
videoContainerRegion = m_VideoContainer->visibleRegion();
|
||||
videoContainerRegion.translate(mapFromGlobal(m_VideoContainer->mapToGlobal(vp)) - vp);
|
||||
}
|
||||
|
||||
void MeterWidget::ComputeSize()
|
||||
@@ -116,6 +122,7 @@ void MeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
painter.setPen(m_OutlinePen);
|
||||
@@ -151,6 +158,7 @@ void TextMeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
//draw background
|
||||
@@ -196,6 +204,7 @@ void CircularIndicatorMeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
// define scale and location
|
||||
painter.translate(m_Width / 2, m_Height / 2);
|
||||
@@ -242,6 +251,7 @@ void CircularBargraphMeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
//draw bargraph
|
||||
@@ -277,6 +287,7 @@ void NeedleMeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
//draw background
|
||||
@@ -339,6 +350,7 @@ void ElevationMeterWidget::paintEvent(QPaintEvent* paintevent)
|
||||
|
||||
//painter
|
||||
QPainter painter(this);
|
||||
painter.setClipRegion(videoContainerRegion);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// Find min/max
|
||||
|
||||
@@ -54,6 +54,8 @@ class MeterWidget : public QWidget
|
||||
QString m_Name;
|
||||
QWidget* m_container;
|
||||
QString m_Source;
|
||||
QWidget* m_VideoContainer;
|
||||
QRegion videoContainerRegion;
|
||||
float m_RelativeWidth, m_RelativeHeight;
|
||||
float m_RelativePosX, m_RelativePosY;
|
||||
int m_PosX, m_PosY, m_Width, m_Height;
|
||||
|
||||
@@ -50,6 +50,7 @@ void VideoLayoutParser::SetDefaultValues()
|
||||
meterWidget->m_BackgroundColor = QColor(100,100,100,0);
|
||||
meterWidget->m_MainFont = QFont(meterWidget->font().family(), 64);
|
||||
meterWidget->m_AltFont = QFont(meterWidget->font().family(), 48);
|
||||
meterWidget->m_VideoContainer = VideoContainer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user