Browse Source

macosx: Use next responder and document-related properties for scrolling within VLCSubScrollView

Signed-off-by: Claudio Cambra <developer@claudiocambra.com>
pull/200/head
Claudio Cambra 6 months ago
parent
commit
df831bccfa
No known key found for this signature in database GPG Key ID: 37F593F3658DB492
  1. 29
      modules/gui/macosx/views/VLCSubScrollView.m

29
modules/gui/macosx/views/VLCSubScrollView.m

@ -51,30 +51,33 @@
- (void)scrollWheel:(NSEvent *)event
{
if (!_scrollSelf) {
[_parentScrollView scrollWheel:event];
[self.nextResponder scrollWheel:event];
return;
}
[super scrollWheel:event];
if(_parentScrollView == nil || (!_scrollParentX && !_scrollParentY)) {
if (!_scrollParentX && !_scrollParentY) {
[super scrollWheel:event];
return;
}
// Sometimes scroll views initialise with the Y value being almost 0, but not quite (e.g. 0.000824)
const BOOL isViewAtYStartAndScrollUp = self.verticalScroller.floatValue <= 0.01 && event.deltaY > 0;
const BOOL isViewAtYEndAndScrollDown = self.verticalScroller.floatValue >= 0.99 && event.deltaY < 0;
const BOOL isViewAtXStartAndScrollLeft = self.horizontalScroller.floatValue <= 0.01 && event.deltaX > 0;
const BOOL isViewAtXEndAndScrollRight = self.horizontalScroller.floatValue >= 0.99 && event.deltaX < 0;
const NSRect documentVisibleRect = self.documentVisibleRect;
const NSRect documentFrame = self.documentView.frame;
const BOOL isViewAtYStartAndScrollUp = NSMinY(documentVisibleRect) <= NSMinY(documentFrame) + 1.0 && event.deltaY > 0;
const BOOL isViewAtYEndAndScrollDown = NSMaxY(documentVisibleRect) >= NSMaxY(documentFrame) - 1.0 && event.deltaY < 0;
const BOOL isViewAtXStartAndScrollLeft = NSMinX(documentVisibleRect) <= NSMinX(documentFrame) + 1.0 && event.deltaX > 0;
const BOOL isViewAtXEndAndScrollRight = NSMaxX(documentVisibleRect) >= NSMaxX(documentFrame) - 1.0 && event.deltaX < 0;
const BOOL isSubScrollViewScrollableY = self.documentView.frame.size.height > self.documentVisibleRect.size.height;
const BOOL isSubScrollViewScrollableX = self.documentView.frame.size.width > self.documentVisibleRect.size.width;
const BOOL isSubScrollViewScrollableY = NSHeight(documentFrame) > NSHeight(documentVisibleRect);
const BOOL isSubScrollViewScrollableX = NSWidth(documentFrame) > NSWidth(documentVisibleRect);
const BOOL shouldScrollParentY = _scrollParentY && (!isSubScrollViewScrollableY || isViewAtYStartAndScrollUp || isViewAtYEndAndScrollDown);
const BOOL shouldScrollParentX = _scrollParentX && (!isSubScrollViewScrollableX || isViewAtXStartAndScrollLeft || isViewAtXEndAndScrollRight);
if(shouldScrollParentY || shouldScrollParentX) {
[_parentScrollView scrollWheel:event];
if (shouldScrollParentY || shouldScrollParentX) {
[self.nextResponder scrollWheel:event];
} else {
[super scrollWheel:event];
}
}

Loading…
Cancel
Save