Native handling of relative cursor coordinates for camera control
This commit is contained in:
parent
92723598fe
commit
12f4d5a267
|
@ -2,6 +2,7 @@
|
||||||
#include <Common/Math/MathUtil.h>
|
#include <Common/Math/MathUtil.h>
|
||||||
#include <Core/Render/CDrawUtil.h>
|
#include <Core/Render/CDrawUtil.h>
|
||||||
#include <Core/Render/CGraphics.h>
|
#include <Core/Render/CGraphics.h>
|
||||||
|
#include <Editor/MacOSExtras.h>
|
||||||
|
|
||||||
#include <QCursor>
|
#include <QCursor>
|
||||||
|
|
||||||
|
@ -264,8 +265,13 @@ void CBasicViewport::ProcessInput()
|
||||||
|
|
||||||
if (IsMouseInputActive())
|
if (IsMouseInputActive())
|
||||||
{
|
{
|
||||||
|
#ifdef __APPLE__
|
||||||
|
float XMovement = gpMouseDragCocoaEventFilter->claimX() * 0.01f;
|
||||||
|
float YMovement = gpMouseDragCocoaEventFilter->claimY() * 0.01f;
|
||||||
|
#else
|
||||||
float XMovement = (QCursor::pos().x() - mLastMousePos.x()) * 0.01f;
|
float XMovement = (QCursor::pos().x() - mLastMousePos.x()) * 0.01f;
|
||||||
float YMovement = (QCursor::pos().y() - mLastMousePos.y()) * 0.01f;
|
float YMovement = (QCursor::pos().y() - mLastMousePos.y()) * 0.01f;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((XMovement != 0) || (YMovement != 0))
|
if ((XMovement != 0) || (YMovement != 0))
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef MACOSEXTRAS_H
|
||||||
|
#define MACOSEXTRAS_H
|
||||||
|
#ifdef __APPLE__
|
||||||
|
|
||||||
|
#include <CoreGraphics/CGBase.h>
|
||||||
|
|
||||||
|
#include <QAbstractNativeEventFilter>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
void MacOSSetDarkAppearance();
|
||||||
|
QString MacOSPathToDolphinBinary();
|
||||||
|
|
||||||
|
class MouseDragCocoaEventFilter : public QAbstractNativeEventFilter
|
||||||
|
{
|
||||||
|
CGFloat mX = 0.0, mY = 0.0;
|
||||||
|
public:
|
||||||
|
bool nativeEventFilter(const QByteArray& eventType, void* message, long*) override;
|
||||||
|
CGFloat claimX() { CGFloat ret = mX; mX = 0.0; return ret; }
|
||||||
|
CGFloat claimY() { CGFloat ret = mY; mY = 0.0; return ret; }
|
||||||
|
};
|
||||||
|
|
||||||
|
extern MouseDragCocoaEventFilter* gpMouseDragCocoaEventFilter;
|
||||||
|
|
||||||
|
#endif // __APPLE__
|
||||||
|
#endif // MACOSEXTRAS_H
|
|
@ -1,5 +1,5 @@
|
||||||
#import <AppKit/AppKit.h>
|
#import <AppKit/AppKit.h>
|
||||||
#include <QString>
|
#include "MacOSExtras.h"
|
||||||
|
|
||||||
void MacOSSetDarkAppearance()
|
void MacOSSetDarkAppearance()
|
||||||
{
|
{
|
||||||
|
@ -16,3 +16,22 @@ QString MacOSPathToDolphinBinary()
|
||||||
return QString::fromNSString(path) + QStringLiteral("/Contents/MacOS/Dolphin");
|
return QString::fromNSString(path) + QStringLiteral("/Contents/MacOS/Dolphin");
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Filter to accumulate relative coordinates of middle and right mouse drags for camera control. */
|
||||||
|
bool MouseDragCocoaEventFilter::nativeEventFilter(const QByteArray& eventType, void* message, long*)
|
||||||
|
{
|
||||||
|
if (eventType == "mac_generic_NSEvent")
|
||||||
|
{
|
||||||
|
NSEvent* event = static_cast<NSEvent*>(message);
|
||||||
|
NSEventType evType = event.type;
|
||||||
|
if (evType == NSEventTypeRightMouseDragged ||
|
||||||
|
(evType == NSEventTypeOtherMouseDragged && event.buttonNumber == 2))
|
||||||
|
{
|
||||||
|
mX += event.deltaX;
|
||||||
|
mY += event.deltaY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseDragCocoaEventFilter* gpMouseDragCocoaEventFilter = nullptr;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "NDolphinIntegration.h"
|
#include "NDolphinIntegration.h"
|
||||||
|
#include "Editor/MacOSExtras.h"
|
||||||
#include "Editor/UICommon.h"
|
#include "Editor/UICommon.h"
|
||||||
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
@ -10,10 +11,6 @@
|
||||||
#undef MoveFile
|
#undef MoveFile
|
||||||
#undef DeleteFile
|
#undef DeleteFile
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
QString MacOSPathToDolphinBinary();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace NDolphinIntegration
|
namespace NDolphinIntegration
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "CEditorApplication.h"
|
#include "CEditorApplication.h"
|
||||||
#include "CUIRelay.h"
|
#include "CUIRelay.h"
|
||||||
|
#include "MacOSExtras.h"
|
||||||
#include "UICommon.h"
|
#include "UICommon.h"
|
||||||
#include <Common/Log.h>
|
#include <Common/Log.h>
|
||||||
|
|
||||||
|
@ -11,10 +12,6 @@
|
||||||
#include <QStyleFactory>
|
#include <QStyleFactory>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
void MacOSSetDarkAppearance();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Redirect qDebug output to the log file
|
// Redirect qDebug output to the log file
|
||||||
void QtLogRedirect(QtMsgType Type, const QMessageLogContext& /*rkContext*/, const QString& rkMessage)
|
void QtLogRedirect(QtMsgType Type, const QMessageLogContext& /*rkContext*/, const QString& rkMessage)
|
||||||
{
|
{
|
||||||
|
@ -105,6 +102,9 @@ public:
|
||||||
SetupPalette();
|
SetupPalette();
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
MacOSSetDarkAppearance();
|
MacOSSetDarkAppearance();
|
||||||
|
MouseDragCocoaEventFilter mouseDragCocoaEventFilter;
|
||||||
|
gpMouseDragCocoaEventFilter = &mouseDragCocoaEventFilter;
|
||||||
|
qApp->installNativeEventFilter(gpMouseDragCocoaEventFilter);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Default OpenGL format
|
// Default OpenGL format
|
||||||
|
|
Loading…
Reference in New Issue