From a101080231039eebc04d88849c10fc282149ce30 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sun, 25 Oct 2020 15:56:22 +0100 Subject: [PATCH] Qt6 incompatibilities fixed --- src/common/QskMetaInvokable.cpp | 13 +++++++++++-- src/controls/QskGestureRecognizer.cpp | 3 ++- src/controls/QskSlider.cpp | 1 + src/controls/QskSubWindowArea.cpp | 20 ++++++++++++-------- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/common/QskMetaInvokable.cpp b/src/common/QskMetaInvokable.cpp index 3bd99ced..ccfa9195 100644 --- a/src/common/QskMetaInvokable.cpp +++ b/src/common/QskMetaInvokable.cpp @@ -16,6 +16,15 @@ QSK_QT_PRIVATE_BEGIN #include QSK_QT_PRIVATE_END +static inline void *qskMetaTypeCreate( int type, const void *copy ) +{ +#if QT_VERSION >= QT_VERSION_CHECK( 6, 0, 0 ) + return QMetaType( type ).create( copy ); +#else + return QMetaType::create( type, copy ); +#endif +} + namespace { using CallFunction = QObjectPrivate::StaticMetaCallFunction; @@ -233,7 +242,7 @@ static void qskInvokeMetaCall( } types[ i ] = method.parameterType( i - 1 ); - arguments[ i ] = QMetaType::create( types[ i ], argv[ i ] ); + arguments[ i ] = qskMetaTypeCreate( types[ i ], argv[ i ] ); } } else @@ -247,7 +256,7 @@ static void qskInvokeMetaCall( arguments = static_cast< void** >( malloc( argc * sizeof( void* ) ) ); types[ 0 ] = property.userType(); - arguments[ 0 ] = QMetaType::create( types[ 0 ], argv[ 0 ] ); + arguments[ 0 ] = qskMetaTypeCreate( types[ 0 ], argv[ 0 ] ); } if ( receiver.isNull() ) diff --git a/src/controls/QskGestureRecognizer.cpp b/src/controls/QskGestureRecognizer.cpp index 1925bd7b..6ce5be86 100644 --- a/src/controls/QskGestureRecognizer.cpp +++ b/src/controls/QskGestureRecognizer.cpp @@ -1,4 +1,5 @@ #include "QskGestureRecognizer.h" +#include "QskEvent.h" #include #include @@ -20,7 +21,7 @@ static inline QMouseEvent* qskClonedMouseEvent( if ( item ) { - QPointF localPos = item->mapFromScene( event->windowPos() ); + QPointF localPos = item->mapFromScene( qskMouseScenePosition( event ) ); clonedEvent = QQuickWindowPrivate::cloneMouseEvent( event, &localPos ); } else diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index fbdc21e9..68339585 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -6,6 +6,7 @@ #include "QskSlider.h" #include "QskAnimationHint.h" #include "QskAspect.h" +#include "QskIntervalF.h" QSK_SUBCONTROL( QskSlider, Panel ) QSK_SUBCONTROL( QskSlider, Groove ) diff --git a/src/controls/QskSubWindowArea.cpp b/src/controls/QskSubWindowArea.cpp index 5b226724..d3a5451b 100644 --- a/src/controls/QskSubWindowArea.cpp +++ b/src/controls/QskSubWindowArea.cpp @@ -90,7 +90,7 @@ class QskSubWindowArea::PrivateData bool isDraggableByHeaderOnly : 1; bool isDragging : 1; Qt::Edges draggedEdges; - QPoint mousePos; + QPointF mousePos; }; QskSubWindowArea::QskSubWindowArea( QQuickItem* parent ) @@ -192,7 +192,9 @@ bool QskSubWindowArea::mouseEventFilter( QskSubWindow* window, const QMouseEvent { case QEvent::MouseButtonPress: { - if ( !( cr.contains( event->localPos() ) && + const auto mousePos = qskMousePosition( event ); + + if ( !( cr.contains( mousePos ) && event->button() == Qt::LeftButton ) ) { return false; @@ -214,14 +216,14 @@ bool QskSubWindowArea::mouseEventFilter( QskSubWindow* window, const QMouseEvent if ( !doDrag ) { // dragging by title bar only - doDrag = window->titleBarRect().contains( event->localPos() ); + doDrag = window->titleBarRect().contains( mousePos ); } if ( doDrag ) { m_data->isDragging = true; - m_data->draggedEdges = qskSelectedEdges( cr, event->localPos() ); - m_data->mousePos = event->globalPos(); + m_data->draggedEdges = qskSelectedEdges( cr, mousePos ); + m_data->mousePos = qskMouseScenePosition( event ); setDragging( window, true ); return true; @@ -233,10 +235,12 @@ bool QskSubWindowArea::mouseEventFilter( QskSubWindow* window, const QMouseEvent { if ( m_data->isDragging ) { - qskDragWindow( event->globalPos() - m_data->mousePos, + const auto scenePos = qskMouseScenePosition( event ); + + qskDragWindow( scenePos - m_data->mousePos, m_data->draggedEdges, window ); - m_data->mousePos = event->globalPos(); + m_data->mousePos = scenePos; return true; } break; @@ -247,7 +251,7 @@ bool QskSubWindowArea::mouseEventFilter( QskSubWindow* window, const QMouseEvent { setDragging( window, false ); - m_data->mousePos = QPoint(); + m_data->mousePos = QPointF(); m_data->isDragging = false; return true;