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:
Michel Dagenais
2020-05-26 13:56:11 -04:00
committed by GitHub
parent 4f64b88f0f
commit 0352e19e34
3 changed files with 15 additions and 0 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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;
}
}