More go fmt.
This commit is contained in:
parent
94f9684e68
commit
3c1a61049b
34
sysdata.go
34
sysdata.go
|
@ -2,7 +2,7 @@
|
|||
|
||||
package ui
|
||||
|
||||
const eventbufsiz = 100 // suggested by skelterjohn
|
||||
const eventbufsiz = 100 // suggested by skelterjohn
|
||||
|
||||
// newEvent returns a new channel suitable for listening for events.
|
||||
func newEvent() chan struct{} {
|
||||
|
@ -11,12 +11,12 @@ func newEvent() chan struct{} {
|
|||
|
||||
// The sysData type contains all system data. It provides the system-specific underlying implementation. It is guaranteed to have the following by embedding:
|
||||
type cSysData struct {
|
||||
ctype int
|
||||
event chan struct{}
|
||||
resize func(x int, y int, width int, height int, rr *[]resizerequest)
|
||||
resizes []resizerequest
|
||||
alternate bool // editable for Combobox, multi-select for listbox, password for lineedit
|
||||
handler AreaHandler // for Areas
|
||||
ctype int
|
||||
event chan struct{}
|
||||
resize func(x int, y int, width int, height int, rr *[]resizerequest)
|
||||
resizes []resizerequest
|
||||
alternate bool // editable for Combobox, multi-select for listbox, password for lineedit
|
||||
handler AreaHandler // for Areas
|
||||
}
|
||||
|
||||
// this interface is used to make sure all sysDatas are synced
|
||||
|
@ -41,7 +41,7 @@ var _xSysData interface {
|
|||
len() int
|
||||
setAreaSize(int, int)
|
||||
repaintAll()
|
||||
} = &sysData{} // this line will error if there's an inconsistency
|
||||
} = &sysData{} // this line will error if there's an inconsistency
|
||||
|
||||
// signal sends the event signal. This raise is done asynchronously to avoid deadlocking the UI task.
|
||||
// Thanks skelterjohn for this techinque: if we can't queue any more events, drop them
|
||||
|
@ -71,27 +71,27 @@ const (
|
|||
|
||||
func mksysdata(ctype int) *sysData {
|
||||
s := &sysData{
|
||||
cSysData: cSysData{
|
||||
ctype: ctype,
|
||||
cSysData: cSysData{
|
||||
ctype: ctype,
|
||||
},
|
||||
}
|
||||
if ctype == c_window { // make resizes non-nil so it can be passed in
|
||||
if ctype == c_window { // make resizes non-nil so it can be passed in
|
||||
s.resizes = make([]resizerequest, 0, 0)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
type resizerequest struct {
|
||||
sysData *sysData
|
||||
x int
|
||||
y int
|
||||
width int
|
||||
height int
|
||||
sysData *sysData
|
||||
x int
|
||||
y int
|
||||
width int
|
||||
height int
|
||||
}
|
||||
|
||||
func (s *sysData) doResize(x int, y int, width int, height int, winheight int) {
|
||||
if s.resize != nil {
|
||||
s.resizes = s.resizes[0:0] // set len to 0 without changing cap
|
||||
s.resizes = s.resizes[0:0] // set len to 0 without changing cap
|
||||
s.resize(x, y, width, height, &s.resizes)
|
||||
for _, s := range s.resizes {
|
||||
err := s.sysData.setRect(s.x, s.y, s.width, s.height, winheight)
|
||||
|
|
|
@ -13,24 +13,24 @@ import "C"
|
|||
type sysData struct {
|
||||
cSysData
|
||||
|
||||
id C.id
|
||||
trackingArea C.id // for Area
|
||||
id C.id
|
||||
trackingArea C.id // for Area
|
||||
}
|
||||
|
||||
type classData struct {
|
||||
make func(parentWindow C.id, alternate bool, s *sysData) C.id
|
||||
getinside func(scrollview C.id) C.id
|
||||
show func(what C.id)
|
||||
hide func(what C.id)
|
||||
settext func(what C.id, text C.id)
|
||||
text func(what C.id, alternate bool) C.id
|
||||
append func(id C.id, what string, alternate bool)
|
||||
insertBefore func(id C.id, what string, before int, alternate bool)
|
||||
selIndex func(id C.id) int
|
||||
selIndices func(id C.id) []int
|
||||
selTexts func(id C.id) []string
|
||||
delete func(id C.id, index int)
|
||||
len func(id C.id) int
|
||||
make func(parentWindow C.id, alternate bool, s *sysData) C.id
|
||||
getinside func(scrollview C.id) C.id
|
||||
show func(what C.id)
|
||||
hide func(what C.id)
|
||||
settext func(what C.id, text C.id)
|
||||
text func(what C.id, alternate bool) C.id
|
||||
append func(id C.id, what string, alternate bool)
|
||||
insertBefore func(id C.id, what string, before int, alternate bool)
|
||||
selIndex func(id C.id) int
|
||||
selIndices func(id C.id) []int
|
||||
selTexts func(id C.id) []string
|
||||
delete func(id C.id, index int)
|
||||
len func(id C.id) int
|
||||
}
|
||||
|
||||
func addControl(parentWindow C.id, control C.id) {
|
||||
|
@ -56,148 +56,148 @@ func applyStandardControlFont(id C.id) {
|
|||
}
|
||||
|
||||
var classTypes = [nctypes]*classData{
|
||||
c_window: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_window: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
return C.makeWindow(appDelegate)
|
||||
},
|
||||
show: func(what C.id) {
|
||||
show: func(what C.id) {
|
||||
C.windowShow(what)
|
||||
},
|
||||
hide: func(what C.id) {
|
||||
hide: func(what C.id) {
|
||||
C.windowHide(what)
|
||||
},
|
||||
settext: func(what C.id, text C.id) {
|
||||
settext: func(what C.id, text C.id) {
|
||||
C.windowSetTitle(what, text)
|
||||
},
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.windowTitle(what)
|
||||
},
|
||||
},
|
||||
c_button: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_button: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
button := C.makeButton()
|
||||
C.buttonSetTargetAction(button, appDelegate)
|
||||
applyStandardControlFont(button)
|
||||
addControl(parentWindow, button)
|
||||
return button
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
C.buttonSetText(what, text)
|
||||
},
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.buttonText(what)
|
||||
},
|
||||
},
|
||||
c_checkbox: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_checkbox: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
checkbox := C.makeCheckbox()
|
||||
applyStandardControlFont(checkbox)
|
||||
addControl(parentWindow, checkbox)
|
||||
return checkbox
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
C.buttonSetText(what, text)
|
||||
},
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.buttonText(what)
|
||||
},
|
||||
},
|
||||
c_combobox: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_combobox: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
combobox := C.makeCombobox(toBOOL(alternate))
|
||||
applyStandardControlFont(combobox)
|
||||
addControl(parentWindow, combobox)
|
||||
return combobox
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.comboboxText(what, toBOOL(alternate))
|
||||
},
|
||||
append: func(id C.id, what string, alternate bool) {
|
||||
append: func(id C.id, what string, alternate bool) {
|
||||
C.comboboxAppend(id, toBOOL(alternate), toNSString(what))
|
||||
},
|
||||
insertBefore: func(id C.id, what string, before int, alternate bool) {
|
||||
insertBefore: func(id C.id, what string, before int, alternate bool) {
|
||||
C.comboboxInsertBefore(id, toBOOL(alternate),
|
||||
toNSString(what), C.intptr_t(before))
|
||||
},
|
||||
selIndex: func(id C.id) int {
|
||||
selIndex: func(id C.id) int {
|
||||
return int(C.comboboxSelectedIndex(id))
|
||||
},
|
||||
delete: func(id C.id, index int) {
|
||||
delete: func(id C.id, index int) {
|
||||
C.comboboxDelete(id, C.intptr_t(index))
|
||||
},
|
||||
len: func(id C.id) int {
|
||||
len: func(id C.id) int {
|
||||
return int(C.comboboxLen(id))
|
||||
},
|
||||
},
|
||||
c_lineedit: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_lineedit: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
lineedit := C.makeLineEdit(toBOOL(alternate))
|
||||
applyStandardControlFont(lineedit)
|
||||
addControl(parentWindow, lineedit)
|
||||
return lineedit
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
C.lineeditSetText(what, text)
|
||||
},
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.lineeditText(what)
|
||||
},
|
||||
},
|
||||
c_label: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_label: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
label := C.makeLabel()
|
||||
applyStandardControlFont(label)
|
||||
addControl(parentWindow, label)
|
||||
return label
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
settext: func(what C.id, text C.id) {
|
||||
C.lineeditSetText(what, text)
|
||||
},
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
text: func(what C.id, alternate bool) C.id {
|
||||
return C.lineeditText(what)
|
||||
},
|
||||
},
|
||||
c_listbox: &classData{
|
||||
make: makeListbox,
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
append: listboxAppend,
|
||||
insertBefore: listboxInsertBefore,
|
||||
selIndices: listboxSelectedIndices,
|
||||
selTexts: listboxSelectedTexts,
|
||||
delete: listboxDelete,
|
||||
len: listboxLen,
|
||||
c_listbox: &classData{
|
||||
make: makeListbox,
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
append: listboxAppend,
|
||||
insertBefore: listboxInsertBefore,
|
||||
selIndices: listboxSelectedIndices,
|
||||
selTexts: listboxSelectedTexts,
|
||||
delete: listboxDelete,
|
||||
len: listboxLen,
|
||||
},
|
||||
c_progressbar: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
c_progressbar: &classData{
|
||||
make: func(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
pbar := C.makeProgressBar()
|
||||
addControl(parentWindow, pbar)
|
||||
return pbar
|
||||
},
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
},
|
||||
c_area: &classData{
|
||||
make: makeArea,
|
||||
getinside: areaInScrollView,
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
c_area: &classData{
|
||||
make: makeArea,
|
||||
getinside: areaInScrollView,
|
||||
show: controlShow,
|
||||
hide: controlHide,
|
||||
},
|
||||
}
|
||||
|
||||
// I need to access sysData from appDelegate, but appDelegate doesn't store any data. So, this.
|
||||
var (
|
||||
sysdatas = make(map[C.id]*sysData)
|
||||
sysdatas = make(map[C.id]*sysData)
|
||||
sysdatalock sync.Mutex
|
||||
)
|
||||
|
||||
|
@ -282,7 +282,7 @@ func (s *sysData) setRect(x int, y int, width int, height int, winheight int) er
|
|||
// winheight - y because (0,0) is the bottom-left corner of the window and not the top-left corner
|
||||
// (winheight - y) - height because (x, y) is the bottom-left corner of the control and not the top-left
|
||||
C.setRect(s.id,
|
||||
C.intptr_t(x), C.intptr_t((winheight - y) - height),
|
||||
C.intptr_t(x), C.intptr_t((winheight-y)-height),
|
||||
C.intptr_t(width), C.intptr_t(height))
|
||||
return nil
|
||||
}
|
||||
|
|
166
sysdata_unix.go
166
sysdata_unix.go
|
@ -14,103 +14,103 @@ import "C"
|
|||
type sysData struct {
|
||||
cSysData
|
||||
|
||||
widget *C.GtkWidget
|
||||
container *C.GtkWidget // for moving
|
||||
pulse chan bool // for sysData.progressPulse()
|
||||
clickCounter clickCounter // for Areas
|
||||
widget *C.GtkWidget
|
||||
container *C.GtkWidget // for moving
|
||||
pulse chan bool // for sysData.progressPulse()
|
||||
clickCounter clickCounter // for Areas
|
||||
// we probably don't need to save these, but we'll do so for sysData.preferredSize() just in case
|
||||
areawidth int
|
||||
areaheight int
|
||||
areawidth int
|
||||
areaheight int
|
||||
}
|
||||
|
||||
type classData struct {
|
||||
make func() *C.GtkWidget
|
||||
makeAlt func() *C.GtkWidget
|
||||
setText func(widget *C.GtkWidget, text string)
|
||||
text func(widget *C.GtkWidget) string
|
||||
append func(widget *C.GtkWidget, text string)
|
||||
insert func(widget *C.GtkWidget, index int, text string)
|
||||
selected func(widget *C.GtkWidget) int
|
||||
selMulti func(widget *C.GtkWidget) []int
|
||||
smtexts func(widget *C.GtkWidget) []string
|
||||
delete func(widget *C.GtkWidget, index int)
|
||||
len func(widget *C.GtkWidget) int
|
||||
make func() *C.GtkWidget
|
||||
makeAlt func() *C.GtkWidget
|
||||
setText func(widget *C.GtkWidget, text string)
|
||||
text func(widget *C.GtkWidget) string
|
||||
append func(widget *C.GtkWidget, text string)
|
||||
insert func(widget *C.GtkWidget, index int, text string)
|
||||
selected func(widget *C.GtkWidget) int
|
||||
selMulti func(widget *C.GtkWidget) []int
|
||||
smtexts func(widget *C.GtkWidget) []string
|
||||
delete func(widget *C.GtkWidget, index int)
|
||||
len func(widget *C.GtkWidget) int
|
||||
// ...
|
||||
signals callbackMap
|
||||
child func(widget *C.GtkWidget) *C.GtkWidget
|
||||
childsigs callbackMap
|
||||
signals callbackMap
|
||||
child func(widget *C.GtkWidget) *C.GtkWidget
|
||||
childsigs callbackMap
|
||||
}
|
||||
|
||||
var classTypes = [nctypes]*classData{
|
||||
c_window: &classData{
|
||||
make: gtk_window_new,
|
||||
setText: gtk_window_set_title,
|
||||
text: gtk_window_get_title,
|
||||
signals: callbackMap{
|
||||
"delete-event": window_delete_event_callback,
|
||||
"configure-event": window_configure_event_callback,
|
||||
c_window: &classData{
|
||||
make: gtk_window_new,
|
||||
setText: gtk_window_set_title,
|
||||
text: gtk_window_get_title,
|
||||
signals: callbackMap{
|
||||
"delete-event": window_delete_event_callback,
|
||||
"configure-event": window_configure_event_callback,
|
||||
},
|
||||
},
|
||||
c_button: &classData{
|
||||
make: gtk_button_new,
|
||||
setText: gtk_button_set_label,
|
||||
text: gtk_button_get_label,
|
||||
signals: callbackMap{
|
||||
"clicked": button_clicked_callback,
|
||||
c_button: &classData{
|
||||
make: gtk_button_new,
|
||||
setText: gtk_button_set_label,
|
||||
text: gtk_button_get_label,
|
||||
signals: callbackMap{
|
||||
"clicked": button_clicked_callback,
|
||||
},
|
||||
},
|
||||
c_checkbox: &classData{
|
||||
make: gtk_check_button_new,
|
||||
setText: gtk_button_set_label,
|
||||
text: gtk_button_get_label,
|
||||
c_checkbox: &classData{
|
||||
make: gtk_check_button_new,
|
||||
setText: gtk_button_set_label,
|
||||
text: gtk_button_get_label,
|
||||
},
|
||||
c_combobox: &classData{
|
||||
make: gtk_combo_box_text_new,
|
||||
makeAlt: gtk_combo_box_text_new_with_entry,
|
||||
text: gtk_combo_box_text_get_active_text,
|
||||
append: gtk_combo_box_text_append_text,
|
||||
insert: gtk_combo_box_text_insert_text,
|
||||
selected: gtk_combo_box_get_active,
|
||||
delete: gtk_combo_box_text_remove,
|
||||
len: gtkComboBoxLen,
|
||||
c_combobox: &classData{
|
||||
make: gtk_combo_box_text_new,
|
||||
makeAlt: gtk_combo_box_text_new_with_entry,
|
||||
text: gtk_combo_box_text_get_active_text,
|
||||
append: gtk_combo_box_text_append_text,
|
||||
insert: gtk_combo_box_text_insert_text,
|
||||
selected: gtk_combo_box_get_active,
|
||||
delete: gtk_combo_box_text_remove,
|
||||
len: gtkComboBoxLen,
|
||||
},
|
||||
c_lineedit: &classData{
|
||||
make: gtk_entry_new,
|
||||
makeAlt: gtkPasswordEntryNew,
|
||||
setText: gtk_entry_set_text,
|
||||
text: gtk_entry_get_text,
|
||||
c_lineedit: &classData{
|
||||
make: gtk_entry_new,
|
||||
makeAlt: gtkPasswordEntryNew,
|
||||
setText: gtk_entry_set_text,
|
||||
text: gtk_entry_get_text,
|
||||
},
|
||||
c_label: &classData{
|
||||
make: gtk_label_new,
|
||||
setText: gtk_label_set_text,
|
||||
text: gtk_label_get_text,
|
||||
c_label: &classData{
|
||||
make: gtk_label_new,
|
||||
setText: gtk_label_set_text,
|
||||
text: gtk_label_get_text,
|
||||
},
|
||||
c_listbox: &classData{
|
||||
make: gListboxNewSingle,
|
||||
makeAlt: gListboxNewMulti,
|
||||
text: gListboxText,
|
||||
append: gListboxAppend,
|
||||
insert: gListboxInsert,
|
||||
selMulti: gListboxSelectedMulti,
|
||||
smtexts: gListboxSelMultiTexts,
|
||||
delete: gListboxDelete,
|
||||
len: gListboxLen,
|
||||
c_listbox: &classData{
|
||||
make: gListboxNewSingle,
|
||||
makeAlt: gListboxNewMulti,
|
||||
text: gListboxText,
|
||||
append: gListboxAppend,
|
||||
insert: gListboxInsert,
|
||||
selMulti: gListboxSelectedMulti,
|
||||
smtexts: gListboxSelMultiTexts,
|
||||
delete: gListboxDelete,
|
||||
len: gListboxLen,
|
||||
},
|
||||
c_progressbar: &classData{
|
||||
make: gtk_progress_bar_new,
|
||||
c_progressbar: &classData{
|
||||
make: gtk_progress_bar_new,
|
||||
},
|
||||
c_area: &classData{
|
||||
make: gtkAreaNew,
|
||||
child: gtkAreaGetControl,
|
||||
childsigs: callbackMap{
|
||||
"draw": area_draw_callback,
|
||||
"button-press-event": area_button_press_event_callback,
|
||||
"button-release-event": area_button_release_event_callback,
|
||||
"motion-notify-event": area_motion_notify_event_callback,
|
||||
"enter-notify-event": area_enterleave_notify_event_callback,
|
||||
"leave-notify-event": area_enterleave_notify_event_callback,
|
||||
"key-press-event": area_key_press_event_callback,
|
||||
"key-release-event": area_key_release_event_callback,
|
||||
c_area: &classData{
|
||||
make: gtkAreaNew,
|
||||
child: gtkAreaGetControl,
|
||||
childsigs: callbackMap{
|
||||
"draw": area_draw_callback,
|
||||
"button-press-event": area_button_press_event_callback,
|
||||
"button-release-event": area_button_release_event_callback,
|
||||
"motion-notify-event": area_motion_notify_event_callback,
|
||||
"enter-notify-event": area_enterleave_notify_event_callback,
|
||||
"leave-notify-event": area_enterleave_notify_event_callback,
|
||||
"key-press-event": area_key_press_event_callback,
|
||||
"key-release-event": area_key_release_event_callback,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -311,14 +311,14 @@ func (s *sysData) progressPulse() {
|
|||
if start {
|
||||
ticker = time.NewTicker(pulseRate)
|
||||
tickchan = ticker.C
|
||||
pulse() // start the pulse animation now, not 100ms later
|
||||
pulse() // start the pulse animation now, not 100ms later
|
||||
} else {
|
||||
if ticker != nil {
|
||||
ticker.Stop()
|
||||
}
|
||||
ticker = nil
|
||||
tickchan = nil
|
||||
s.pulse <- true // notify sysData.setProgress()
|
||||
s.pulse <- true // notify sysData.setProgress()
|
||||
}
|
||||
case <-tickchan:
|
||||
pulse()
|
||||
|
@ -336,7 +336,7 @@ func (s *sysData) setProgress(percent int) {
|
|||
return
|
||||
}
|
||||
s.pulse <- false
|
||||
<-s.pulse // wait for sysData.progressPulse() to register that
|
||||
<-s.pulse // wait for sysData.progressPulse() to register that
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
uitask <- func() {
|
||||
|
@ -361,7 +361,7 @@ func (s *sysData) setAreaSize(width int, height int) {
|
|||
uitask <- func() {
|
||||
c := gtkAreaGetControl(s.widget)
|
||||
gtk_widget_set_size_request(c, width, height)
|
||||
s.areawidth = width // for sysData.preferredSize()
|
||||
s.areawidth = width // for sysData.preferredSize()
|
||||
s.areaheight = height
|
||||
C.gtk_widget_queue_draw(c)
|
||||
ret <- struct{}{}
|
||||
|
|
Loading…
Reference in New Issue