summaryrefslogtreecommitdiff
path: root/mapwidget.go
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2013-08-17 14:57:40 +0200
committerKevin Chabowski <kevin@kch42.de>2013-08-17 14:57:40 +0200
commita12232f527666695c57a6014401c1a34c2fb6611 (patch)
tree76825b119d7862d16af962b94ca9d3499be689b6 /mapwidget.go
parenta6990de0ba8260d1021188b862c38478f401c721 (diff)
downloadbiomed-a12232f527666695c57a6014401c1a34c2fb6611.tar.gz
biomed-a12232f527666695c57a6014401c1a34c2fb6611.tar.bz2
biomed-a12232f527666695c57a6014401c1a34c2fb6611.zip
GUI is now locked on slow operations (e.g. Filling).
Diffstat (limited to 'mapwidget.go')
-rw-r--r--mapwidget.go31
1 files changed, 28 insertions, 3 deletions
diff --git a/mapwidget.go b/mapwidget.go
index 29c5e0d..37a05d0 100644
--- a/mapwidget.go
+++ b/mapwidget.go
@@ -68,6 +68,9 @@ type MapWidget struct {
reportFail func(msg string)
updateInfo func(x, z int, bio mcmap.Biome)
+ setBusy func(bool)
+
+ toolsEnabled bool
isInit bool
@@ -286,7 +289,27 @@ func (mw *MapWidget) compose() {
}
func (mw *MapWidget) useTool(x, z int) {
- mw.tool.Do(mw.bio, mw, x, z)
+ gdk.ThreadsLeave()
+ defer gdk.ThreadsEnter()
+
+ if !mw.toolsEnabled {
+ return
+ }
+
+ if mw.tool.IsSlow() {
+ mw.toolsEnabled = false
+ mw.setBusy(true)
+
+ go func() {
+ mw.tool.Do(mw.bio, mw, x, z)
+ mw.setBusy(false)
+ mw.toolsEnabled = true
+
+ mw.redraw <- true
+ }()
+ } else {
+ mw.tool.Do(mw.bio, mw, x, z)
+ }
}
func (mw *MapWidget) movement(ctx *glib.CallbackContext) {
@@ -475,15 +498,17 @@ func (mw *MapWidget) SetBiomeAt(x, z int, bio mcmap.Biome) {
// Update tile
if tile, ok := mw.biotiles[pos]; ok {
+ gdk.ThreadsEnter()
drawable := tile.GetDrawable()
gc := gdk.NewGC(drawable)
gc.SetRgbFgColor(bioColors[bio])
drawable.DrawRectangle(gc, true, bx*zoom, bz*zoom, zoom, zoom)
+ gdk.ThreadsLeave()
}
}
-func NewMapWidget(reportFail func(msg string), updateInfo func(x, z int, bio mcmap.Biome)) *MapWidget {
- mw := &MapWidget{reportFail: reportFail, updateInfo: updateInfo}
+func NewMapWidget(reportFail func(msg string), updateInfo func(x, z int, bio mcmap.Biome), setBusy func(bool)) *MapWidget {
+ mw := &MapWidget{reportFail: reportFail, updateInfo: updateInfo, setBusy: setBusy, toolsEnabled: true}
mw.init()
return mw
}