github.com/Seikaijyu/gio@v0.0.1/io/semantic/semantic.go (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 // Package semantic provides operations for semantic descriptions of a user 4 // interface, to facilitate presentation and interaction in external software 5 // such as screen readers. 6 // 7 // Semantic descriptions are organized in a tree, with clip operations as 8 // nodes. Operations in this package are associated with the current semantic 9 // node, that is the most recent pushed clip operation. 10 package semantic 11 12 import ( 13 "github.com/Seikaijyu/gio/internal/ops" 14 "github.com/Seikaijyu/gio/op" 15 ) 16 17 // LabelOp provides the content of a textual component. 18 type LabelOp string 19 20 // DescriptionOp describes a component. 21 type DescriptionOp string 22 23 // ClassOp provides the component class. 24 type ClassOp int 25 26 const ( 27 Unknown ClassOp = iota 28 Button 29 CheckBox 30 Editor 31 RadioButton 32 Switch 33 ) 34 35 // SelectedOp describes the selected state for components that have 36 // boolean state. 37 type SelectedOp bool 38 39 // EnabledOp describes the enabled state. 40 type EnabledOp bool 41 42 func (l LabelOp) Add(o *op.Ops) { 43 data := ops.Write1String(&o.Internal, ops.TypeSemanticLabelLen, string(l)) 44 data[0] = byte(ops.TypeSemanticLabel) 45 } 46 47 func (d DescriptionOp) Add(o *op.Ops) { 48 data := ops.Write1String(&o.Internal, ops.TypeSemanticDescLen, string(d)) 49 data[0] = byte(ops.TypeSemanticDesc) 50 } 51 52 func (c ClassOp) Add(o *op.Ops) { 53 data := ops.Write(&o.Internal, ops.TypeSemanticClassLen) 54 data[0] = byte(ops.TypeSemanticClass) 55 data[1] = byte(c) 56 } 57 58 func (s SelectedOp) Add(o *op.Ops) { 59 data := ops.Write(&o.Internal, ops.TypeSemanticSelectedLen) 60 data[0] = byte(ops.TypeSemanticSelected) 61 if s { 62 data[1] = 1 63 } 64 } 65 66 func (e EnabledOp) Add(o *op.Ops) { 67 data := ops.Write(&o.Internal, ops.TypeSemanticEnabledLen) 68 data[0] = byte(ops.TypeSemanticEnabled) 69 if e { 70 data[1] = 1 71 } 72 } 73 74 func (c ClassOp) String() string { 75 switch c { 76 case Unknown: 77 return "Unknown" 78 case Button: 79 return "Button" 80 case CheckBox: 81 return "CheckBox" 82 case Editor: 83 return "Editor" 84 case RadioButton: 85 return "RadioButton" 86 case Switch: 87 return "Switch" 88 default: 89 panic("invalid ClassOp") 90 } 91 }