mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-05 05:20:20 +02:00
Cocoa: NSScrollViewSetScrollPos refactored
This commit is contained in:
parent
48c3b8d61b
commit
5a7b7dbf37
@ -250,8 +250,6 @@ var
|
||||
|
||||
function CocoaScrollBarSetScrollInfo(bar: TCocoaScrollBar; const ScrollInfo: TScrollInfo): Integer;
|
||||
function CocoaScrollBarGetScrollInfo(bar: TCocoaScrollBar; var ScrollInfo: TScrollInfo): Boolean;
|
||||
procedure NSScrollerSetScrollInfo(docSz, pageSz: CGFloat; rl: NSSCroller; const ScrollInfo: TScrollInfo);
|
||||
procedure NSScrollViewSetScrollPos(sc: NSScrollView; BarFlag: Integer; const ScrollInfo: TScrollInfo);
|
||||
|
||||
function CocoaPromptUser(const DialogCaption, DialogMessage: String;
|
||||
DialogType: longint; Buttons: PLongint; ButtonCount, DefaultIndex,
|
||||
@ -412,50 +410,6 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
procedure NSScrollerSetScrollInfo(docSz, pageSz: CGFloat; rl: NSSCroller; const ScrollInfo: TScrollInfo);
|
||||
var
|
||||
sz : CGFloat;
|
||||
begin
|
||||
if ScrollInfo.fMask and SIF_POS>0 then begin
|
||||
sz:=docSz-pageSz;
|
||||
if sz=0 then rl.setFloatValue(0)
|
||||
else rl.setFloatValue(ScrollInfo.nPos/sz);
|
||||
end;
|
||||
if ScrollInfo.fMask and SIF_PAGE>0 then begin
|
||||
sz:=docSz-pageSz;
|
||||
if sz=0 then rl.setKnobProportion(1)
|
||||
else rl.setKnobProportion(1/sz);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure NSScrollViewSetScrollPos(sc: NSScrollView; BarFlag: Integer; const ScrollInfo: TScrollInfo);
|
||||
var
|
||||
cocoaSc: TCocoaScrollView Absolute sc;
|
||||
newOrigin : NSPoint;
|
||||
begin
|
||||
if not Assigned(sc.documentView) then Exit;
|
||||
|
||||
newOrigin:=sc.contentView.bounds.origin;
|
||||
if BarFlag = SB_Vert then
|
||||
begin
|
||||
if sc.isKindOfClass(TCocoaScrollView) then
|
||||
cocoaSc.lclVertScrollInfo:= ScrollInfo;
|
||||
//NSScrollerSetScrollInfo(ns.frame.size.height, sc.verticalScroller, ScrollInfo)
|
||||
if not sc.documentView.isFlipped then
|
||||
newOrigin.y := sc.documentView.frame.size.height - ScrollInfo.nPos - sc.contentSize.height
|
||||
else
|
||||
newOrigin.y := ScrollInfo.nPos;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if sc.isKindOfClass(TCocoaScrollView) then
|
||||
cocoaSc.lclHoriScrollInfo:= ScrollInfo;
|
||||
//NSScrollerSetScrollInfo(ns.frame.size.width, sc.horizontalScroller, ScrollInfo);
|
||||
newOrigin.x:=ScrollInfo.nPos;
|
||||
end;
|
||||
sc.contentView.setBoundsOrigin( newOrigin );
|
||||
end;
|
||||
|
||||
{ TModalSession }
|
||||
|
||||
constructor TModalSession.Create(awin: NSWindow; asess: NSModalSession;
|
||||
|
@ -61,6 +61,7 @@ type
|
||||
procedure lclInvalidate; override;
|
||||
|
||||
procedure fillScrollInfo(barFlag: Integer; var scrollInfo: TScrollInfo); message 'fillScrollInfo:barFlag:';
|
||||
procedure applyScrollInfo(barFlag: Integer; const scrollInfo: TScrollInfo); message 'applyScrollInfo:barFlag:';
|
||||
end;
|
||||
|
||||
{ TCocoaManualScrollView }
|
||||
@ -750,6 +751,30 @@ begin
|
||||
fillScrollerScrollInfo(docSize.width, self.contentSize.width, self.horizontalScroller);
|
||||
end;
|
||||
|
||||
procedure TCocoaScrollView.applyScrollInfo(barFlag: Integer;
|
||||
const scrollInfo: TScrollInfo);
|
||||
var
|
||||
newOrigin : NSPoint;
|
||||
begin
|
||||
if not Assigned(self.documentView) then Exit;
|
||||
|
||||
newOrigin:= self.contentView.bounds.origin;
|
||||
if BarFlag = SB_Vert then
|
||||
begin
|
||||
self.lclVertScrollInfo:= scrollInfo;
|
||||
if not self.documentView.isFlipped then
|
||||
newOrigin.y := self.documentView.frame.size.height - scrollInfo.nPos - self.contentSize.height
|
||||
else
|
||||
newOrigin.y := scrollInfo.nPos;
|
||||
end
|
||||
else
|
||||
begin
|
||||
self.lclHoriScrollInfo:= scrollInfo;
|
||||
newOrigin.x:= scrollInfo.nPos;
|
||||
end;
|
||||
self.contentView.setBoundsOrigin( newOrigin );
|
||||
end;
|
||||
|
||||
function TCocoaScrollView.initWithFrame(ns: NSRect): id;
|
||||
var
|
||||
sc : TCocoaScrollView;
|
||||
|
@ -1762,16 +1762,16 @@ begin
|
||||
// frame changed, Need to update another ScrollBar too
|
||||
if SbStyle=SB_Horz then begin
|
||||
if sc.lclVertScrollInfo.fMask<>0 then
|
||||
NSScrollViewSetScrollPos(sc, SB_Vert, sc.lclVertScrollInfo)
|
||||
sc.applyScrollInfo(SB_Vert, sc.lclVertScrollInfo)
|
||||
end else begin
|
||||
if sc.lclHoriScrollInfo.fMask<>0 then
|
||||
NSScrollViewSetScrollPos(sc, SB_Horz, sc.lclHoriScrollInfo);
|
||||
sc.applyScrollInfo(SB_Horz, sc.lclHoriScrollInfo);
|
||||
end;
|
||||
end;
|
||||
|
||||
// if frame changed, another ScrollBar has been updated
|
||||
if ScrollInfo.fMask and SIF_ALL > 0 then
|
||||
NSScrollViewSetScrollPos(sc, SBStyle, ScrollInfo);
|
||||
sc.applyScrollInfo(SBStyle, ScrollInfo);
|
||||
Result:= getNewScrollPos();
|
||||
end else if obj.isKindOfClass(TCocoaManualScrollView) then
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user