91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
#include "rm_widget_drag.h"
|
|
#include <QMouseEvent>
|
|
#include <Windows.h>
|
|
|
|
RMWidgetDrag::RMWidgetDrag(QWidget *target,int titleBarHeight) : QObject(target)
|
|
{
|
|
_target = target;
|
|
_dragStart = false;
|
|
_titleBarHeight = titleBarHeight;
|
|
_target->installEventFilter(this);
|
|
}
|
|
|
|
RMWidgetDrag::~RMWidgetDrag()
|
|
{
|
|
_target->removeEventFilter(this);
|
|
}
|
|
|
|
bool RMWidgetDrag::eventFilter(QObject *o, QEvent*e)
|
|
{
|
|
// Alt+Enter 방지
|
|
if(e->type() == QEvent::WindowActivate)
|
|
{
|
|
//qInfo() << __FUNCTION__ << e->type();
|
|
::RegisterHotKey((HWND)_target->winId(),
|
|
998,
|
|
MOD_ALT | MOD_NOREPEAT,
|
|
VK_RETURN);
|
|
}
|
|
else if (e->type() == QEvent::WindowDeactivate)
|
|
{
|
|
//qInfo() << __FUNCTION__ << e->type();
|
|
::UnregisterHotKey((HWND)_target->winId(),998);
|
|
}
|
|
|
|
Q_UNUSED(o);
|
|
#if (USE_KEY_EVENT_FOR_SEEK)
|
|
if(e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease)
|
|
{
|
|
QKeyEvent* ke = static_cast<QKeyEvent*>(e);
|
|
if(ke->isAutoRepeat() == true)
|
|
{
|
|
return false;
|
|
}
|
|
qInfo() << "KE:" << ((e->type() == QEvent::KeyPress) ? "P" : "R");
|
|
}
|
|
#endif
|
|
|
|
#if (DESIGN_LAYOUT_MODE)
|
|
if( e->type() == QEvent::MouseButtonPress)
|
|
{
|
|
// CHILD 는 적용안됨.. 어..쩔..
|
|
QMouseEvent* me = static_cast<QMouseEvent*>(e);
|
|
qInfo() << me->pos();
|
|
}
|
|
#endif // DESIGN_LAYOUT_MODE
|
|
|
|
if (_target->isMaximized() == false &&
|
|
_target->isFullScreen() == false &&
|
|
(e->type() == QEvent::MouseMove ||
|
|
e->type() == QEvent::MouseButtonPress ||
|
|
e->type() == QEvent::MouseButtonRelease))
|
|
{
|
|
QMouseEvent* me = static_cast<QMouseEvent*>(e);
|
|
switch (e->type())
|
|
{
|
|
case QEvent::MouseMove:
|
|
if (_dragStart)
|
|
{
|
|
_target->move(_target->frameGeometry().topLeft() + (me->pos() - _dragPos));
|
|
emit onWindowMove();
|
|
}
|
|
return true; // discard
|
|
break;
|
|
case QEvent::MouseButtonPress:
|
|
if (_target->rect().contains(me->pos()) && me->pos().y() < _titleBarHeight)
|
|
{
|
|
_dragStart = true;
|
|
_dragPos = me->pos();
|
|
}
|
|
return true; // discard
|
|
break;
|
|
case QEvent::MouseButtonRelease:
|
|
_dragStart = false;
|
|
//mouseRealese(static_cast<QMouseEvent*>(e));
|
|
return true; // discard
|
|
break;
|
|
}
|
|
}
|
|
return false;
|
|
}
|