diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-08-17 14:57:40 +0200 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-08-17 14:57:40 +0200 |
commit | a12232f527666695c57a6014401c1a34c2fb6611 (patch) | |
tree | 76825b119d7862d16af962b94ca9d3499be689b6 /mapwidget.go | |
parent | a6990de0ba8260d1021188b862c38478f401c721 (diff) | |
download | biomed-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.go | 31 |
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 } |