Good news on both counts - background and text colours are both done and will be in the next release.
Button.BackgroundColour assigns a custom background; the hover, pressed and disabled states are derived from your colour so the button still gives proper interaction feedback, and an opaque background automatically switches the caption between black and white for readability. HasBackgroundColour = False returns the button to the live theme without discarding your colour.
New as of the next release, Button.TextColour gives you direct control of the caption (and symbol) colour:
saveBtn.BackgroundColour = Colour.RGB(0, 120, 212)
saveBtn.TextColour = Colour.RGB(255, 255, 255)
- An assigned text colour keeps its exact value in every state - hover and pressed don't shift it - and it takes precedence over the automatic black/white choice, so contrast is in your hands when you set both.
HasTextColour = False restores the default caption colour without discarding the stored colour, the same convention as the background.
- With neither colour assigned, the button keeps following the light and dark theme exactly as before.
Both properties are in the Window Designer's inspector too, with the colour picker starting from whatever the button is currently painting.
Because Objo's buttons are our own themed controls rather than the platform's native push buttons, the colours apply identically on macOS, Windows and Linux - no per-platform quirks.
While wiring this up we also fixed a related trap on the text controls: assigning TextColour on a Label, Link, TextField, TextArea, SearchField or NumericTextField used to pin the colour permanently with no way back to the default. They all have HasTextColour now, so False restores the theme colour (the standard link blue for Links) without losing the stored value.
Tracked on Feedback: background colours, TextColour and HasTextColour, theme restore on the text controls.