Skip to content

Commit

Permalink
Merge pull request opencv#23394 from thewoz:Cocoa-Scroll-Wheel
Browse files Browse the repository at this point in the history
Add scrollWheel to Cocoa opencv#23394

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [ ] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
  • Loading branch information
thewoz authored Apr 12, 2023
1 parent 1af084c commit 097891e
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
2 changes: 1 addition & 1 deletion modules/highgui/include/opencv2/highgui.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ left scrolling, respectively.
@note
Mouse-wheel events are currently supported only on Windows.
Mouse-wheel events are currently supported only on Windows and Cocoa
@param flags The mouse callback flags parameter.
*/
Expand Down
23 changes: 21 additions & 2 deletions modules/highgui/src/window_cocoa.mm
Original file line number Diff line number Diff line change
Expand Up @@ -899,8 +899,22 @@ - (void)cvSendMouseEvent:(NSEvent *)event type:(int)type flags:(int)flags {
mp.y *= (imageSize.height / std::max(viewSize.height, 1.));
mp.x *= (imageSize.width / std::max(viewSize.width, 1.));

if( mp.x >= 0 && mp.y >= 0 && mp.x < imageSize.width && mp.y < imageSize.height )
mouseCallback(type, mp.x, mp.y, flags, mouseParam);
if( [event type] == NSEventTypeScrollWheel ) {
if( event.hasPreciseScrollingDeltas ) {
mp.x = int(event.scrollingDeltaX);
mp.y = int(event.scrollingDeltaY);
} else {
mp.x = int(event.scrollingDeltaX / 0.100006);
mp.y = int(event.scrollingDeltaY / 0.100006);
}
if( mp.x && !mp.y && CV_EVENT_MOUSEWHEEL == type ) {
type = CV_EVENT_MOUSEHWHEEL;
}
mouseCallback(type, mp.x, mp.y, flags, mouseParam);
} else if( mp.x >= 0 && mp.y >= 0 && mp.x < imageSize.width && mp.y < imageSize.height ) {
mouseCallback(type, mp.x, mp.y, flags, mouseParam);
}

}

- (void)cvMouseEvent:(NSEvent *)event {
Expand All @@ -923,6 +937,11 @@ - (void)cvMouseEvent:(NSEvent *)event {
if([event type] == NSLeftMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_LBUTTON];}
if([event type] == NSRightMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_RBUTTON];}
if([event type] == NSOtherMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_MBUTTON];}
if([event type] == NSEventTypeScrollWheel) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEWHEEL flags:flags ];}
}

-(void)scrollWheel:(NSEvent *)theEvent {
[self cvMouseEvent:theEvent];
}
- (void)keyDown:(NSEvent *)theEvent {
//cout << "keyDown" << endl;
Expand Down

0 comments on commit 097891e

Please sign in to comment.