规范 - 如何更改演示者的颜色(或背景颜色)

Spec - how to change the color (or background color) of a presenter

我想更改SpTextInputFieldPresenter

的背景颜色

例如为了提供输入的视觉反馈,我想对 whenTextChangedDo: 做出反应并更改字段的背景颜色以显示输入是正确还是错误。我知道这不是对每个人都是最好的,但我还是想试试。
没有黑客怎么办?

规范预览了使用样式来更改(在一定程度上)组件的外观。 样式被添加到应用程序(SpApplication 的实例或其子项),并且可以由作为应用程序一部分的任何演示者使用。
样式可以看作 CSS 样式表,在 Gtk 的情况下它们实际上是 CSS 样式表,但在 Morphic 后端的情况下它们有一个完全不同的实现(你可以看到你可以定义的所有属性在 SpPropertyStyle 层级中。

下面的代码将展示如何

  • 声明样式(以脚本方式,在生产场景中,样式可能会在应用程序的配置中定义)。
  • 通过添加或删除它们来使用它们。
app := SpApplication new.

"If using Morphic"
app addStyleSheetFromString: '.application [
    .red [ Draw { #color: #red } ],
    .green [ Draw { #color: #green } ]  
]'.

"If using GTK (you need to choose one, both options are not possible at the same time)"
app useBackend: #Gtk.
app addCSSProviderFromString: '
.red { background-color: red }
.green { background-color: green }  
'.
 
presenter := SpPresenter new.
presenter application: app.

presenter layout: (SpBoxLayout newTopToBottom
    add: (textPresenter := presenter newTextInput) expand: false;
    addLast: (SpBoxLayout newLeftToRight 
            add: (presenter newButton
                label: 'Red';
                action: [ textPresenter removeStyle: 'green'; addStyle: 'red' ];
                yourself);
            add: (presenter newButton
                label: 'Green';
                action: [ textPresenter removeStyle: 'red'; addStyle: 'green' ];
                yourself);
            yourself)
        expand: false;
    yourself).
    
presenter asWindow 
    title: 'Example applying styles';
    open

这将产生(使用 Gtk3 后端)此输出: