Difference between revisions of "Cocoa Internals/Buttons"

From Lazarus wiki
Jump to navigationJump to search
m
Line 25: Line 25:
 
There are number of styles for buttons named "Textured" (i.e. NSTexturedRoundedBezelStyle, NSTexturedSquareBezelStyle). These buttons a designed to be used in "Metal" aka "Textured" style windows, and Window Frames (borders/tool bars)
 
There are number of styles for buttons named "Textured" (i.e. NSTexturedRoundedBezelStyle, NSTexturedSquareBezelStyle). These buttons a designed to be used in "Metal" aka "Textured" style windows, and Window Frames (borders/tool bars)
 
Thus these styles should not be used.
 
Thus these styles should not be used.
 +
==Smart Style Selection==
 +
In macOS guidelines, style of a button should be used depending on the placement/usage of a button.
 +
 +
In LCL design, there's not such thing as "style". It's presumed that the button would look the same, no matter where on the screen it's or what the button's parent.
 +
(It's not uncommon to design the interface in such a way).
 +
 +
Thus some LCLs might look foreign to macOS native applications, just because wrong button styles are used. I.e. a push button is used in a tool bar.
 +
 +
There are a few approaches what could be used:
 +
* adding new TxxxButton classes into LCL (quite wasteful, and might not be applicable for other OSes)
 +
* adding a style property to TBitBtn button (non delphi compatible)
 +
* changes styles within Cocoa widgetset, automatically, depending on the placement of the button.
 +
 
==See Also==
 
==See Also==
 
*[[Cocoa Internals]]
 
*[[Cocoa Internals]]

Revision as of 06:12, 17 December 2017

Despite of being a very basic control, buttons are complicated topic on macOS.

LCL Button OSX Button / Bezel Description
TButton Push Button

NSRoundedBezelStyle

Per macOS design guidelines, Push buttons should only have labels on them, and no Icons. This is exactly, how LCL TButton behaves.

The biggest issue, is that macOS Push Buttons are of the fixed height. While LCL buttons can be any height.

The approach similar to Carbon implementation could be used - after a certain hight the button changes its bezel.

TBitBtn Image Button

NSRegularSquareBezelStyle

TBitBtn is a button that could hold an image in it's body.

The closest (not deprecated) to such tasks is NSRegularSquareBezelStyle in macOS

Textured styles

There are number of styles for buttons named "Textured" (i.e. NSTexturedRoundedBezelStyle, NSTexturedSquareBezelStyle). These buttons a designed to be used in "Metal" aka "Textured" style windows, and Window Frames (borders/tool bars) Thus these styles should not be used.

Smart Style Selection

In macOS guidelines, style of a button should be used depending on the placement/usage of a button.

In LCL design, there's not such thing as "style". It's presumed that the button would look the same, no matter where on the screen it's or what the button's parent. (It's not uncommon to design the interface in such a way).

Thus some LCLs might look foreign to macOS native applications, just because wrong button styles are used. I.e. a push button is used in a tool bar.

There are a few approaches what could be used:

  • adding new TxxxButton classes into LCL (quite wasteful, and might not be applicable for other OSes)
  • adding a style property to TBitBtn button (non delphi compatible)
  • changes styles within Cocoa widgetset, automatically, depending on the placement of the button.

See Also