Accessing LiveCode Properties in a Widget
When writing a widget you create any properties your widget needs. As well as these widget properties you can also link your widget to standard LiveCode control properties, such as font, background color etc.
All controls in LiveCode, both widgets and classic controls, have a set of basic properties which are always present and do not need to be implemented when writing a widget. Any widget you create will always have these properties in its Property Inspector.
The properties that all widgets have by default are
- Custom properties
- custom property sets
- custom properties
- Size and Position
Although all controls, including widgets, have all the basic properties some work automatically and some need to be taken into account when you draw the widget.
For example the width property works automatically but the textSize property requires some extra handling when the widget is drawn.
The two basic text properties all controls have are textFont and textSize.
To use the values of these properties when drawing the widget you get the effective text properties of the widget using my font and apply the values when drawing the widget.
public handler OnPaint() ... set the font of this canvas to my font end handler
You can also link to other standard LiveCode properties beyond the basic, built in set.
For example we might want to set the Text fill of a widget.
Text fill, or foregroundColor to use the property name, is a standard LiveCode property but it not part of the basic set.
To access it we have to specify that the widget has the property, but we do not have to define the property itself.
To define a LiveCode property in a widget you provide metadata, but do not need to define the property within the widget.
This will give the widget access to the foregroundColor property, and it will be settable in the Property Inspector.
metadata foregroundColor.editor is "com.livecode.pi.color" metadata foregroundColor.default is "" metadata foregroundColor.section is "Colors" metadata foregroundColor.label is "Text fill"
As well as providing the metadata for the property the OnPaint handler must use the value of the property.
public handler OnPaint() ... set the font of this canvas to my font set the paint of this canvas to my foreground paint end handler