Wrapped GTK+ Areas in a GtkOverlay in preparation for adding OpenTextFieldAt().

This commit is contained in:
Pietro Gagliardi 2014-08-22 10:52:51 -04:00
parent 7ad1a9852e
commit 20a65d96df
3 changed files with 25 additions and 6 deletions

View File

@ -50,7 +50,7 @@ func newArea(ab *areabase) Area {
areabase: ab, areabase: ab,
_widget: widget, _widget: widget,
drawingarea: (*C.GtkDrawingArea)(unsafe.Pointer(widget)), drawingarea: (*C.GtkDrawingArea)(unsafe.Pointer(widget)),
scroller: newScroller(widget, false, false), // not natively scrollable, no border scroller: newScroller(widget, false, false, true), // not natively scrollable; no border; have an overlay for OpenTextFieldAt()
clickCounter: new(clickCounter), clickCounter: new(clickCounter),
} }
for _, c := range areaCallbacks { for _, c := range areaCallbacks {

View File

@ -69,14 +69,28 @@ type scroller struct {
scrollwidget *C.GtkWidget scrollwidget *C.GtkWidget
scrollcontainer *C.GtkContainer scrollcontainer *C.GtkContainer
scrollwindow *C.GtkScrolledWindow scrollwindow *C.GtkScrolledWindow
overlaywidget *C.GtkWidget
overlaycontainer *C.GtkContainer
overlay *C.GtkOverlay
addShowWhich *C.GtkWidget
} }
func newScroller(widget *C.GtkWidget, native bool, bordered bool) *scroller { func newScroller(widget *C.GtkWidget, native bool, bordered bool, overlay bool) *scroller {
var o *C.GtkWidget
scrollwidget := C.gtk_scrolled_window_new(nil, nil) scrollwidget := C.gtk_scrolled_window_new(nil, nil)
if overlay {
o = C.gtk_overlay_new()
}
s := &scroller{ s := &scroller{
scrollwidget: scrollwidget, scrollwidget: scrollwidget,
scrollcontainer: (*C.GtkContainer)(unsafe.Pointer(scrollwidget)), scrollcontainer: (*C.GtkContainer)(unsafe.Pointer(scrollwidget)),
scrollwindow: (*C.GtkScrolledWindow)(unsafe.Pointer(scrollwidget)), scrollwindow: (*C.GtkScrolledWindow)(unsafe.Pointer(scrollwidget)),
overlaywidget: o,
overlaycontainer: (*C.GtkContainer)(unsafe.Pointer(o)),
overlay: (*C.GtkOverlay)(unsafe.Pointer(o)),
} }
// give the scrolled window a border (thanks to jlindgren in irc.gimp.net/#gtk+) // give the scrolled window a border (thanks to jlindgren in irc.gimp.net/#gtk+)
if bordered { if bordered {
@ -87,15 +101,20 @@ func newScroller(widget *C.GtkWidget, native bool, bordered bool) *scroller {
} else { } else {
C.gtk_scrolled_window_add_with_viewport(s.scrollwindow, widget) C.gtk_scrolled_window_add_with_viewport(s.scrollwindow, widget)
} }
s.addShowWhich = s.scrollwidget
if overlay {
C.gtk_container_add(s.overlaycontainer, s.scrollwidget)
s.addShowWhich = s.overlaywidget
}
return s return s
} }
func (s *scroller) setParent(p *controlParent) { func (s *scroller) setParent(p *controlParent) {
C.gtk_container_add(p.c, s.scrollwidget) C.gtk_container_add(p.c, s.addShowWhich)
// see basesetParent() above for why we call gtk_widget_show_all() // see basesetParent() above for why we call gtk_widget_show_all()
C.gtk_widget_show_all(s.scrollwidget) C.gtk_widget_show_all(s.addShowWhich)
} }
func (s *scroller) commitResize(c *allocation, d *sizing) { func (s *scroller) commitResize(c *allocation, d *sizing) {
dobasecommitResize(s.scrollwidget, c, d) dobasecommitResize(s.addShowWhich, c, d)
} }

View File

@ -46,7 +46,7 @@ var (
func finishNewTable(b *tablebase, ty reflect.Type) Table { func finishNewTable(b *tablebase, ty reflect.Type) Table {
widget := C.gtk_tree_view_new() widget := C.gtk_tree_view_new()
t := &table{ t := &table{
scroller: newScroller(widget, true, true), // natively scrollable; has a border scroller: newScroller(widget, true, true, false), // natively scrollable; has a border; no overlay
tablebase: b, tablebase: b,
_widget: widget, _widget: widget,
treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)), treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)),