You've already forked lazarus-ccr
richmemo: cocoa implemented zoomfactor(), had to introduce TCocoaRichView to store the previous scaling factor
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4053 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -8,17 +8,21 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
CocoaAll, Classes, SysUtils,
|
CocoaAll, Classes, SysUtils,
|
||||||
LCLType, Graphics, Controls,
|
LCLType, Graphics, Controls, StdCtrls,
|
||||||
CocoaPrivate, CocoaUtils,
|
CocoaPrivate, CocoaUtils, CocoaWSCommon,
|
||||||
WSRichMemo, RichMemo;
|
WSRichMemo, RichMemo;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TCocoaRichView = objcclass(TCocoaTextView)
|
||||||
|
public
|
||||||
|
scale : Double;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TCocoaWSCustomRichMemo }
|
{ TCocoaWSCustomRichMemo }
|
||||||
|
|
||||||
TCocoaWSCustomRichMemo = class(TWSCustomRichMemo)
|
TCocoaWSCustomRichMemo = class(TWSCustomRichMemo)
|
||||||
public
|
public
|
||||||
// assumption is made that LCL creates NSTextView
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||||
|
|
||||||
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
|
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
|
||||||
var Params: TIntFontParams): Boolean; override;
|
var Params: TIntFontParams): Boolean; override;
|
||||||
@ -40,6 +44,7 @@ type
|
|||||||
class function GetParaTabs(const AWinControl: TWinControl; TextStart: integer;
|
class function GetParaTabs(const AWinControl: TWinControl; TextStart: integer;
|
||||||
var AStopList: TTabStopList): Boolean; override;
|
var AStopList: TTabStopList): Boolean; override;
|
||||||
|
|
||||||
|
class procedure SetZoomFactor(const AWinControl: TWinControl; AZoomFactor: Double); override;
|
||||||
|
|
||||||
class procedure InDelText(const AWinControl: TWinControl;
|
class procedure InDelText(const AWinControl: TWinControl;
|
||||||
const TextUTF8: String; DstStart, DstLen: Integer); override;
|
const TextUTF8: String; DstStart, DstLen: Integer); override;
|
||||||
@ -144,6 +149,78 @@ end;
|
|||||||
|
|
||||||
{ TCocoaWSCustomRichMemo }
|
{ TCocoaWSCustomRichMemo }
|
||||||
|
|
||||||
|
const
|
||||||
|
VerticalScrollerVisible: array[TScrollStyle] of boolean = (
|
||||||
|
{ssNone } false,
|
||||||
|
{ssHorizontal } false,
|
||||||
|
{ssVertical } true,
|
||||||
|
{ssBoth } true,
|
||||||
|
{ssAutoHorizontal} false,
|
||||||
|
{ssAutoVertical } true,
|
||||||
|
{ssAutoBoth } true
|
||||||
|
);
|
||||||
|
|
||||||
|
HorizontalScrollerVisible: array[TScrollStyle] of boolean = (
|
||||||
|
{ssNone } false,
|
||||||
|
{ssHorizontal } true,
|
||||||
|
{ssVertical } false,
|
||||||
|
{ssBoth } true,
|
||||||
|
{ssAutoHorizontal} true,
|
||||||
|
{ssAutoVertical } false,
|
||||||
|
{ssAutoBoth } true
|
||||||
|
);
|
||||||
|
|
||||||
|
ScrollerAutoHide: array[TScrollStyle] of boolean = (
|
||||||
|
{ssNone } false,
|
||||||
|
{ssHorizontal } false,
|
||||||
|
{ssVertical } false,
|
||||||
|
{ssBoth } false,
|
||||||
|
{ssAutoHorizontal} true,
|
||||||
|
{ssAutoVertical } true,
|
||||||
|
{ssAutoBoth } true
|
||||||
|
);
|
||||||
|
|
||||||
|
class function TCocoaWSCustomRichMemo.CreateHandle(
|
||||||
|
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
||||||
|
var
|
||||||
|
txt: TCocoaRichView;
|
||||||
|
ns: NSString;
|
||||||
|
scr: TCocoaScrollView;
|
||||||
|
nr:NSRect;
|
||||||
|
r:TRect;
|
||||||
|
begin
|
||||||
|
scr := TCocoaScrollView(NSView(TCocoaScrollView.alloc).lclInitWithCreateParams(AParams));
|
||||||
|
|
||||||
|
nr.origin.x:=0;
|
||||||
|
nr.origin.x:=0;
|
||||||
|
nr.size.height:=0;
|
||||||
|
nr.size.width:=AParams.Width;
|
||||||
|
|
||||||
|
txt := TCocoaRichView.alloc.initwithframe(nr);
|
||||||
|
txt.scale := 1.0;
|
||||||
|
|
||||||
|
scr.setDocumentView(txt);
|
||||||
|
|
||||||
|
scr.setHasVerticalScroller(VerticalScrollerVisible[TMemo(AWinControl).ScrollBars]);
|
||||||
|
scr.setHasHorizontalScroller(HorizontalScrollerVisible[TMemo(AWinControl).ScrollBars]);
|
||||||
|
scr.setAutohidesScrollers(ScrollerAutoHide[TMemo(AWinControl).ScrollBars]);
|
||||||
|
|
||||||
|
if TCustomMemo(AWinControl).BorderStyle=bsSingle then
|
||||||
|
scr.setBorderType(NSBezelBorder);
|
||||||
|
|
||||||
|
nr:=scr.documentVisibleRect;
|
||||||
|
txt.setFrame(nr);
|
||||||
|
txt.textContainer.setLineFragmentPadding(0);
|
||||||
|
|
||||||
|
txt.callback := TLCLCommonCallback.Create(txt, AWinControl);
|
||||||
|
ns := NSStringUtf8(AParams.Caption);
|
||||||
|
txt.setString(ns);
|
||||||
|
ns.release;
|
||||||
|
|
||||||
|
scr.callback := txt.callback;
|
||||||
|
Result := TLCLIntfHandle(scr);
|
||||||
|
end;
|
||||||
|
|
||||||
class function TCocoaWSCustomRichMemo.GetTextAttributes(
|
class function TCocoaWSCustomRichMemo.GetTextAttributes(
|
||||||
const AWinControl: TWinControl; TextStart: Integer; var Params: TIntFontParams
|
const AWinControl: TWinControl; TextStart: Integer; var Params: TIntFontParams
|
||||||
): Boolean;
|
): Boolean;
|
||||||
@ -458,6 +535,31 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TCocoaWSCustomRichMemo.SetZoomFactor(
|
||||||
|
const AWinControl: TWinControl; AZoomFactor: Double);
|
||||||
|
var
|
||||||
|
view : TCocoaRichView;
|
||||||
|
sz : NSSize;
|
||||||
|
begin
|
||||||
|
view:=TCocoaRichView(MemoTextView(AWinControl));
|
||||||
|
if not Assigned(view) then Exit;
|
||||||
|
|
||||||
|
// reset Scaling
|
||||||
|
if view.scale<>1.0 then begin
|
||||||
|
sz.width:=1/view.scale;
|
||||||
|
sz.height:=1/view.scale;
|
||||||
|
view.scaleUnitSquareToSize(sz);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// set new scaling
|
||||||
|
sz.width:=AZoomFactor;
|
||||||
|
sz.height:=AZoomFactor;
|
||||||
|
view.scaleUnitSquareToSize(sz);
|
||||||
|
view.layoutManager.ensureLayoutForTextContainer(view.textContainer);
|
||||||
|
|
||||||
|
view.scale:=AZoomFactor;
|
||||||
|
end;
|
||||||
|
|
||||||
class procedure TCocoaWSCustomRichMemo.InDelText(
|
class procedure TCocoaWSCustomRichMemo.InDelText(
|
||||||
const AWinControl: TWinControl; const TextUTF8: String; DstStart,
|
const AWinControl: TWinControl; const TextUTF8: String; DstStart,
|
||||||
DstLen: Integer);
|
DstLen: Integer);
|
||||||
|
Reference in New Issue
Block a user