Difference between revisions of "Carbon interface internals"

From Lazarus wiki
Jump to navigationJump to search
Line 1: Line 1:
 
{{Carbon interface internals}}
 
{{Carbon interface internals}}
 
+
==Introduction==
 
This page gives an overview of the LCL Carbon interface for Mac OS X and will help new developers.
 
This page gives an overview of the LCL Carbon interface for Mac OS X and will help new developers.
  
 
For installation and creating a first Carbon application refer to [[Carbon Interface]].
 
For installation and creating a first Carbon application refer to [[Carbon Interface]].
  
 +
{{Other Interfaces}}
 
== Documentation about Carbon ==
 
== Documentation about Carbon ==
  

Revision as of 15:14, 14 February 2008

Deutsch (de) English (en)

macOSlogo.png

This article applies to macOS only.

See also: Multiplatform Programming Guide

Apple iOS new.svg

This article applies to iOS only.

See also: Multiplatform Programming Guide


Introduction

This page gives an overview of the LCL Carbon interface for Mac OS X and will help new developers.

For installation and creating a first Carbon application refer to Carbon Interface.

Other Interfaces

Platform specific Tips

Interface Development Articles

Documentation about Carbon

  • Free Pascal's Carbon API unit is FPCMacOSAll.pas in /usr/local/share/fpcsrc/packages/extra/univint.

Carbon interface development basics

  • Target Mac OS X version is 10.4
  • Avoid using obsolete or deprecated APIs and functions (e. g. QuickDraw vs. Quartz 2D)
  • Use object approach
  • Check Carbon calls result with OSError function
  • Assume UTF-8 encoded strings between LCL and Carbon widgetset (for future Lazarus Unicode support)

What is already working ?

Working components in the Carbon interface

What needs to be done next?

See Bug Tracker Carbon open issues

Carbon IDE Bugs

Item Note Dependencies Responsible
'...' buttons in dialogs Now they are too large I think
OK/Cancel Many dialogs have non-Mac check-X glyphs
Menu bar Too wide for 1024x768 display resolution
Lazarus menu Help About and app prefs (Environment options) should be accessible here
Menus Many missing or non-standard menu shortcuts:

File New should be Cmd+N
File Save As should be Shift+Cmd+S
File Quit should be Cmd+Q
Search Find should be Cmd+F
Search Find Next should be Cmd+G
Search Find Previous should be Shift+Cmd+G
(Goto line and Procedure List need to be reassigned)
Option+Cmd+F does not bring up Search Results
F11 behaves weird!

See Bug Tracker Carbon IDE open issues

Compatibility issues

Go to Carbon_interface_issues.

How to add a new control

For example TButton.

TButton is defined in lcl/buttons.pp. This is the platform independent part of the LCL, which is used by the normal LCL programmer.

Its widgetset class is in lcl/widgetset/wsbuttons.pp. This is the platform independent base for all widgetsets (carbon, gtk, win32, ...).

Its Carbon interface class is in lcl/interfaces/carbon/carbonwsbuttons.pp:

 TCarbonWSButton = class(TWSButton)
 private
 protected
 public
   class function  CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
 end;

Every WS class that actually implements something must be registered. See the initialization section at the end of the carbonwsXXX.pp unit:

 RegisterWSComponent(TCustomButton, TCarbonWSButton);

TCarbonWSButton overrides CreateHandle to create a Carbon button helper class called TCarbonButton in carbonprivate.pp, which really creates the button control in the Carbon and installs event handlers.