164 lines
4.1 KiB
C++
164 lines
4.1 KiB
C++
#include "IrregularButton.h"
|
|
|
|
#include <QCoreApplication>
|
|
|
|
#include "MainWindow.h"
|
|
|
|
#include "TownImageWidget.h"
|
|
|
|
|
|
IrregularButton::IrregularButton(QWidget* parent /*= nullptr*/)
|
|
: QPushButton(parent)
|
|
{
|
|
setObjectName("IrregularButton");
|
|
|
|
InitParentWidgetSlot(parent);
|
|
//setAttribute(Qt::WA_TranslucentBackground);
|
|
}
|
|
|
|
IrregularButton::IrregularButton(const QString& text, QWidget* parent /*= nullptr*/)
|
|
: QPushButton(text, parent) {
|
|
setObjectName("IrregularButton");
|
|
InitParentWidgetSlot(parent);
|
|
//setAttribute(Qt::WA_TranslucentBackground);
|
|
}
|
|
|
|
IrregularButton::IrregularButton(const QIcon& icon, const QString& text, QWidget* parent /*= nullptr*/)
|
|
: QPushButton(icon, text, parent)
|
|
{
|
|
setObjectName("IrregularButton");
|
|
InitParentWidgetSlot(parent);
|
|
//setAttribute(Qt::WA_TranslucentBackground);
|
|
}
|
|
|
|
void IrregularButton::OnEmitEnter() {
|
|
auto dt = static_cast<int32_t>(m_detailedType);
|
|
MediaInfo item;
|
|
if (!MainWindow::Get().GetMediaInfo(dt, m_btnName, item)) {
|
|
qDebug() << "not get item: " << dt << " or text: " << m_btnName;
|
|
return;
|
|
}
|
|
|
|
int x = 0, y = 0;
|
|
QRect rect = geometry();
|
|
if (item.start == 0) {
|
|
x = rect.width() + rect.x();
|
|
y = rect.y() + rect.height() / 2;
|
|
}
|
|
else if (item.start == 1) {
|
|
x = rect.x() + rect.width() / 2;
|
|
y = rect.y(); // +rect.height() / 2;
|
|
}
|
|
else {
|
|
x = rect.x();
|
|
y = rect.y() + rect.height() / 2;
|
|
}
|
|
|
|
QPointF end = GetEndPoint(item.end);
|
|
emit Enter(QPointF(x, y), end);
|
|
}
|
|
|
|
//
|
|
//void IrregularButton::enterEvent(QEnterEvent* event) {
|
|
// QPushButton::enterEvent(event);
|
|
//
|
|
// auto dt = static_cast<int32_t>(m_detailedType);
|
|
// MediaInfo item;
|
|
// if (!MainWindow::Get().GetMediaInfo(dt, m_btnName, item)) {
|
|
// qDebug() << "not get item: " << dt << " or text: " << m_btnName;
|
|
// return;
|
|
// }
|
|
//
|
|
// int x = 0, y = 0;
|
|
// QRect rect = geometry();
|
|
// if (item.start == 0) {
|
|
// x = rect.width() + rect.x();
|
|
// y = rect.y() + rect.height() / 2;
|
|
// }
|
|
// else if (item.start == 1) {
|
|
// x = rect.x() + rect.width() / 2;
|
|
// y = rect.y(); // +rect.height() / 2;
|
|
// }
|
|
// else {
|
|
// x = rect.x();
|
|
// y = rect.y() + rect.height() / 2;
|
|
// }
|
|
//
|
|
// QPointF end = GetEndPoint(item.end);
|
|
// emit Enter(QPointF(x, y), end);
|
|
//}
|
|
//
|
|
//void IrregularButton::leaveEvent(QEvent* event) {
|
|
// QPushButton::leaveEvent(event);
|
|
// emit Leave();
|
|
//}
|
|
|
|
bool IrregularButton::event(QEvent* e) {
|
|
switch (e->type()) {
|
|
case QEvent::TouchBegin:
|
|
{
|
|
m_bTouchEnd = false;
|
|
QMouseEvent mouseEvent(QEvent::MouseButtonPress, QPointF(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
|
QCoreApplication::sendEvent(this, &mouseEvent);
|
|
e->accept();
|
|
return true;
|
|
} break;
|
|
case QEvent::TouchEnd:
|
|
{
|
|
QMouseEvent mouseEvent(QEvent::MouseButtonRelease, QPointF(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
|
|
QCoreApplication::sendEvent(this, &mouseEvent);
|
|
m_bTouchEnd = true;
|
|
e->accept();
|
|
return true;
|
|
} break;
|
|
case QEvent::MouseButtonPress:
|
|
case QEvent::MouseButtonRelease:
|
|
{
|
|
if (m_bTouchEnd) {
|
|
e->accept();
|
|
return true;
|
|
}
|
|
}break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return QPushButton::event(e);
|
|
}
|
|
|
|
void IrregularButton::mousePressEvent(QMouseEvent* e) {
|
|
QPushButton::mousePressEvent(e);
|
|
OnEmitEnter();
|
|
update();
|
|
}
|
|
|
|
void IrregularButton::mouseReleaseEvent(QMouseEvent* e) {
|
|
emit Leave();
|
|
update();
|
|
QPushButton::mouseReleaseEvent(e);
|
|
|
|
MainWindow::Get().PlayAudio();
|
|
}
|
|
|
|
QPointF IrregularButton::GetEndPoint(const QPointF& target) {
|
|
QRect rect = geometry();
|
|
const QRect& widgetRect = parentWidget()->geometry();
|
|
QPoint pt = widgetRect.topLeft();
|
|
QPointF ptf = target;
|
|
auto minValue = [](float x) {
|
|
return x > 0.0f ? x : 0.0f;
|
|
};
|
|
return { minValue(ptf.x()), minValue(ptf.y()) };
|
|
}
|
|
|
|
void IrregularButton::InitParentWidgetSlot(QWidget* parent) {
|
|
TownImageWidget* imageWidget = dynamic_cast<TownImageWidget*>(parent);
|
|
if (nullptr == imageWidget) {
|
|
return;
|
|
}
|
|
|
|
connect(this, &IrregularButton::Enter, imageWidget, &TownImageWidget::OnBeginDraw);
|
|
connect(this, &IrregularButton::Leave, imageWidget, &TownImageWidget::OnEndDraw);
|
|
|
|
}
|