summaryrefslogtreecommitdiff
path: root/redo/controls_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'redo/controls_unix.go')
-rw-r--r--redo/controls_unix.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/redo/controls_unix.go b/redo/controls_unix.go
index 0761fa1..8e13767 100644
--- a/redo/controls_unix.go
+++ b/redo/controls_unix.go
@@ -13,6 +13,9 @@ import (
// extern void checkboxToggled(GtkToggleButton *, gpointer);
import "C"
+// TODOs:
+// - standalone label on its own: should it be centered or not?
+
type widgetbase struct {
widget *C.GtkWidget
}
@@ -153,3 +156,53 @@ func (t *textField) SetText(text string) {
defer freegstr(ctext)
C.gtk_entry_set_text(t.entry, ctext)
}
+
+type label struct {
+ *widgetbase
+ misc *C.GtkMisc
+ label *C.GtkLabel
+ standalone bool
+}
+
+func finishNewLabel(text string, standalone bool) *label {
+ ctext := togstr(text)
+ defer freegstr(ctext)
+ widget := C.gtk_label_new(ctext)
+ return &label{
+ widgetbase: newWidget(widget),
+ misc: (*C.GtkMisc)(unsafe.Pointer(widget)),
+ label: (*C.GtkLabel)(unsafe.Pointer(widget)),
+ standalone: standalone,
+ }
+}
+
+func newLabel(text string) Label {
+ return finishNewLabel(text, false)
+}
+
+func newStandaloneLabel(text string) Label {
+ return finishNewLabel(text, true)
+}
+
+func (l *label) Text() string {
+ return fromgstr(C.gtk_label_get_text(l.label))
+}
+
+func (l *label) SetText(text string) {
+ ctext := togstr(text)
+ defer freegstr(ctext)
+ C.gtk_label_set_text(l.label, ctext)
+}
+
+func (l *label) commitResize(c *allocation, d *sizing) {
+ if !l.standalone && c.neighbor != nil {
+ c.neighbor.getAuxResizeInfo(d)
+ if d.shouldVAlignTop {
+ // TODO should it be center-aligned to the first line or not
+ C.gtk_misc_set_alignment(l.misc, 0, 0)
+ } else {
+ C.gtk_misc_set_alignment(l.misc, 0, 0.5)
+ }
+ }
+ l.widgetbase.commitResize(c, d)
+}