Fix bounds checking for "dropbox" and "moving disque" if the origin of the work-area is different from (0,0).

This commit is contained in:
LoRd_MuldeR 2011-05-01 00:42:34 +02:00
parent 207a43788e
commit 537dca9a30
4 changed files with 27 additions and 23 deletions

View File

@ -29,8 +29,8 @@
#define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 2
#define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 7
#define VER_LAMEXP_BUILD 469
#define VER_LAMEXP_PATCH 8
#define VER_LAMEXP_BUILD 470
///////////////////////////////////////////////////////////////////////////////
// Tools versions

View File

@ -187,12 +187,12 @@ AboutDialog::AboutDialog(SettingsModel *settings, QWidget *parent, bool firstSta
fourthButton->setMinimumWidth(90);
QPixmap disque(":/images/Disque.png");
m_screenGeometry = QApplication::desktop()->availableGeometry();
QRect screenGeometry = QApplication::desktop()->availableGeometry();
m_disque = new QLabel(this, Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
m_disque->installEventFilter(this);
m_disque->setStyleSheet("background:transparent;");
m_disque->setAttribute(Qt::WA_TranslucentBackground);
m_disque->setGeometry(qrand() % (m_screenGeometry.width() - disque.width()), qrand() % (m_screenGeometry.height() - disque.height()), disque.width(), disque.height());
m_disque->setGeometry(qrand() % (screenGeometry.width() - disque.width()), qrand() % (screenGeometry.height() - disque.height()), disque.width(), disque.height());
m_disque->setPixmap(disque);
m_disque->setWindowOpacity(0.01);
m_disque->show();
@ -493,7 +493,7 @@ void AboutDialog::moveDisque(void)
{
if(m_disqueDelay != _I64_MAX)
{
double delay = static_cast<double>(perfCount.QuadPart) - static_cast<double>(m_disqueDelay);
const double delay = static_cast<double>(perfCount.QuadPart) - static_cast<double>(m_disqueDelay);
delta = max(1, min(128, static_cast<int>(ceil(delay / static_cast<double>(perfFrequ.QuadPart) / 0.00512))));
}
m_disqueDelay = perfCount.QuadPart;
@ -501,32 +501,38 @@ void AboutDialog::moveDisque(void)
if(m_disque)
{
QRect screenGeometry = QApplication::desktop()->availableGeometry();
const int minX = screenGeometry.left();
const int maxX = screenGeometry.width() - m_disque->width() + screenGeometry.left();
const int minY = screenGeometry.top();
const int maxY = screenGeometry.height() - m_disque->height() + screenGeometry.top();
QPoint pos = m_disque->pos();
pos.setX(m_disqueFlags[0] ? pos.x() + delta : pos.x() - delta);
pos.setY(m_disqueFlags[1] ? pos.y() + delta : pos.y() - delta);
if(pos.x() <= 0)
if(pos.x() <= minX)
{
m_disqueFlags[0] = true;
pos.setX(0);
pos.setX(minX);
m_rotateNext = true;
}
else if(pos.x() >= m_screenGeometry.width() - m_disque->width())
else if(pos.x() >= maxX)
{
m_disqueFlags[0] = false;
pos.setX(m_screenGeometry.width() - m_disque->width());
pos.setX(maxX);
m_rotateNext = true;
}
if(pos.y() <= 0)
if(pos.y() <= minY)
{
m_disqueFlags[1] = true;
pos.setY(0);
pos.setY(minY);
m_rotateNext = true;
}
else if(pos.y() >= m_screenGeometry.height()- m_disque->height())
else if(pos.y() >= maxY)
{
m_disqueFlags[1] = false;
pos.setY(m_screenGeometry.height() - m_disque->height());
pos.setY(maxY);
m_rotateNext = true;
}

View File

@ -54,7 +54,6 @@ private:
QLabel *m_disque;
QTimer * m_disqueTimer;
bool m_disqueFlags[2];
QRect m_screenGeometry;
QPixmap *m_cartoon[4];
bool m_rotateNext;
__int64 m_disqueDelay;

View File

@ -116,8 +116,8 @@ void DropBox::showEvent(QShowEvent *event)
if(m_firstShow)
{
m_firstShow = false;
int max_x = screenGeometry.width() - frameGeometry().width();
int max_y = screenGeometry.height() - frameGeometry().height();
int max_x = screenGeometry.width() - frameGeometry().width() + screenGeometry.left();
int max_y = screenGeometry.height() - frameGeometry().height() + screenGeometry.top();
move(max_x, max_y);
QTimer::singleShot(333, this, SLOT(showToolTip()));
}
@ -180,14 +180,13 @@ void DropBox::mouseMoveEvent(QMouseEvent *event)
static const int magnetic = 22;
QRect screenGeometry = QApplication::desktop()->availableGeometry();
int delta_x = m_mouseReferencePoint.x() - event->globalX();
int delta_y = m_mouseReferencePoint.y() - event->globalY();
int max_x = screenGeometry.width() - frameGeometry().width();
int max_y = screenGeometry.height() - frameGeometry().height();
const int delta_x = m_mouseReferencePoint.x() - event->globalX();
const int delta_y = m_mouseReferencePoint.y() - event->globalY();
const int max_x = screenGeometry.width() - frameGeometry().width() + screenGeometry.left();
const int max_y = screenGeometry.height() - frameGeometry().height() + screenGeometry.top();
int new_x = min(max_x, max(0, m_windowReferencePoint.x() - delta_x));
int new_y = min(max_y, max(0, m_windowReferencePoint.y() - delta_y));
int new_x = min(max_x, max(screenGeometry.left(), m_windowReferencePoint.x() - delta_x));
int new_y = min(max_y, max(screenGeometry.top(), m_windowReferencePoint.y() - delta_y));
if(new_x < magnetic)
{