diff options
| author | Pietro Gagliardi <[email protected]> | 2018-09-02 09:47:40 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2018-09-02 09:48:03 -0400 |
| commit | 4c4827d34fdab7953e3dae6659ea029420fd1fa5 (patch) | |
| tree | a644b73c1fca713305b75c8fa9a395780d7ed7fd /examples/drawtext.go | |
| parent | 7b7a2a7ef07f5093dc20120122afb84da94a1459 (diff) | |
Moved the examples into their final places.
Diffstat (limited to 'examples/drawtext.go')
| -rw-r--r-- | examples/drawtext.go | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/examples/drawtext.go b/examples/drawtext.go new file mode 100644 index 0000000..a32b14b --- /dev/null +++ b/examples/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) +} |
