summaryrefslogtreecommitdiff
path: root/BBB_GOFILES/zz_drawtext.go
diff options
context:
space:
mode:
Diffstat (limited to 'BBB_GOFILES/zz_drawtext.go')
-rw-r--r--BBB_GOFILES/zz_drawtext.go167
1 files changed, 167 insertions, 0 deletions
diff --git a/BBB_GOFILES/zz_drawtext.go b/BBB_GOFILES/zz_drawtext.go
new file mode 100644
index 0000000..a32b14b
--- /dev/null
+++ b/BBB_GOFILES/zz_drawtext.go
@@ -0,0 +1,167 @@
+// 19 august 2018
+
+// +build OMIT
+
+package main
+
+// TODO probably a bug in libui: changing the font away from skia leads to a crash
+
+import (
+ "github.com/andlabs/ui"
+)
+
+var (
+ fontButton *ui.FontButton
+ alignment *ui.Combobox
+
+ attrstr *ui.AttributedString
+)
+
+func appendWithAttributes(what string, attrs ...ui.Attribute) {
+ start := len(attrstr.String())
+ end := start + len(what)
+ attrstr.AppendUnattributed(what)
+ for _, a := range attrs {
+ attrstr.SetAttribute(a, start, end)
+ }
+}
+
+func makeAttributedString() {
+ attrstr = ui.NewAttributedString(
+ "Drawing strings with package ui is done with the ui.AttributedString and ui.DrawTextLayout objects.\n" +
+ "ui.AttributedString lets you have a variety of attributes: ")
+
+ appendWithAttributes("font family", ui.TextFamily("Courier New"))
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("font size", ui.TextSize(18))
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("font weight", ui.TextWeightBold)
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("font italicness", ui.TextItalicItalic)
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("font stretch", ui.TextStretchCondensed)
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("text color", ui.TextColor{0.75, 0.25, 0.5, 0.75})
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("text background color", ui.TextBackground{0.5, 0.5, 0.25, 0.5})
+ attrstr.AppendUnattributed(", ")
+
+ appendWithAttributes("underline style", ui.UnderlineSingle)
+ attrstr.AppendUnattributed(", ")
+
+ attrstr.AppendUnattributed("and ")
+ appendWithAttributes("underline color",
+ ui.UnderlineDouble,
+ ui.UnderlineColorCustom{1.0, 0.0, 0.5, 1.0})
+ attrstr.AppendUnattributed(". ")
+
+ attrstr.AppendUnattributed("Furthermore, there are attributes allowing for ")
+ appendWithAttributes("special underlines for indicating spelling errors",
+ ui.UnderlineSuggestion,
+ ui.UnderlineColorSpelling)
+ attrstr.AppendUnattributed(" (and other types of errors) ")
+
+ attrstr.AppendUnattributed("and control over OpenType features such as ligatures (for instance, ")
+ appendWithAttributes("afford", ui.OpenTypeFeatures{
+ ui.ToOpenTypeTag('l', 'i', 'g', 'a'): 0,
+ })
+ attrstr.AppendUnattributed(" vs. ")
+ appendWithAttributes("afford", ui.OpenTypeFeatures{
+ ui.ToOpenTypeTag('l', 'i', 'g', 'a'): 1,
+ })
+ attrstr.AppendUnattributed(").\n")
+
+ attrstr.AppendUnattributed("Use the controls opposite to the text to control properties of the text.")
+}
+
+type areaHandler struct{}
+
+func (areaHandler) Draw(a *ui.Area, p *ui.AreaDrawParams) {
+ tl := ui.DrawNewTextLayout(&ui.DrawTextLayoutParams{
+ String: attrstr,
+ DefaultFont: fontButton.Font(),
+ Width: p.AreaWidth,
+ Align: ui.DrawTextAlign(alignment.Selected()),
+ })
+ defer tl.Free()
+ p.Context.Text(tl, 0, 0)
+}
+
+func (areaHandler) MouseEvent(a *ui.Area, me *ui.AreaMouseEvent) {
+ // do nothing
+}
+
+func (areaHandler) MouseCrossed(a *ui.Area, left bool) {
+ // do nothing
+}
+
+func (areaHandler) DragBroken(a *ui.Area) {
+ // do nothing
+}
+
+func (areaHandler) KeyEvent(a *ui.Area, ke *ui.AreaKeyEvent) (handled bool) {
+ // reject all keys
+ return false
+}
+
+func setupUI() {
+ makeAttributedString()
+
+ mainwin := ui.NewWindow("libui Text-Drawing Example", 640, 480, true)
+ mainwin.SetMargined(true)
+ mainwin.OnClosing(func(*ui.Window) bool {
+ mainwin.Destroy()
+ ui.Quit()
+ return false
+ })
+ ui.OnShouldQuit(func() bool {
+ mainwin.Destroy()
+ return true
+ })
+
+ hbox := ui.NewHorizontalBox()
+ hbox.SetPadded(true)
+ mainwin.SetChild(hbox)
+
+ vbox := ui.NewVerticalBox()
+ vbox.SetPadded(true)
+ hbox.Append(vbox, false)
+
+ area := ui.NewArea(areaHandler{})
+
+ fontButton = ui.NewFontButton()
+ fontButton.OnChanged(func(*ui.FontButton) {
+ area.QueueRedrawAll()
+ })
+ vbox.Append(fontButton, false)
+
+ form := ui.NewForm()
+ form.SetPadded(true)
+ // TODO on OS X if this is set to 1 then the window can't resize; does the form not have the concept of stretchy trailing space?
+ vbox.Append(form, false)
+
+ alignment = ui.NewCombobox()
+ // note that the items match with the values of the uiDrawTextAlign values
+ alignment.Append("Left")
+ alignment.Append("Center")
+ alignment.Append("Right")
+ alignment.SetSelected(0) // start with left alignment
+ alignment.OnSelected(func(*ui.Combobox) {
+ area.QueueRedrawAll()
+ })
+ form.Append("Alignment", alignment, false)
+
+ hbox.Append(area, true)
+
+ mainwin.Show()
+}
+
+func main() {
+ ui.Main(setupUI)
+}