Split Label into a non-aligned standalone label and an aligned regular label. Implemented on GTK+. Now to write the test.
This commit is contained in:
parent
3711953626
commit
e00eebf580
|
@ -247,8 +247,16 @@ func gtk_label_new() *C.GtkWidget {
|
||||||
// there's a function gtk_label_set_justify() that indicates GTK_JUSTIFY_LEFT is the default
|
// there's a function gtk_label_set_justify() that indicates GTK_JUSTIFY_LEFT is the default
|
||||||
// but this actually is NOT the control justification, just the multi-line justification
|
// but this actually is NOT the control justification, just the multi-line justification
|
||||||
// so we need to do THIS instead
|
// so we need to do THIS instead
|
||||||
|
// this will valign to the center, which is what the HIG says (https://developer.gnome.org/hig-book/3.4/design-text-labels.html.en) for all controls that label to the side; thankfully this means we don't need to do any extra positioning magic
|
||||||
// this will also valign to the top
|
// this will also valign to the top
|
||||||
// thanks to mclasen in irc.gimp.net/#gtk+
|
// thanks to mclasen in irc.gimp.net/#gtk+
|
||||||
|
C.gtk_misc_set_alignment((*C.GtkMisc)(unsafe.Pointer(label)), 0, 0.5)
|
||||||
|
return label
|
||||||
|
}
|
||||||
|
|
||||||
|
func gtk_label_new_standalone() *C.GtkWidget {
|
||||||
|
label := gtk_label_new()
|
||||||
|
// this will valign to the top
|
||||||
C.gtk_misc_set_alignment((*C.GtkMisc)(unsafe.Pointer(label)), 0, 0)
|
C.gtk_misc_set_alignment((*C.GtkMisc)(unsafe.Pointer(label)), 0, 0)
|
||||||
return label
|
return label
|
||||||
}
|
}
|
||||||
|
|
16
label.go
16
label.go
|
@ -8,15 +8,18 @@ import (
|
||||||
|
|
||||||
// A Label is a static line of text used to mark other controls.
|
// A Label is a static line of text used to mark other controls.
|
||||||
// Label text is drawn on a single line; text that does not fit is truncated.
|
// Label text is drawn on a single line; text that does not fit is truncated.
|
||||||
// TODO vertical alignment
|
// A Label can appear in one of two places: bound to a control or standalone.
|
||||||
|
// This determines the vertical alignment of the label.
|
||||||
type Label struct {
|
type Label struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
created bool
|
created bool
|
||||||
sysData *sysData
|
sysData *sysData
|
||||||
initText string
|
initText string
|
||||||
|
standalone bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLabel creates a new Label with the specified text.
|
// NewLabel creates a new Label with the specified text.
|
||||||
|
// The label is set to be bound to a control, so its vertical position depends on its vertical cell size in an implementation-defined manner.
|
||||||
func NewLabel(text string) *Label {
|
func NewLabel(text string) *Label {
|
||||||
return &Label{
|
return &Label{
|
||||||
sysData: mksysdata(c_label),
|
sysData: mksysdata(c_label),
|
||||||
|
@ -24,6 +27,16 @@ func NewLabel(text string) *Label {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewStandaloneLabel creates a new Label with the specified text.
|
||||||
|
// The label is set to be standalone, so its vertical position will always be at the top of the vertical space assigned to it.
|
||||||
|
func NewStandaloneLabel(text string) *Label {
|
||||||
|
return &Label{
|
||||||
|
sysData: mksysdata(c_label),
|
||||||
|
initText: text,
|
||||||
|
standalone: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SetText sets the Label's text.
|
// SetText sets the Label's text.
|
||||||
func (l *Label) SetText(text string) {
|
func (l *Label) SetText(text string) {
|
||||||
l.lock.Lock()
|
l.lock.Lock()
|
||||||
|
@ -51,6 +64,7 @@ func (l *Label) make(window *sysData) error {
|
||||||
l.lock.Lock()
|
l.lock.Lock()
|
||||||
defer l.lock.Unlock()
|
defer l.lock.Unlock()
|
||||||
|
|
||||||
|
l.sysData.alternate = l.standalone
|
||||||
err := l.sysData.make(window)
|
err := l.sysData.make(window)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -82,6 +82,7 @@ var classTypes = [nctypes]*classData{
|
||||||
},
|
},
|
||||||
c_label: &classData{
|
c_label: &classData{
|
||||||
make: gtk_label_new,
|
make: gtk_label_new,
|
||||||
|
makeAlt: gtk_label_new_standalone,
|
||||||
setText: gtk_label_set_text,
|
setText: gtk_label_set_text,
|
||||||
text: gtk_label_get_text,
|
text: gtk_label_get_text,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue