mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 09:47:58 -06:00
FIX: transfer touch wheel event to pan gesture
Change-Id: Ic74662849a3728017a557417ec8cb1bf49826f15 (cherry picked from commit ccd1aa95de4abecbddecc0fb43ae7ce2296c6ede)
This commit is contained in:
parent
0d94bc619e
commit
1705f3d5b7
3 changed files with 104 additions and 0 deletions
|
@ -27,6 +27,7 @@
|
||||||
#include "slic3r/Utils/UndoRedo.hpp"
|
#include "slic3r/Utils/UndoRedo.hpp"
|
||||||
#include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp"
|
#include "slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp"
|
||||||
#include "slic3r/GUI/BitmapCache.hpp"
|
#include "slic3r/GUI/BitmapCache.hpp"
|
||||||
|
#include "slic3r/Utils/MacDarkMode.hpp"
|
||||||
|
|
||||||
#include "GUI_App.hpp"
|
#include "GUI_App.hpp"
|
||||||
#include "GUI_ObjectList.hpp"
|
#include "GUI_ObjectList.hpp"
|
||||||
|
@ -2139,6 +2140,9 @@ void GLCanvas3D::bind_event_handlers()
|
||||||
m_canvas->Bind(wxEVT_GESTURE_ZOOM, &GLCanvas3D::on_gesture, this);
|
m_canvas->Bind(wxEVT_GESTURE_ZOOM, &GLCanvas3D::on_gesture, this);
|
||||||
m_canvas->Bind(wxEVT_GESTURE_ROTATE, &GLCanvas3D::on_gesture, this);
|
m_canvas->Bind(wxEVT_GESTURE_ROTATE, &GLCanvas3D::on_gesture, this);
|
||||||
m_canvas->EnableTouchEvents(wxTOUCH_ZOOM_GESTURE | wxTOUCH_ROTATE_GESTURE);
|
m_canvas->EnableTouchEvents(wxTOUCH_ZOOM_GESTURE | wxTOUCH_ROTATE_GESTURE);
|
||||||
|
#if __WXOSX__
|
||||||
|
initGestures(m_canvas->GetHandle(), m_canvas); // for UIPanGestureRecognizer allowedScrollTypesMask
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef slic3r_MacDarkMode_hpp_
|
#ifndef slic3r_MacDarkMode_hpp_
|
||||||
#define slic3r_MacDarkMode_hpp_
|
#define slic3r_MacDarkMode_hpp_
|
||||||
|
|
||||||
|
#include <wx/event.h>
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
|
@ -8,6 +10,9 @@ namespace GUI {
|
||||||
extern bool mac_dark_mode();
|
extern bool mac_dark_mode();
|
||||||
extern double mac_max_scaling_factor();
|
extern double mac_max_scaling_factor();
|
||||||
extern void set_miniaturizable(void * window);
|
extern void set_miniaturizable(void * window);
|
||||||
|
|
||||||
|
void initGestures(void * view, wxEvtHandler * handler);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AppKit/NSScreen.h>
|
#import <AppKit/NSScreen.h>
|
||||||
|
|
||||||
|
#include <objc/runtime.h>
|
||||||
|
|
||||||
@interface MacDarkMode : NSObject {}
|
@interface MacDarkMode : NSObject {}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -76,6 +78,8 @@ void set_miniaturizable(void * window)
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
/* edit column for wxTableView */
|
||||||
|
|
||||||
#include <wx/dataview.h>
|
#include <wx/dataview.h>
|
||||||
#include <wx/osx/cocoa/dataview.h>
|
#include <wx/osx/cocoa/dataview.h>
|
||||||
#include <wx/osx/dataview.h>
|
#include <wx/osx/dataview.h>
|
||||||
|
@ -98,6 +102,7 @@ void set_miniaturizable(void * window)
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
/* remove focused border for wxTextCtrl */
|
||||||
|
|
||||||
@implementation NSTextField (FocusRing)
|
@implementation NSTextField (FocusRing)
|
||||||
|
|
||||||
|
@ -107,3 +112,93 @@ void set_miniaturizable(void * window)
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
/* gesture handle for Canvas3D */
|
||||||
|
|
||||||
|
@interface wxNSCustomOpenGLView : NSOpenGLView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation wxNSCustomOpenGLView (Gesture)
|
||||||
|
|
||||||
|
wxEvtHandler * _gestureHandler = nullptr;
|
||||||
|
|
||||||
|
- (void) onGestureMove: (NSPanGestureRecognizer*) gesture
|
||||||
|
{
|
||||||
|
wxPanGestureEvent evt;
|
||||||
|
NSPoint tr = [gesture translationInView: self];
|
||||||
|
evt.SetDelta({(int) tr.x, (int) tr.y});
|
||||||
|
[self postEvent:evt withGesture:gesture];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onGestureScale: (NSMagnificationGestureRecognizer*) gesture
|
||||||
|
{
|
||||||
|
wxZoomGestureEvent evt;
|
||||||
|
evt.SetZoomFactor(gesture.magnification + 1.0);
|
||||||
|
[self postEvent:evt withGesture:gesture];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onGestureRotate: (NSRotationGestureRecognizer*) gesture
|
||||||
|
{
|
||||||
|
wxRotateGestureEvent evt;
|
||||||
|
evt.SetRotationAngle(-gesture.rotation);
|
||||||
|
[self postEvent:evt withGesture:gesture];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) postEvent: (wxGestureEvent &) evt withGesture: (NSGestureRecognizer* ) gesture
|
||||||
|
{
|
||||||
|
NSPoint pos = [gesture locationInView: self];
|
||||||
|
evt.SetPosition({(int) pos.x, (int) pos.y});
|
||||||
|
if (gesture.state == NSGestureRecognizerStateBegan)
|
||||||
|
evt.SetGestureStart();
|
||||||
|
else if (gesture.state == NSGestureRecognizerStateEnded)
|
||||||
|
evt.SetGestureEnd();
|
||||||
|
_gestureHandler->ProcessEvent(evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) scrollWheel2:(NSEvent *)event
|
||||||
|
{
|
||||||
|
if (_gestureHandler && event.hasPreciseScrollingDeltas) {
|
||||||
|
wxPanGestureEvent evt;
|
||||||
|
evt.SetDelta({(int)[event scrollingDeltaX], -(int)[event scrollingDeltaY]});
|
||||||
|
_gestureHandler->ProcessEvent(evt);
|
||||||
|
} else {
|
||||||
|
[self scrollWheel2: event];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void) load
|
||||||
|
{
|
||||||
|
Method scrollWheel = class_getInstanceMethod([wxNSCustomOpenGLView class], @selector(scrollWheel:));
|
||||||
|
Method scrollWheel2 = class_getInstanceMethod([wxNSCustomOpenGLView class], @selector(scrollWheel2:));
|
||||||
|
method_exchangeImplementations(scrollWheel, scrollWheel2);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) initGesturesWithHandler: (wxEvtHandler*) handler
|
||||||
|
{
|
||||||
|
// NSPanGestureRecognizer * pan = [[NSPanGestureRecognizer alloc] initWithTarget: self action: @selector(onGestureMove:)];
|
||||||
|
// pan.numberOfTouchesRequired = 2;
|
||||||
|
// pan.allowedTouchTypes = 0;
|
||||||
|
// NSMagnificationGestureRecognizer * magnification = [[NSMagnificationGestureRecognizer alloc] initWithTarget: self action: @selector(onGestureScale:)];
|
||||||
|
// NSRotationGestureRecognizer * rotation = [[NSRotationGestureRecognizer alloc] initWithTarget: self action: @selector(onGestureRotate:)];
|
||||||
|
// [self addGestureRecognizer:pan];
|
||||||
|
// [self addGestureRecognizer:magnification];
|
||||||
|
// [self addGestureRecognizer:rotation];
|
||||||
|
_gestureHandler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace Slic3r {
|
||||||
|
namespace GUI {
|
||||||
|
|
||||||
|
void initGestures(void * view, wxEvtHandler * handler)
|
||||||
|
{
|
||||||
|
NSOpenGLView * glView = (NSOpenGLView *) view;
|
||||||
|
[glView initGesturesWithHandler: handler];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue