mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-08 05:19:08 +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 CocoaScrollBarSetScrollInfo(bar: TCocoaScrollBar; const ScrollInfo: TScrollInfo): Integer;
|
||||||
function CocoaScrollBarGetScrollInfo(bar: TCocoaScrollBar; var ScrollInfo: TScrollInfo): Boolean;
|
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;
|
function CocoaPromptUser(const DialogCaption, DialogMessage: String;
|
||||||
DialogType: longint; Buttons: PLongint; ButtonCount, DefaultIndex,
|
DialogType: longint; Buttons: PLongint; ButtonCount, DefaultIndex,
|
||||||
@ -412,50 +410,6 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
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 }
|
{ TModalSession }
|
||||||
|
|
||||||
constructor TModalSession.Create(awin: NSWindow; asess: NSModalSession;
|
constructor TModalSession.Create(awin: NSWindow; asess: NSModalSession;
|
||||||
|
@ -61,6 +61,7 @@ type
|
|||||||
procedure lclInvalidate; override;
|
procedure lclInvalidate; override;
|
||||||
|
|
||||||
procedure fillScrollInfo(barFlag: Integer; var scrollInfo: TScrollInfo); message 'fillScrollInfo:barFlag:';
|
procedure fillScrollInfo(barFlag: Integer; var scrollInfo: TScrollInfo); message 'fillScrollInfo:barFlag:';
|
||||||
|
procedure applyScrollInfo(barFlag: Integer; const scrollInfo: TScrollInfo); message 'applyScrollInfo:barFlag:';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaManualScrollView }
|
{ TCocoaManualScrollView }
|
||||||
@ -750,6 +751,30 @@ begin
|
|||||||
fillScrollerScrollInfo(docSize.width, self.contentSize.width, self.horizontalScroller);
|
fillScrollerScrollInfo(docSize.width, self.contentSize.width, self.horizontalScroller);
|
||||||
end;
|
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;
|
function TCocoaScrollView.initWithFrame(ns: NSRect): id;
|
||||||
var
|
var
|
||||||
sc : TCocoaScrollView;
|
sc : TCocoaScrollView;
|
||||||
|
@ -1762,16 +1762,16 @@ begin
|
|||||||
// frame changed, Need to update another ScrollBar too
|
// frame changed, Need to update another ScrollBar too
|
||||||
if SbStyle=SB_Horz then begin
|
if SbStyle=SB_Horz then begin
|
||||||
if sc.lclVertScrollInfo.fMask<>0 then
|
if sc.lclVertScrollInfo.fMask<>0 then
|
||||||
NSScrollViewSetScrollPos(sc, SB_Vert, sc.lclVertScrollInfo)
|
sc.applyScrollInfo(SB_Vert, sc.lclVertScrollInfo)
|
||||||
end else begin
|
end else begin
|
||||||
if sc.lclHoriScrollInfo.fMask<>0 then
|
if sc.lclHoriScrollInfo.fMask<>0 then
|
||||||
NSScrollViewSetScrollPos(sc, SB_Horz, sc.lclHoriScrollInfo);
|
sc.applyScrollInfo(SB_Horz, sc.lclHoriScrollInfo);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// if frame changed, another ScrollBar has been updated
|
// if frame changed, another ScrollBar has been updated
|
||||||
if ScrollInfo.fMask and SIF_ALL > 0 then
|
if ScrollInfo.fMask and SIF_ALL > 0 then
|
||||||
NSScrollViewSetScrollPos(sc, SBStyle, ScrollInfo);
|
sc.applyScrollInfo(SBStyle, ScrollInfo);
|
||||||
Result:= getNewScrollPos();
|
Result:= getNewScrollPos();
|
||||||
end else if obj.isKindOfClass(TCocoaManualScrollView) then
|
end else if obj.isKindOfClass(TCocoaManualScrollView) then
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user