mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 18:09:23 +02:00
* fixes tab control left arrow drawing for Leopard (and higher?)
git-svn-id: trunk@19567 -
This commit is contained in:
parent
2e18113fd7
commit
02ba3921d6
@ -250,6 +250,50 @@ end;
|
|||||||
const
|
const
|
||||||
ArrowSize = 16;
|
ArrowSize = 16;
|
||||||
|
|
||||||
|
{------------------------------------------------------------------------------
|
||||||
|
Name: CarbonTabsPrevArrow_Reverse
|
||||||
|
Reverses carbon arrow CGContext, so the right pointing arrow reversed to left
|
||||||
|
It's required in Leopard only, there left arrow is suppressed by Apple.
|
||||||
|
------------------------------------------------------------------------------}
|
||||||
|
function CarbonTabsPrevArrow_Reverse(ANextHandler: EventHandlerCallRef;
|
||||||
|
AEvent: EventRef;
|
||||||
|
AWidget: TCarbonWidget): OSStatus; {$IFDEF darwin}mwpascal;{$ENDIF}
|
||||||
|
var
|
||||||
|
Context : CGContextRef;
|
||||||
|
layer : CGLayerRef;
|
||||||
|
lCtx : CGContextRef;
|
||||||
|
sz : CGSize;
|
||||||
|
pnt : CGPoint;
|
||||||
|
w : LongWord;
|
||||||
|
begin
|
||||||
|
{$IFDEF VerboseControlEvent}
|
||||||
|
DebugLn('CarbonTabsPrevArrow_Reverse: ', DbgSName(AWidget.LCLObject));
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
Result := GetEventParameter(AEvent, kEventParamCGContextRef, typeCGContextRef, nil, sizeof(Context), nil, @Context );
|
||||||
|
if Result <> 0 then begin
|
||||||
|
CallNextEventHandler(ANextHandler, AEvent);
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
sz.height := ArrowSize; sz.width := ArrowSize;
|
||||||
|
layer := CGLayerCreateWithContext(Context, sz, nil);
|
||||||
|
try
|
||||||
|
lCtx := CGLayerGetContext(layer);
|
||||||
|
SetEventParameter(AEvent, kEventParamCGContextRef, typeCGContextRef, sizeof(lCtx), @lCtx);
|
||||||
|
|
||||||
|
Result := CallNextEventHandler(ANextHandler, AEvent);
|
||||||
|
|
||||||
|
w := ArrowSize;
|
||||||
|
pnt.x := w-0-ArrowSize; pnt.y := 1;
|
||||||
|
CGContextTranslateCTM(Context, w, 0);
|
||||||
|
CGContextScaleCTM(Context, -1, 1);
|
||||||
|
CGContextDrawLayerAtPoint(Context, pnt, layer);
|
||||||
|
finally
|
||||||
|
CGLayerRelease(layer);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
Method: TCarbonTabsControl.GetPrevArrowBounds
|
Method: TCarbonTabsControl.GetPrevArrowBounds
|
||||||
Returns: Bounds of prev arrow
|
Returns: Bounds of prev arrow
|
||||||
@ -302,6 +346,8 @@ var
|
|||||||
TabEntry: ControlTabEntry;
|
TabEntry: ControlTabEntry;
|
||||||
R: TRect;
|
R: TRect;
|
||||||
TmpSpec: EventTypeSpec;
|
TmpSpec: EventTypeSpec;
|
||||||
|
Err: OSStatus;
|
||||||
|
Ver: SInt32;
|
||||||
begin
|
begin
|
||||||
case (LCLObject as TCustomNotebook).TabPosition of
|
case (LCLObject as TCustomNotebook).TabPosition of
|
||||||
tpTop: Direction := kControlTabDirectionNorth;
|
tpTop: Direction := kControlTabDirectionNorth;
|
||||||
@ -357,7 +403,15 @@ begin
|
|||||||
InstallControlEventHandler(FNextArrow,
|
InstallControlEventHandler(FNextArrow,
|
||||||
RegisterEventHandler(@CarbonTabsNextArrow_Track),
|
RegisterEventHandler(@CarbonTabsNextArrow_Track),
|
||||||
1, @TmpSpec, Pointer(Self), nil);
|
1, @TmpSpec, Pointer(Self), nil);
|
||||||
|
|
||||||
|
Err:=Gestalt(gestaltSystemVersion, Ver);
|
||||||
|
if (Err <> 0) or (Ver >= $1040) then begin
|
||||||
|
TmpSpec := MakeEventSpec(kEventClassControl, kEventControlDraw);
|
||||||
|
InstallControlEventHandler(FPrevArrow,
|
||||||
|
RegisterEventHandler(@CarbonTabsPrevArrow_Reverse),
|
||||||
|
1, @TmpSpec, Pointer(Self), nil);
|
||||||
|
end;
|
||||||
|
|
||||||
FFirstIndex := 0;
|
FFirstIndex := 0;
|
||||||
FLastIndex := 0;
|
FLastIndex := 0;
|
||||||
FTabIndex := -1;
|
FTabIndex := -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user