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