Files
gio-patched/io/semantic/semantic.go
T
Elias Naur e1b3928819 io/semantic: [API] replace DisabledOp with EnabledOp
The double-negative DisabledOp is harder to understand than a
straightforward EnabledOp. Note that the absence of an EnabledOp
implies still means that the widget is enabled.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2023-10-06 18:08:52 -05:00

92 lines
2.0 KiB
Go

// SPDX-License-Identifier: Unlicense OR MIT
// Package semantic provides operations for semantic descriptions of a user
// interface, to facilitate presentation and interaction in external software
// such as screen readers.
//
// Semantic descriptions are organized in a tree, with clip operations as
// nodes. Operations in this package are associated with the current semantic
// node, that is the most recent pushed clip operation.
package semantic
import (
"gioui.org/internal/ops"
"gioui.org/op"
)
// LabelOp provides the content of a textual component.
type LabelOp string
// DescriptionOp describes a component.
type DescriptionOp string
// ClassOp provides the component class.
type ClassOp int
const (
Unknown ClassOp = iota
Button
CheckBox
Editor
RadioButton
Switch
)
// SelectedOp describes the selected state for components that have
// boolean state.
type SelectedOp bool
// EnabledOp describes the enabled state.
type EnabledOp bool
func (l LabelOp) Add(o *op.Ops) {
data := ops.Write1String(&o.Internal, ops.TypeSemanticLabelLen, string(l))
data[0] = byte(ops.TypeSemanticLabel)
}
func (d DescriptionOp) Add(o *op.Ops) {
data := ops.Write1String(&o.Internal, ops.TypeSemanticDescLen, string(d))
data[0] = byte(ops.TypeSemanticDesc)
}
func (c ClassOp) Add(o *op.Ops) {
data := ops.Write(&o.Internal, ops.TypeSemanticClassLen)
data[0] = byte(ops.TypeSemanticClass)
data[1] = byte(c)
}
func (s SelectedOp) Add(o *op.Ops) {
data := ops.Write(&o.Internal, ops.TypeSemanticSelectedLen)
data[0] = byte(ops.TypeSemanticSelected)
if s {
data[1] = 1
}
}
func (e EnabledOp) Add(o *op.Ops) {
data := ops.Write(&o.Internal, ops.TypeSemanticEnabledLen)
data[0] = byte(ops.TypeSemanticEnabled)
if e {
data[1] = 1
}
}
func (c ClassOp) String() string {
switch c {
case Unknown:
return "Unknown"
case Button:
return "Button"
case CheckBox:
return "CheckBox"
case Editor:
return "Editor"
case RadioButton:
return "RadioButton"
case Switch:
return "Switch"
default:
panic("invalid ClassOp")
}
}