mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add support for RichResourceText in RDLabel
This commit is contained in:
@@ -24,6 +24,8 @@
|
||||
|
||||
#include "RDLabel.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include "Code/QRDUtils.h"
|
||||
|
||||
RDLabel::RDLabel(QWidget *parent) : QLabel(parent)
|
||||
{
|
||||
@@ -33,26 +35,58 @@ RDLabel::~RDLabel()
|
||||
{
|
||||
}
|
||||
|
||||
QSize RDLabel::sizeHint() const
|
||||
void RDLabel::modifySizeHint(QSize &sz) const
|
||||
{
|
||||
QSize sz = QLabel::sizeHint();
|
||||
|
||||
if(m_preserveRatio)
|
||||
sz.setWidth(sz.width() - contentsMargins().left() - contentsMargins().right());
|
||||
|
||||
if(m_variant.isValid())
|
||||
sz.setWidth(qMax(RichResourceTextWidthHint(this, m_variant) + contentsMargins().left() +
|
||||
contentsMargins().right() + margin() * 2,
|
||||
sz.width()));
|
||||
}
|
||||
|
||||
QSize RDLabel::sizeHint() const
|
||||
{
|
||||
QSize sz = QLabel::sizeHint();
|
||||
modifySizeHint(sz);
|
||||
return sz;
|
||||
}
|
||||
|
||||
QSize RDLabel::minimumSizeHint() const
|
||||
{
|
||||
QSize sz = QLabel::minimumSizeHint();
|
||||
|
||||
if(m_preserveRatio)
|
||||
sz.setWidth(sz.width() - contentsMargins().left() - contentsMargins().right());
|
||||
|
||||
modifySizeHint(sz);
|
||||
return sz;
|
||||
}
|
||||
|
||||
void RDLabel::setText(const QString &text)
|
||||
{
|
||||
m_variant = text;
|
||||
RichResourceTextInitialise(m_variant);
|
||||
if(RichResourceTextCheck(m_variant))
|
||||
{
|
||||
setMouseTracking(true);
|
||||
m_hover = false;
|
||||
QLabel::setText(QString());
|
||||
updateGeometry();
|
||||
repaint();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_variant = QVariant();
|
||||
QLabel::setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
QString RDLabel::text() const
|
||||
{
|
||||
if(m_variant.isValid())
|
||||
return m_variant.toString();
|
||||
|
||||
return QLabel::text();
|
||||
}
|
||||
|
||||
void RDLabel::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
emit(clicked(event));
|
||||
@@ -60,10 +94,36 @@ void RDLabel::mousePressEvent(QMouseEvent *event)
|
||||
QLabel::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void RDLabel::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
if(m_variant.isValid())
|
||||
{
|
||||
RichResourceTextMouseEvent(this, m_variant, rect(), event);
|
||||
return;
|
||||
}
|
||||
|
||||
QLabel::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void RDLabel::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
emit(mouseMoved(event));
|
||||
|
||||
if(m_variant.isValid())
|
||||
{
|
||||
bool hover = RichResourceTextMouseEvent(this, m_variant, rect(), event);
|
||||
if(hover)
|
||||
setCursor(QCursor(Qt::PointingHandCursor));
|
||||
else
|
||||
unsetCursor();
|
||||
|
||||
if(m_hover != hover)
|
||||
update();
|
||||
m_hover = hover;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
QLabel::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
@@ -78,6 +138,13 @@ void RDLabel::leaveEvent(QEvent *event)
|
||||
{
|
||||
emit(leave());
|
||||
|
||||
if(m_variant.isValid())
|
||||
{
|
||||
unsetCursor();
|
||||
repaint();
|
||||
m_hover = false;
|
||||
}
|
||||
|
||||
QLabel::leaveEvent(event);
|
||||
}
|
||||
|
||||
@@ -119,3 +186,21 @@ void RDLabel::changeEvent(QEvent *event)
|
||||
|
||||
QLabel::changeEvent(event);
|
||||
}
|
||||
|
||||
void RDLabel::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QLabel::paintEvent(event);
|
||||
|
||||
if(m_variant.isValid())
|
||||
{
|
||||
QPainter painter(this);
|
||||
|
||||
QPoint pos = mapFromGlobal(QCursor::pos());
|
||||
|
||||
QRect r = rect();
|
||||
r.setLeft(r.left() + contentsMargins().left() + margin());
|
||||
r.setRight(r.right() - contentsMargins().right() - margin());
|
||||
|
||||
RichResourceTextPaint(this, &painter, r, font(), palette(), r.contains(pos), pos, m_variant);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,9 @@ public:
|
||||
QSize sizeHint() const override;
|
||||
QSize minimumSizeHint() const override;
|
||||
|
||||
void setText(const QString &text);
|
||||
QString text() const;
|
||||
|
||||
void setPreserveAspectRatio(bool preserve) { m_preserveRatio = preserve; }
|
||||
bool preserveAspectRatio() { return m_preserveRatio; }
|
||||
signals:
|
||||
@@ -49,11 +52,18 @@ public slots:
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void mouseReleaseEvent(QMouseEvent *event) override;
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
||||
void leaveEvent(QEvent *event) override;
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
void changeEvent(QEvent *event) override;
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
void modifySizeHint(QSize &sz) const;
|
||||
|
||||
bool m_preserveRatio = false;
|
||||
bool m_hover = false;
|
||||
|
||||
QVariant m_variant;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user