87 lines
1.7 KiB
C++
87 lines
1.7 KiB
C++
#ifndef MENUPLUSPROXY_H
|
|
#define MENUPLUSPROXY_H
|
|
|
|
#include <QWidget>
|
|
#include <QGraphicsDropShadowEffect>
|
|
#include <cmath>
|
|
|
|
class MenuPlusProxy : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(qreal xScale WRITE setXScale READ xScale)
|
|
Q_PROPERTY(qreal yScale WRITE setYScale READ yScale)
|
|
Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity)
|
|
|
|
public:
|
|
MenuPlusProxy(QWidget *source, QGraphicsDropShadowEffect *effect, QWidget *parent = 0);
|
|
~MenuPlusProxy();
|
|
|
|
QSize sizeHint() const Q_DECL_OVERRIDE;
|
|
|
|
inline void setXScale(qreal sx);
|
|
inline qreal xScale() const;
|
|
|
|
inline void setYScale(qreal sy);
|
|
inline qreal yScale() const;
|
|
|
|
inline void setOpacity(qreal opacity);
|
|
inline qreal opacity() const;
|
|
|
|
signals:
|
|
void expand();
|
|
void collapse();
|
|
|
|
protected:
|
|
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(MenuPlusProxy)
|
|
|
|
QWidget *const m_source;
|
|
QGraphicsDropShadowEffect *const m_effect;
|
|
qreal m_sx;
|
|
qreal m_sy;
|
|
qreal m_opacity;
|
|
};
|
|
|
|
inline void MenuPlusProxy::setXScale(qreal sx)
|
|
{
|
|
m_sx = sx;
|
|
update();
|
|
m_effect->update();
|
|
}
|
|
|
|
inline qreal MenuPlusProxy::xScale() const
|
|
{
|
|
return m_sx;
|
|
}
|
|
|
|
inline void MenuPlusProxy::setYScale(qreal sy)
|
|
{
|
|
m_sy = sy;
|
|
update();
|
|
m_effect->update();
|
|
}
|
|
|
|
inline qreal MenuPlusProxy::yScale() const
|
|
{
|
|
return m_sy;
|
|
}
|
|
|
|
inline void MenuPlusProxy::setOpacity(qreal opacity)
|
|
{
|
|
m_opacity = opacity;
|
|
const qreal alpha = 100*(pow(opacity, 5));
|
|
m_effect->setColor(QColor(0, 0, 0, alpha));
|
|
m_effect->update();
|
|
update();
|
|
}
|
|
|
|
inline qreal MenuPlusProxy::opacity() const
|
|
{
|
|
return m_opacity;
|
|
}
|
|
|
|
#endif // MENUPLUSPROXY_H
|