mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 03:48:08 +02:00
Cocoa: improve Overlay Style Scroller to support Trackpad Tapping and keep it consistent with the native Scroller. Merge branch 'cocoa/scroll'
This commit is contained in:
commit
2ee50f02d8
@ -49,6 +49,12 @@ var
|
|||||||
// Overly Style Scroller Knob Color
|
// Overly Style Scroller Knob Color
|
||||||
CocoaScrollerLegacyStyleKnobColor : NSColorFunction = @getCocoaScrollerDefaultKnobColor;
|
CocoaScrollerLegacyStyleKnobColor : NSColorFunction = @getCocoaScrollerDefaultKnobColor;
|
||||||
|
|
||||||
|
// Overly Style Scroller Auto Show Delay Time, in Seconds
|
||||||
|
// the scrollbar is not shown because the value is updated,
|
||||||
|
// but because it is triggered by other factors, such as
|
||||||
|
// double-finger tapping the touchpad
|
||||||
|
CocoaScrollerOverlayStyleAutoShowDelayTime : Double = 0.2;
|
||||||
|
|
||||||
// Overly Style Scroller Auto Hide Delay Time, in Seconds
|
// Overly Style Scroller Auto Hide Delay Time, in Seconds
|
||||||
CocoaScrollerOverlayStyleAutoHideDelayTime : Double = 0.9;
|
CocoaScrollerOverlayStyleAutoHideDelayTime : Double = 0.9;
|
||||||
|
|
||||||
|
@ -133,7 +133,9 @@ type
|
|||||||
// with Overlay Style, Availability means 'KnobProportion<1'
|
// with Overlay Style, Availability means 'KnobProportion<1'
|
||||||
function isAvailableScrollBar( scroller:NSScroller ): Boolean; virtual; abstract;
|
function isAvailableScrollBar( scroller:NSScroller ): Boolean; virtual; abstract;
|
||||||
// Show the Scroller if it can be made Available
|
// Show the Scroller if it can be made Available
|
||||||
procedure showScrollBar( scroller:NSScroller ); virtual; abstract;
|
procedure showScrollBar( scroller:NSScroller; now:Boolean=True ); virtual; abstract;
|
||||||
|
// Hide the Scroller but keep the Availability, only for Overlay Style
|
||||||
|
procedure tempHideScrollBar( scroller:NSScroller ); virtual; abstract;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TCocoaManualScrollView = objcclass;
|
TCocoaManualScrollView = objcclass;
|
||||||
@ -224,6 +226,7 @@ type
|
|||||||
TCocoaManualScrollView = objcclass(NSView)
|
TCocoaManualScrollView = objcclass(NSView)
|
||||||
private
|
private
|
||||||
_manager: TCocoaScrollStyleManager;
|
_manager: TCocoaScrollStyleManager;
|
||||||
|
_tapping: Integer; // two finger tapping, SB_VERT / SB_HORZ / SB_BOTH
|
||||||
fdocumentView: NSView;
|
fdocumentView: NSView;
|
||||||
fhscroll : TCocoaScrollBar;
|
fhscroll : TCocoaScrollBar;
|
||||||
fvscroll : TCocoaScrollBar;
|
fvscroll : TCocoaScrollBar;
|
||||||
@ -248,6 +251,15 @@ type
|
|||||||
procedure setDocumentView(AView: NSView); message 'setDocumentView:';
|
procedure setDocumentView(AView: NSView); message 'setDocumentView:';
|
||||||
function documentView: NSView; message 'documentView';
|
function documentView: NSView; message 'documentView';
|
||||||
|
|
||||||
|
procedure delayShowScrollBars; message 'delayShowScrollBars';
|
||||||
|
procedure showScrollBarsAndAutoHide( tapping:Integer ); message 'showScrollBarsAndAutoHide:';
|
||||||
|
|
||||||
|
function isTapping( scroller:NSScroller ): Boolean; message 'isTapping:';
|
||||||
|
procedure onBarScrolled( scroller:NSScroller ); message 'onBarScrolled:';
|
||||||
|
procedure touchesBeganWithEvent(event: NSEvent); override;
|
||||||
|
procedure touchesEndedWithEvent(event: NSEvent); override;
|
||||||
|
procedure touchesCancelledWithEvent(event: NSEvent); override;
|
||||||
|
|
||||||
procedure setHasVerticalScroller(doshow: Boolean); message 'setHasVerticalScroller:';
|
procedure setHasVerticalScroller(doshow: Boolean); message 'setHasVerticalScroller:';
|
||||||
procedure setHasHorizontalScroller(doshow: Boolean); message 'setHasHorizontalScroller:';
|
procedure setHasHorizontalScroller(doshow: Boolean); message 'setHasHorizontalScroller:';
|
||||||
function hasVerticalScroller: Boolean; message 'hasVerticalScroller';
|
function hasVerticalScroller: Boolean; message 'hasVerticalScroller';
|
||||||
@ -317,21 +329,28 @@ type
|
|||||||
|
|
||||||
TCocoaScrollBarEffectOverlay = objcclass(TCocoaScrollBarEffectAlpha)
|
TCocoaScrollBarEffectOverlay = objcclass(TCocoaScrollBarEffectAlpha)
|
||||||
private
|
private
|
||||||
|
procedure onDelayShowingTimer( timer:NSTimer ); message 'onDelayShowingTimer:';
|
||||||
procedure onDelayHidingTimer( timer:NSTimer ); message 'onDelayHidingTimer:';
|
procedure onDelayHidingTimer( timer:NSTimer ); message 'onDelayHidingTimer:';
|
||||||
procedure onExpandTimer( timer:NSTimer ); message 'onExpandTimer:';
|
procedure onExpandTimer( timer:NSTimer ); message 'onExpandTimer:';
|
||||||
|
|
||||||
|
procedure setDelayTimer( timeInterval:Double; onTimer:SEL );
|
||||||
|
message 'setDelayTimer:timeInterval:';
|
||||||
protected
|
protected
|
||||||
currentKnobPosition: Double;
|
currentKnobPosition: Double;
|
||||||
currentKnobProportion: Double;
|
currentKnobProportion: Double;
|
||||||
entered: Boolean;
|
entered: Boolean;
|
||||||
expandedSize: Integer;
|
expandedSize: Integer;
|
||||||
|
|
||||||
delayHidingTimer: NSTimer;
|
delayTimer: NSTimer;
|
||||||
expandTimer: NSTimer;
|
expandTimer: NSTimer;
|
||||||
protected
|
protected
|
||||||
|
procedure setDelayShowingTimer; message 'setDelayShowingTimer';
|
||||||
procedure setDelayHidingTimer; message 'setDelayHidingTimer';
|
procedure setDelayHidingTimer; message 'setDelayHidingTimer';
|
||||||
procedure setExpandTimer; message 'setExpandTimer';
|
procedure setExpandTimer; message 'setExpandTimer';
|
||||||
|
|
||||||
procedure onDestroy; override;
|
procedure onDestroy; override;
|
||||||
|
public
|
||||||
|
procedure cancelDelay; message 'cancelDelay';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaScrollStyleManagerLegacy }
|
{ TCocoaScrollStyleManagerLegacy }
|
||||||
@ -348,7 +367,8 @@ type
|
|||||||
function createScrollBarEffect( scroller:NSScroller ): TCocoaScrollBarEffect; override;
|
function createScrollBarEffect( scroller:NSScroller ): TCocoaScrollBarEffect; override;
|
||||||
procedure availScrollBar( scroller:NSScroller; available:Boolean ); override;
|
procedure availScrollBar( scroller:NSScroller; available:Boolean ); override;
|
||||||
function isAvailableScrollBar( scroller:NSScroller ): Boolean; override;
|
function isAvailableScrollBar( scroller:NSScroller ): Boolean; override;
|
||||||
procedure showScrollBar( scroller:NSScroller ); override;
|
procedure showScrollBar( scroller:NSScroller; now:Boolean=True ); override;
|
||||||
|
procedure tempHideScrollBar( scroller:NSScroller ); override;
|
||||||
procedure updateLayOut; override;
|
procedure updateLayOut; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -366,7 +386,8 @@ type
|
|||||||
function createScrollBarEffect( scroller:NSScroller ): TCocoaScrollBarEffect; override;
|
function createScrollBarEffect( scroller:NSScroller ): TCocoaScrollBarEffect; override;
|
||||||
procedure availScrollBar( scroller:NSScroller; available:Boolean ); override;
|
procedure availScrollBar( scroller:NSScroller; available:Boolean ); override;
|
||||||
function isAvailableScrollBar( scroller:NSScroller ): Boolean; override;
|
function isAvailableScrollBar( scroller:NSScroller ): Boolean; override;
|
||||||
procedure showScrollBar( scroller:NSScroller ); override;
|
procedure showScrollBar( scroller:NSScroller; now:Boolean=True ); override;
|
||||||
|
procedure tempHideScrollBar( scroller:NSScroller ); override;
|
||||||
procedure updateLayOut; override;
|
procedure updateLayOut; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -602,6 +623,7 @@ end;
|
|||||||
function TCocoaManualScrollView.initWithFrame(frameRect: NSRect): id;
|
function TCocoaManualScrollView.initWithFrame(frameRect: NSRect): id;
|
||||||
begin
|
begin
|
||||||
Result:= inherited;
|
Result:= inherited;
|
||||||
|
_tapping:= -1;
|
||||||
resetManager;
|
resetManager;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -670,10 +692,8 @@ begin
|
|||||||
|
|
||||||
_manager.updateLayout;
|
_manager.updateLayout;
|
||||||
|
|
||||||
if self.hasHorizontalScroller then
|
_manager.showScrollBar(self.fhscroll);
|
||||||
_manager.showScrollBar(self.fhscroll);
|
_manager.showScrollBar(self.fvscroll);
|
||||||
if self.hasVerticalScroller then
|
|
||||||
_manager.showScrollBar(self.fvscroll);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaManualScrollView.lclGetCallback: ICommonCallback;
|
function TCocoaManualScrollView.lclGetCallback: ICommonCallback;
|
||||||
@ -745,6 +765,105 @@ begin
|
|||||||
Result:=fdocumentView;
|
Result:=fdocumentView;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCocoaManualScrollView.isTapping(scroller: NSScroller): Boolean;
|
||||||
|
begin
|
||||||
|
if _tapping < 0 then
|
||||||
|
Exit( False );
|
||||||
|
if _tapping = SB_BOTH then
|
||||||
|
Exit( True );
|
||||||
|
if (_tapping = SB_HORZ) and (scroller=self.fhscroll) then
|
||||||
|
Exit( True );
|
||||||
|
if (_tapping = SB_VERT) and (scroller=self.fvscroll) then
|
||||||
|
Exit( True );
|
||||||
|
Result:= False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.onBarScrolled(scroller: NSScroller);
|
||||||
|
begin
|
||||||
|
if _tapping < 0 then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
if scroller=self.fvscroll then begin
|
||||||
|
_tapping:= SB_VERT;
|
||||||
|
_manager.tempHideScrollBar( fhscroll );
|
||||||
|
end else if scroller=self.fhscroll then begin
|
||||||
|
_tapping:= SB_HORZ;
|
||||||
|
_manager.tempHideScrollBar( fvscroll );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.delayShowScrollBars();
|
||||||
|
begin
|
||||||
|
_manager.showScrollBar( self.fhscroll, False );
|
||||||
|
_manager.showScrollBar( self.fvscroll, False );
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.showScrollBarsAndAutoHide( tapping:Integer );
|
||||||
|
begin
|
||||||
|
if (tapping=SB_HORZ) or (tapping=SB_BOTH) then
|
||||||
|
_manager.showScrollBar(self.fhscroll);
|
||||||
|
if (tapping=SB_VERT) or (tapping=SB_BOTH) then
|
||||||
|
_manager.showScrollBar(self.fvscroll);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.touchesBeganWithEvent(event: NSEvent);
|
||||||
|
var
|
||||||
|
touches: NSSet;
|
||||||
|
show: Boolean = False;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
touches:= event.touchesMatchingPhase_inView(NSTouchPhaseTouching, self);
|
||||||
|
if touches.count = 2 then begin
|
||||||
|
show:= True;
|
||||||
|
_tapping:= SB_BOTH;
|
||||||
|
end else begin
|
||||||
|
if _tapping >= 0 then
|
||||||
|
show:= True;
|
||||||
|
_tapping:= -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if show then
|
||||||
|
delayShowScrollBars;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.touchesEndedWithEvent(event: NSEvent);
|
||||||
|
var
|
||||||
|
touches: NSSet;
|
||||||
|
lastTapping: Integer;
|
||||||
|
show: Boolean = False;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
touches:= event.touchesMatchingPhase_inView(NSTouchPhaseTouching, self);
|
||||||
|
if (touches.count=0) and (_tapping=SB_BOTH) then begin
|
||||||
|
_tapping:= -1;
|
||||||
|
show:= True;
|
||||||
|
end else if (touches.count=2) and (_tapping<>SB_BOTH) then begin
|
||||||
|
_tapping:= SB_BOTH;
|
||||||
|
show:= True;
|
||||||
|
end else if (touches.count<>2) and (_tapping>=0) then begin
|
||||||
|
lastTapping:= _tapping;
|
||||||
|
_tapping:= -1;
|
||||||
|
showScrollBarsAndAutoHide( lastTapping );
|
||||||
|
end else begin
|
||||||
|
_tapping:= -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if show then
|
||||||
|
delayShowScrollBars;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaManualScrollView.touchesCancelledWithEvent(event: NSEvent);
|
||||||
|
var
|
||||||
|
lastTapping: Integer;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
lastTapping:= _tapping;
|
||||||
|
_tapping:= -1;
|
||||||
|
showScrollBarsAndAutoHide( lastTapping );
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaManualScrollView.setHasVerticalScroller(doshow: Boolean);
|
procedure TCocoaManualScrollView.setHasVerticalScroller(doshow: Boolean);
|
||||||
var
|
var
|
||||||
available: Boolean;
|
available: Boolean;
|
||||||
@ -1401,9 +1520,15 @@ end;
|
|||||||
|
|
||||||
{ TCocoaScrollBarEffectOverlay }
|
{ TCocoaScrollBarEffectOverlay }
|
||||||
|
|
||||||
|
procedure TCocoaScrollBarEffectOverlay.onDelayShowingTimer( timer: NSTimer );
|
||||||
|
begin
|
||||||
|
self.delayTimer:= nil;
|
||||||
|
self.manager.showScrollBar( self.scroller );
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollBarEffectOverlay.onDelayHidingTimer( timer:NSTimer );
|
procedure TCocoaScrollBarEffectOverlay.onDelayHidingTimer( timer:NSTimer );
|
||||||
begin
|
begin
|
||||||
self.delayHidingTimer:= nil;
|
self.delayTimer:= nil;
|
||||||
self.fade( CocoaConfig.CocoaScrollerOverlayStyleFadeStep,
|
self.fade( CocoaConfig.CocoaScrollerOverlayStyleFadeStep,
|
||||||
CocoaConfig.CocoaScrollerOverlayStyleFadeTo );
|
CocoaConfig.CocoaScrollerOverlayStyleFadeTo );
|
||||||
end;
|
end;
|
||||||
@ -1431,30 +1556,41 @@ begin
|
|||||||
self.scroller.setNeedsDisplay_(True);
|
self.scroller.setNeedsDisplay_(True);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollBarEffectOverlay.setDelayHidingTimer;
|
procedure TCocoaScrollBarEffectOverlay.setDelayTimer(
|
||||||
|
timeInterval:Double; onTimer:SEL );
|
||||||
begin
|
begin
|
||||||
if Assigned(self.expandTimer) then begin
|
if Assigned(self.expandTimer) then begin
|
||||||
self.expandTimer.invalidate;
|
self.expandTimer.invalidate;
|
||||||
self.expandTimer:= nil;
|
self.expandTimer:= nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if Assigned(self.delayHidingTimer) then
|
self.cancelDelay;
|
||||||
self.delayHidingTimer.invalidate;
|
|
||||||
|
|
||||||
self.delayHidingTimer:= NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats(
|
self.delayTimer:= NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats(
|
||||||
CocoaConfig.CocoaScrollerOverlayStyleAutoHideDelayTime,
|
timeInterval,
|
||||||
self,
|
self,
|
||||||
ObjCSelector('onDelayHidingTimer:'),
|
onTimer,
|
||||||
nil,
|
nil,
|
||||||
false );
|
false );
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaScrollBarEffectOverlay.setDelayShowingTimer;
|
||||||
|
begin
|
||||||
|
self.setDelayTimer(
|
||||||
|
CocoaScrollerOverlayStyleAutoShowDelayTime,
|
||||||
|
ObjCSelector('onDelayShowingTimer:') );
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaScrollBarEffectOverlay.setDelayHidingTimer;
|
||||||
|
begin
|
||||||
|
self.setDelayTimer(
|
||||||
|
CocoaConfig.CocoaScrollerOverlayStyleAutoHideDelayTime,
|
||||||
|
ObjCSelector('onDelayHidingTimer:') );
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollBarEffectOverlay.setExpandTimer;
|
procedure TCocoaScrollBarEffectOverlay.setExpandTimer;
|
||||||
begin
|
begin
|
||||||
if Assigned(self.delayHidingTimer) then begin
|
self.cancelDelay;
|
||||||
self.delayHidingTimer.invalidate;
|
|
||||||
self.delayHidingTimer:= nil;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if Assigned(self.expandTimer) then
|
if Assigned(self.expandTimer) then
|
||||||
self.expandTimer.invalidate;
|
self.expandTimer.invalidate;
|
||||||
@ -1469,10 +1605,7 @@ end;
|
|||||||
|
|
||||||
procedure TCocoaScrollBarEffectOverlay.onDestroy;
|
procedure TCocoaScrollBarEffectOverlay.onDestroy;
|
||||||
begin
|
begin
|
||||||
if Assigned(self.delayHidingTimer) then begin
|
self.cancelDelay;
|
||||||
self.delayHidingTimer.invalidate;
|
|
||||||
self.delayHidingTimer:= nil;
|
|
||||||
end;
|
|
||||||
if Assigned(self.expandTimer) then begin
|
if Assigned(self.expandTimer) then begin
|
||||||
self.expandTimer.invalidate;
|
self.expandTimer.invalidate;
|
||||||
self.expandTimer:= nil;
|
self.expandTimer:= nil;
|
||||||
@ -1480,6 +1613,14 @@ begin
|
|||||||
inherited onDestroy;
|
inherited onDestroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaScrollBarEffectOverlay.cancelDelay;
|
||||||
|
begin
|
||||||
|
if Assigned(self.delayTimer) then begin
|
||||||
|
self.delayTimer.invalidate;
|
||||||
|
self.delayTimer:= nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TCocoaScrollStyleManager }
|
{ TCocoaScrollStyleManager }
|
||||||
|
|
||||||
constructor TCocoaScrollStyleManager.createForScrollBar;
|
constructor TCocoaScrollStyleManager.createForScrollBar;
|
||||||
@ -1598,13 +1739,22 @@ begin
|
|||||||
Result:= Assigned(scroller) and NOT scroller.isHidden;
|
Result:= Assigned(scroller) and NOT scroller.isHidden;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollStyleManagerLegacy.showScrollBar(scroller: NSScroller);
|
procedure TCocoaScrollStyleManagerLegacy.showScrollBar(
|
||||||
|
scroller: NSScroller; now:Boolean );
|
||||||
begin
|
begin
|
||||||
|
if NOT Assigned(scroller) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
scroller.setHidden( False );
|
scroller.setHidden( False );
|
||||||
scroller.setAlphaValue( 1 );
|
scroller.setAlphaValue( 1 );
|
||||||
scroller.setNeedsDisplay_( True );
|
scroller.setNeedsDisplay_( True );
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaScrollStyleManagerLegacy.tempHideScrollBar(scroller: NSScroller
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollStyleManagerLegacy.onDrawKnob(scroller: NSScroller);
|
procedure TCocoaScrollStyleManagerLegacy.onDrawKnob(scroller: NSScroller);
|
||||||
var
|
var
|
||||||
scrollBar: TCocoaScrollBar Absolute scroller;
|
scrollBar: TCocoaScrollBar Absolute scroller;
|
||||||
@ -1750,6 +1900,9 @@ begin
|
|||||||
if (effect.currentKnobPosition=knobPosition) and (effect.currentKnobProportion=knobProportion) then
|
if (effect.currentKnobPosition=knobPosition) and (effect.currentKnobProportion=knobProportion) then
|
||||||
Exit;
|
Exit;
|
||||||
|
|
||||||
|
if effect.currentKnobPosition <> knobPosition then
|
||||||
|
_scrollView.onBarScrolled( scroller );
|
||||||
|
|
||||||
effect.currentKnobPosition:= knobPosition;
|
effect.currentKnobPosition:= knobPosition;
|
||||||
effect.currentKnobProportion:= knobProportion;
|
effect.currentKnobProportion:= knobProportion;
|
||||||
|
|
||||||
@ -1809,11 +1962,15 @@ begin
|
|||||||
Result:= Assigned(scroller) and (0<scroller.knobProportion) and (scroller.knobProportion<1);
|
Result:= Assigned(scroller) and (0<scroller.knobProportion) and (scroller.knobProportion<1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollStyleManagerOverlay.showScrollBar(scroller: NSScroller);
|
procedure TCocoaScrollStyleManagerOverlay.showScrollBar(
|
||||||
|
scroller: NSScroller; now:Boolean );
|
||||||
var
|
var
|
||||||
scrollBar: TCocoaScrollBar Absolute scroller;
|
scrollBar: TCocoaScrollBar Absolute scroller;
|
||||||
effect: TCocoaScrollBarEffectOverlay;
|
effect: TCocoaScrollBarEffectOverlay;
|
||||||
begin
|
begin
|
||||||
|
if NOT Assigned(scroller) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
effect:= TCocoaScrollBarEffectOverlay(scrollBar.effect);
|
effect:= TCocoaScrollBarEffectOverlay(scrollBar.effect);
|
||||||
|
|
||||||
if effect.currentKnobProportion = 1 then begin
|
if effect.currentKnobProportion = 1 then begin
|
||||||
@ -1822,19 +1979,40 @@ begin
|
|||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if NOT effect.entered then begin
|
if NOT now then begin
|
||||||
effect.setDelayHidingTimer;
|
effect.setDelayShowingTimer;
|
||||||
effect.currentAlpha:= CocoaConfig.CocoaScrollerOverlayStyleAlpha;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if NOT _scrollView.isTapping(scroller) and NOT effect.entered then
|
||||||
|
effect.setDelayHidingTimer;
|
||||||
|
|
||||||
// on old versions of macOS, alpha=0 is considered hidden.
|
// on old versions of macOS, alpha=0 is considered hidden.
|
||||||
// that is, to be truly visible, not only Hidden=false, but Alpha must also be set.
|
// that is, to be truly visible, not only Hidden=false, but Alpha must also be set.
|
||||||
// otherwise it is considered hidden and setNeedsDisplay() does not take effect.
|
// otherwise it is considered hidden and setNeedsDisplay() does not take effect.
|
||||||
|
effect.currentAlpha:= CocoaConfig.CocoaScrollerOverlayStyleAlpha;
|
||||||
scroller.setAlphaValue( effect.currentAlpha );
|
scroller.setAlphaValue( effect.currentAlpha );
|
||||||
scroller.setHidden( False );
|
scroller.setHidden( False );
|
||||||
scroller.setNeedsDisplay_( true );
|
scroller.setNeedsDisplay_( true );
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaScrollStyleManagerOverlay.tempHideScrollBar(scroller: NSScroller
|
||||||
|
);
|
||||||
|
var
|
||||||
|
scrollBar: TCocoaScrollBar Absolute scroller;
|
||||||
|
effect: TCocoaScrollBarEffectOverlay;
|
||||||
|
begin
|
||||||
|
if NOT Assigned(scroller) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
effect:= TCocoaScrollBarEffectOverlay(scrollBar.effect);
|
||||||
|
effect.cancelDelay;
|
||||||
|
|
||||||
|
scroller.setAlphaValue( 0 );
|
||||||
|
scroller.setHidden( True );
|
||||||
|
effect.expandedSize:= 0;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaScrollStyleManagerOverlay.updateLayOut;
|
procedure TCocoaScrollStyleManagerOverlay.updateLayOut;
|
||||||
var
|
var
|
||||||
doc: NSView;
|
doc: NSView;
|
||||||
|
@ -75,6 +75,7 @@ begin
|
|||||||
p := AView.superview;
|
p := AView.superview;
|
||||||
p.setAutoresizingMask( NSViewWidthSizable or NSViewHeightSizable);
|
p.setAutoresizingMask( NSViewWidthSizable or NSViewHeightSizable);
|
||||||
Result := TCocoaManualScrollView.alloc.initWithFrame(NSNullRect);
|
Result := TCocoaManualScrollView.alloc.initWithFrame(NSNullRect);
|
||||||
|
Result.setAcceptsTouchEvents(true);
|
||||||
Result.setAutoresizesSubviews(false);
|
Result.setAutoresizesSubviews(false);
|
||||||
if Assigned(p) then p.addSubView(Result);
|
if Assigned(p) then p.addSubView(Result);
|
||||||
Result.lclSetFrame(r);
|
Result.lclSetFrame(r);
|
||||||
|
Loading…
Reference in New Issue
Block a user