[Scummvm-git-logs] scummvm master -> 5e133cdd344de7224edb260bd2c5531ab689e64a

bgK bastien.bouclet at gmail.com
Sun Sep 18 17:57:37 CEST 2016


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
1a1a5b5f69 CLOUD: Change the cloud icon to be updated by the main thread
75599a4c25 OPENGL: Remove multithread support from displayActivityIconOnOSD
0f9583e4ca SDL: Make sure the cloud icon is cleared immediatly after it is hidden
5e133cdd34 OPENGL: Make sure the cloud icon is cleared immediatly after it is hidden


Commit: 1a1a5b5f692ac74e25b03ba2bdc09e0af3606a4a
    https://github.com/scummvm/scummvm/commit/1a1a5b5f692ac74e25b03ba2bdc09e0af3606a4a
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-09-18T17:54:12+02:00

Commit Message:
CLOUD: Change the cloud icon to be updated by the main thread

The cloud manager registers itself as an event source as a mean to be polled
periodically by the GUI or engine code. The periodical polling is used to
update the OSD icon indicating background sync activity.

Also move the cloud icon from ConnectionManager to CloudManager,
allowing to decouple icon handling from network connections updates.

Changed paths:
  A backends/cloud/cloudicon.cpp
  A backends/cloud/cloudicon.h
  A backends/cloud/cloudicon_data.h
  A backends/cloud/cloudicon_disabled_data.h
  R backends/networking/curl/cloudicon.cpp
  R backends/networking/curl/cloudicon.h
  R backends/networking/curl/cloudicon_data.h
  R backends/networking/curl/cloudicon_disabled_data.h
    backends/cloud/cloudmanager.cpp
    backends/cloud/cloudmanager.h
    backends/module.mk
    backends/networking/curl/connectionmanager.cpp
    backends/networking/curl/connectionmanager.h
    gui/saveload-dialog.cpp



diff --git a/backends/cloud/cloudicon.cpp b/backends/cloud/cloudicon.cpp
new file mode 100644
index 0000000..972efae
--- /dev/null
+++ b/backends/cloud/cloudicon.cpp
@@ -0,0 +1,178 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "backends/cloud/cloudicon.h"
+#include "common/memstream.h"
+#include "common/system.h"
+#include "image/png.h"
+
+namespace Cloud {
+
+const float CloudIcon::ALPHA_SPEED = 0.0005;
+const float CloudIcon::ALPHA_MAX = 1;
+const float CloudIcon::ALPHA_MIN = 0.6;
+
+CloudIcon::CloudIcon() {
+	initIcons();
+	hide();
+	_lastUpdateTime = g_system->getMillis();
+}
+
+CloudIcon::~CloudIcon() {
+	_icon.free();
+	_disabledIcon.free();
+	_alphaIcon.free();
+}
+
+void CloudIcon::show(CloudIcon::Type icon, int duration) {
+	if (_type == icon) {
+		return; // Nothing to do
+	}
+
+	if (icon != kNone) {
+		_state = kShown;
+		_type = icon;
+
+		if (duration) {
+			_hideTime = g_system->getMillis() + duration;
+		} else {
+			_hideTime = 0;
+		}
+	} else {
+		_state = kGoingToHide;
+	}
+}
+
+void CloudIcon::hide() {
+	_state = kHidden;
+	_type = kNone;
+	_hideTime = 0;
+	_currentAlpha = 0;
+	_alphaRising = true;
+}
+
+CloudIcon::Type CloudIcon::getShownType() const {
+	return _type;
+}
+
+bool CloudIcon::needsUpdate() const {
+	uint32 delaySinceLastUpdate = g_system->getMillis() - _lastUpdateTime;
+	return delaySinceLastUpdate >= UPDATE_DELAY_MIN_MILLIS;
+}
+
+void CloudIcon::update() {
+	uint32 currentTime = g_system->getMillis();
+	uint32 delaySinceLastUpdate = currentTime - _lastUpdateTime;
+	_lastUpdateTime = currentTime;
+
+	switch (_state) {
+	case kHidden:
+		return; // Nothing to do
+	case kShown:
+		if (_alphaRising) {
+			if (_currentAlpha < ALPHA_MIN)
+				_currentAlpha += 5 * ALPHA_SPEED * delaySinceLastUpdate;
+			else
+				_currentAlpha += ALPHA_SPEED * delaySinceLastUpdate;
+			if (_currentAlpha > ALPHA_MAX) {
+				_currentAlpha = ALPHA_MAX;
+				_alphaRising = false;
+			}
+		} else {
+			_currentAlpha -= ALPHA_SPEED * delaySinceLastUpdate;
+			if (_currentAlpha < ALPHA_MIN) {
+				_currentAlpha = ALPHA_MIN;
+				_alphaRising = true;
+			}
+		}
+
+		if (_hideTime != 0 && _hideTime <= currentTime) {
+			_hideTime = 0;
+			_state = kGoingToHide;
+		}
+		break;
+	case kGoingToHide:
+		_currentAlpha -= 5 * ALPHA_SPEED * delaySinceLastUpdate;
+		if (_currentAlpha <= 0) {
+			hide();
+		}
+		break;
+	}
+
+	if (_state != kHidden) {
+		makeAlphaIcon((_type == kDisabled ? _disabledIcon : _icon), _currentAlpha);
+		g_system->displayActivityIconOnOSD(&_alphaIcon);
+	} else {
+		g_system->displayActivityIconOnOSD(nullptr);
+	}
+}
+
+#include "backends/cloud/cloudicon_data.h"
+#include "backends/cloud/cloudicon_disabled_data.h"
+
+void CloudIcon::initIcons() {
+	loadIcon(_icon, cloudicon_data, ARRAYSIZE(cloudicon_data));
+	loadIcon(_disabledIcon, cloudicon_disabled_data, ARRAYSIZE(cloudicon_disabled_data));
+}
+
+void CloudIcon::loadIcon(Graphics::Surface &icon, byte *data, uint32 size) {
+	Image::PNGDecoder decoder;
+	Common::MemoryReadStream stream(data, size);
+	if (!decoder.loadStream(stream))
+		error("CloudIcon::loadIcon: error decoding PNG");
+
+	const Graphics::Surface *s = decoder.getSurface();
+	return icon.copyFrom(*s);
+}
+
+void CloudIcon::makeAlphaIcon(const Graphics::Surface &icon, float alpha) {
+	_alphaIcon.copyFrom(icon);
+
+	byte *pixels = (byte *)_alphaIcon.getPixels();
+	for (int y = 0; y < _alphaIcon.h; y++) {
+		byte *row = pixels + y * _alphaIcon.pitch;
+		for (int x = 0; x < _alphaIcon.w; x++) {
+			uint32 srcColor;
+			if (_alphaIcon.format.bytesPerPixel == 2)
+				srcColor = READ_UINT16(row);
+			else if (_alphaIcon.format.bytesPerPixel == 3)
+				srcColor = READ_UINT24(row);
+			else
+				srcColor = READ_UINT32(row);
+
+			// Update color's alpha
+			byte r, g, b, a;
+			_alphaIcon.format.colorToARGB(srcColor, a, r, g, b);
+			a = (byte)(a * alpha);
+			uint32 color = _alphaIcon.format.ARGBToColor(a, r, g, b);
+
+			if (_alphaIcon.format.bytesPerPixel == 2)
+				*((uint16 *)row) = color;
+			else
+				*((uint32 *)row) = color;
+
+			row += _alphaIcon.format.bytesPerPixel;
+		}
+	}
+}
+
+} // End of namespace Cloud
diff --git a/backends/cloud/cloudicon.h b/backends/cloud/cloudicon.h
new file mode 100644
index 0000000..2b2f9cf
--- /dev/null
+++ b/backends/cloud/cloudicon.h
@@ -0,0 +1,90 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_NETWORKING_CURL_CLOUDICON_H
+#define BACKENDS_NETWORKING_CURL_CLOUDICON_H
+
+#include "graphics/surface.h"
+
+namespace Cloud {
+
+class CloudIcon {
+public:
+	CloudIcon();
+	~CloudIcon();
+
+	/**
+	 * The type of cloud icon to show
+	 */
+	enum Type {
+		kNone,     /** Hide the currently shown icon if any */
+		kSyncing,  /** Cloud syncing icon */
+		kDisabled  /** Cloud syncing not available icon */
+	};
+
+	/**
+	 * Select the icon to show on the OSD
+	 *
+	 * @param icon Icon type to show. Use kNone to hide the current icon if any.
+	 * @param duration Duration in milliseconds the icon stays visible on screen. 0 means the icon stays indefinitely.
+	 */
+	void show(Type icon, int duration = 0);
+
+	/** The currently visible icon. kNone means no icon is shown. */
+	Type getShownType() const;
+
+	/** Returns true if the icon state needs to be checked for changes */
+	bool needsUpdate() const;
+
+	/** Update the icon visible on the OSD */
+	void update();
+
+private:
+	static const float ALPHA_SPEED, ALPHA_MAX, ALPHA_MIN;
+	static const int UPDATE_DELAY_MIN_MILLIS = 10;
+
+	enum State {
+		kHidden,
+		kShown,
+		kGoingToHide
+	};
+
+	State _state;
+	Type _type;
+
+	Graphics::Surface _icon, _disabledIcon, _alphaIcon;
+	float _currentAlpha;
+	bool _alphaRising;
+
+	uint32 _hideTime;
+	uint32 _lastUpdateTime;
+
+	void initIcons();
+	void loadIcon(Graphics::Surface &icon, byte *data, uint32 size);
+	void makeAlphaIcon(const Graphics::Surface &icon, float alpha);
+
+	void hide();
+};
+
+} // End of namespace Cloud
+
+#endif
diff --git a/backends/cloud/cloudicon_data.h b/backends/cloud/cloudicon_data.h
new file mode 100644
index 0000000..21d8818
--- /dev/null
+++ b/backends/cloud/cloudicon_data.h
@@ -0,0 +1,111 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// This is a PNG file dumped into array.
+// $ recode data..d1 <dists/cloudicon.png >cloudicon_data.h
+// The tool is from https://github.com/pinard/Recode
+
+byte cloudicon_data[] = {
+	137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68,
+	82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115,
+	122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8,
+	124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11,
+	18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116,
+	69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109,
+	101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0,
+	0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101,
+	0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107,
+	115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4,  50,  73,  68,
+	65,  84,  88, 133, 197, 151, 109, 104, 150, 101,  20, 199, 127, 247, 227,
+	179, 105,  51,  23,  65, 181, 150, 224, 154, 214, 132, 194, 249,  33, 165,
+	22, 189, 231, 194, 210, 250,  16, 171, 180,  55,  42, 152,  68,  65, 100,
+	52, 233,   5, 146, 144, 144,  26, 249, 169,  62, 164,  80,  89, 152,  25,
+	18, 226,  42,  49,  87,  88, 180,  94,  96,  96, 246, 234, 180,  70,  50,
+	66, 214,  55, 247,  22, 133, 247, 255, 244, 225,  58, 247, 158, 107, 143,
+	219, 243,  60, 186, 192,   3, 135, 251, 220, 215, 117, 223, 231, 127, 238,
+	235, 252, 239, 235,  58,  39, 105, 250, 206,  56, 147, 146,  55,  85, 252,
+	108,  13, 112,  59, 176,  12,  88,   2, 204,   7, 230, 248, 220,  48, 208,
+	15, 244,   2, 221,  64,  23,  48,  86, 137, 211, 228, 146, 158, 178,  43,
+	80,   7, 172,   3, 218, 129, 179,  43, 241,   9, 140,   0, 155, 129,  87,
+	128, 193, 146,  15,  47, 248, 178, 100,   0, 237,  64,  39, 112,  14,  96,
+	174,  20, 217, 153, 228, 162,   0,  50,  25,   2,  58, 128,  45,  83,   1,
+	228,  53, 121,  10, 170, 129, 183, 128, 213, 126,  47, 215,  49, 224,  39,
+	224,  19, 160,   7,  56,   2, 204,   0, 154, 128,  27, 128, 229, 110, 215,
+	120,  64, 181, 132, 149, 184,  30, 120,   4, 248, 183,  24,  40, 185, 248,
+	243, 147,  86, 160, 154, 144, 195,  91, 252,  43,   5, 140,   2,  31,   2,
+	27, 129, 195,  83, 125, 141,  75,  19, 240,   2, 129,  47, 179,  61, 144,
+	4, 216,   7, 172,  44,  14,  34, 105, 232,  62,  41, 128, 109, 192, 189,
+	14, 126,   2,  24,   0,  30,   3, 246, 150,   1,  46, 150,  54,  15, 184,
+	1, 200, 251, 216, 123, 192, 253,  19,   2, 152, 183, 119,  66,   0, 237,
+	192,  27, 110, 159,   0, 250, 128, 187, 128,  67, 167,   8, 158, 201,  98,
+	224,   3, 160, 209, 131,  72, 128,  53,  68, 156, 200, 153, 192, 181, 206,
+	68, 167, 219,  50,  49,  96, 226,  78,  19, 135, 162, 103, 138, 117, 169,
+	137,  46,  19, 163,  38,  82,  19,  63, 152, 120, 220, 196,  12, 159,  63,
+	104,  98, 149, 137,  99, 238, 211,  28, 163,  46, 243, 145, 147, 192, 117,
+	157,  68, 173, 219, 195,  18, 143,  74,  28, 137, 230, 139, 181,  77, 162,
+	71,  98, 165,  68, 141,  68,  78,  98, 145, 196, 107,  18,  59, 252,  30,
+	137,   3,  18, 207,  72, 140, 249, 125, 173,  99,  33,  65, 114, 209, 110,
+	131, 192, 218,  65,   2, 105,   4, 108, 245, 165,  74, 125, 165, 206,   5,
+	214,   2, 151,   3,   7, 128, 119, 128,  95, 253, 189, 169, 228, 105, 224,
+	85, 183, 171, 128,  29, 192,  29,   4,  82, 142,  18, 246, 151, 177, 164,
+	126, 151,   1, 220,   3, 188,  79,  32, 222,  40,  97, 167, 235, 243, 151,
+	207,   2, 190,   5, 154,  35, 231, 223,   0,  45, 101, 242, 127,  12, 152,
+	75,  97, 191,  88,  12, 124, 237, 254,  18,  96,  21, 176,  35, 227, 192,
+	50, 207,  15,  38, 126,  49, 113,  56, 202, 243, 221,  38, 154, 139, 114,
+	223,  82, 130,  23, 153, 214, 155,  88,  20, 221, 255, 104, 226, 104, 116,
+	223, 106,  42, 144, 112, 169, 137, 196, 131, 248,  56,  10, 166, 222, 196,
+	141,  21, 128,  77, 165, 223, 155, 120,  42,  34, 246, 158, 200, 247,  18,
+	19, 228,  21, 178,  60, 223, 151,  41,   1, 190, 112, 251,  60, 224, 171,
+	104, 238, 116,  36,  33, 240, 224,  32, 240,  25, 176,  31, 120, 194, 199,
+	27, 161, 112,  26, 102, 167, 154,   1, 127, 186, 253,  98,   9, 240,  81,
+	2,  97,  43, 149, 231,  61, 128, 129, 104, 108,  78,  28,  64,  44,  25,
+	105, 218,  74,  56, 156,  13, 252,  76, 248,  43,  42, 145, 140, 176, 249,
+	226, 137, 188, 133,  20,  12, 123,  68,   9, 225, 171, 127,   7,  46,  40,
+	227, 180,  82, 112, 128, 153, 126, 189, 148, 194, 105,  57,  12,   5,  18,
+	246,  71,  68, 185, 214, 237, 191, 166,  65, 190,  98, 237, 243, 235, 205,
+	209,  88, 127, 188,  19, 246, 250,  53,  39, 177, 194, 237, 157,  37, 118,
+	193,  83, 213, 183,  37, 102,  73,  92,  39, 145, 196, 152,  57,  75, 193,
+	82, 246, 249,  21,  75,  89, 104,  41, 205, 150, 178, 222,  82, 250, 163,
+	241, 211, 213, 253, 150, 178, 201,  82, 174, 180, 148, 185, 150, 146, 248,
+	120, 183, 165, 133,  20, 116, 153,  24, 113, 123, 150, 137, 103,  77,  28,
+	55, 113, 141, 137, 173,  38, 134,  60,  61, 167, 178, 236,   3,  38,  54,
+	152, 184, 213, 255, 253,  39, 221,  55, 142, 213, 101,  42, 252,   5,  99,
+	132, 202, 101,  45,  97, 175,  94,  14, 172,   0, 118,   1,  15, 185,  78,
+	71,  86,  19, 138, 217, 196, 117, 179,  99, 146, 204, 126, 125, 188,  30,
+	168,  35, 236, 255, 181, 132,   3, 233,  15, 224,  54, 202,  87,  64, 229,
+	164,   5, 216,   9,  92, 232, 224,  67, 192,  66, 188,  88, 205,  69, 185,
+	26, 180, 148,  14, 207,  81, 206,  82, 230,  89, 202, 110,  75, 185, 108,
+	26, 249, 191, 202,  82, 222, 181, 148, 243, 163, 220, 119,  56,  22, 150,
+	78, 172,   7, 144, 216,  34, 177, 205, 237, 188, 196,   2, 137,  61,  18,
+	15, 158,   6, 243,  31, 144, 216,  37, 209, 224, 190,  18, 137, 237, 142,
+	49, 254,  92,  50, 115, 211, 164,  69, 233,  71,  64,  43, 140,  23, 165,
+	127,  19,  26, 142, 231,   8, 117, 192,  84,  82,  69,  56, 118, 215,   3,
+	55,  17,  54, 160, 172,  40, 253, 148,  80, 168,  78,  44,  74, 171,  59,
+	39, 237,  11, 170, 129,  55, 129, 251,  40, 108, 205,   2, 254,   1, 126,
+	243,  96, 122, 129, 163,  62, 223,   0,  92, 237, 160, 141,  17, 112,  38,
+	219, 129, 135, 139, 193,   1, 146, 170, 151,  43, 106,  76, 106, 139, 198,
+	229, 192,  73,  20,  96,  12, 152, 177, 253,  56, 101,  26, 147,  36, 191,
+	177, 226, 214, 108,  13, 133, 214, 172, 220,  75,  35,  14,  90, 190,  53,
+	203, 189,  84, 113, 119, 156,  53, 167, 173, 192,  21, 252,  95, 205, 105,
+	178, 225, 204, 182, 231, 255,   1, 200,  91, 112, 221, 160, 249,  68,  42,
+	0,   0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130
+};
diff --git a/backends/cloud/cloudicon_disabled_data.h b/backends/cloud/cloudicon_disabled_data.h
new file mode 100644
index 0000000..4340a8a
--- /dev/null
+++ b/backends/cloud/cloudicon_disabled_data.h
@@ -0,0 +1,117 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// This is a PNG file dumped into array.
+// $ recode data..d1 <dists/cloudicon_disabled.png >cloudicon_disabled_data.h
+// The tool is from https://github.com/pinard/Recode
+
+byte cloudicon_disabled_data[] = {
+	137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68,
+	82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115,
+	122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8,
+	124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11,
+	18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116,
+	69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109,
+	101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0,
+	0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101,
+	0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107,
+	115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4, 139,  73,  68,
+	65,  84,  88, 133, 197, 215,  91, 168,  86,  69,  20,   7, 240, 223, 254,
+	244, 120, 236, 120,  57,  26,  94,  10,  31,  34,  35,  11,  36, 203,  74,
+	212, 160, 204, 212, 110, 166, 248, 208, 205, 172, 151, 144, 136, 158,  82,
+	80, 168,  32, 233, 165, 160,  32, 130, 236, 165,  34, 204,  74,  18,  52,
+	36, 169, 232,  34,  24, 221, 243, 218, 133,  74,  77, 195,  44, 200,  91,
+	122, 188, 156, 172, 102, 159, 221, 195, 204, 246, 219, 126, 231, 226,  17,
+	138,  22,  12, 123, 246, 236, 153, 245,  95, 107, 205, 127, 205, 172, 157,
+	21, 254,  95, 233,  27, 122,  63, 183,   5, 179,  48,  13,  87,  98,  52,
+	6, 167, 111,  71, 176,  11,  27, 177,  14, 107, 209, 222,  27, 165, 217,
+	137, 211, 207,  25, 137, 197, 152, 143,  65, 189, 209, 137, 163, 120,   1,
+	79,  98, 111, 143, 147, 143, 247, 172, 108,  62, 158, 194,  16,  20, 169,
+	105, 232, 151,  82, 171,  24,  80,  74,  27,  22, 225, 197, 110,  13, 104,
+	235, 122, 188,  31,  94, 194,  93,  21, 192,  14,  49, 172, 223, 226, 109,
+	124, 130,  29, 232, 131,  49, 184,  22,  55, 166, 126,  75, 131,  65, 175,
+	225,  94, 252, 213, 201, 128, 131,  93, 131, 191, 137,  27,  42, 192, 199,
+	241,   6, 158, 192, 246, 238, 188,  73,  50,   6, 143,  98,  78,  50, 164,
+	140, 200, 123,  34, 135,  78,  49,  34, 219, 215,  89, 193, 171, 152, 151,
+	192,   3, 246, 224,   1, 188, 123,  26, 224, 170,  92, 134, 143,  49, 160,
+	50,  86,  96,   5, 238, 174,  78, 108, 204, 130, 249,  98, 216,  75, 240,
+	109, 184,  13,  63, 156,   1, 248,  68,  44,  21, 189,  47, 165,  67, 140,
+	196,  60, 172,  87, 225,  68, 182, 167,  62, 105, 100,   2, 106,  77,  11,
+	118, 139, 123, 186, 163,  59, 164,  53,  76,  16, 195, 125,  29, 250,  15,
+	227, 167,  73,  12, 237,  27,  73,  91,  75, 142,  28,  21, 185,  51,  60,
+	141, 181, 225,  98,  41,  59, 106,  33, 185,  26,  88,  28, 104,  77, 253,
+	163, 129, 251,   3,  59,  42, 223,  79, 105, 171, 184,  53, 240,  73, 224,
+	150,  64, 203,  32, 106,  99, 185, 160, 224, 236,  16, 245, 118,   4,  54,
+	5, 166,   4,  22,   6, 218, 211, 218, 214, 132,  37,  32,  75, 238, 181,
+	224,  55,  12,  76, 222, 191, 140, 251, 144,  39,  79, 135,  98,   1, 198,
+	98,  11, 150, 227, 251,  50, 204,  67, 113, 121,  90, 156,  57, 185, 127,
+	135, 154, 184,   9,  95, 160,   9,  43,  49,  59,  69, 225,  24, 206,  65,
+	123, 150,  54, 247,  14, 188, 158, 214,  30,  23,  79, 186, 109,   9, 252,
+	44, 124, 142, 113, 149, 232, 127, 134, 201, 196,  88,  79,  66, 115,   5,
+	252,  24, 182, 114, 224,  32,  35, 230, 212, 207, 139,  75, 241, 169, 168,
+	47, 195, 157,  88,  89, 110, 193, 180,  64, 145, 250, 223,   5, 182,  87,
+	194, 125, 123,  96,  92, 195,  22,  76,  14, 201, 227, 177, 226,  65, 144,
+	227, 111,  28, 198, 151, 113, 131, 135,   5,  46, 169, 172, 249,  38, 176,
+	187, 242,  62,  35, 160, 150, 199, 197,  19, 114, 178, 156,  34, 231, 173,
+	244, 180, 154, 115, 115, 166, 166,  57, 167, 180, 193,  34,   3,   7, 165,
+	61,  11, 137, 105,  27, 112, 160,  62, 111, 235, 106,  22, 166, 126,  71,
+	206,  59, 165, 238, 156,  43, 114, 100, 155,  98, 120, 218, 146, 206,   2,
+	83, 241, 225,  26, 134, 165, 253,  27, 173,  65, 134, 138, 137, 222, 154,
+	222, 139, 228, 249,  87, 233, 217, 133,  76, 159,  19,  47, 169,  89, 226,
+	129, 214,  71, 188, 192, 134, 148, 231,  64, 121, 171,  21, 248,  85, 244,
+	232, 177,  30, 192,  59,  90,  82,   6, 193,   9, 108, 234,  30,  28,  30,
+	9, 209, 128,  74, 214,  71, 204, 190, 121, 231, 201,   5, 228, 220, 218,
+	248,  97, 136, 200, 246, 102, 106,  29, 234,  73, 190,   5, 135, 186,   7,
+	135, 201,   9, 167, 111, 227, 135,  50,   2,  71, 146,  69, 153, 232, 245,
+	206, 192, 136, 234, 196,  86,  49,  13, 154, 162, 113,  39, 211, 101,  51,
+	126, 239,  25,  28, 154,  19, 206, 133, 234, 119, 195,  17, 234,  36, 220,
+	85,  33, 202, 213, 169, 191, 175,  36,  92, 139, 152, 106,   3, 212,   9,
+	119,  76, 100, 251, 126, 157,   9, 218,  69, 219, 150, 158, 211,  42,  99,
+	187, 114, 245, 147, 112,  83, 122, 214,   2,  51,  83, 127,  85,  16,  89,
+	62,  94,  60,  61, 202,  20,  58,  36,  38, 244, 126,  93, 159, 146,  93,
+	180, 101, 129, 254, 129, 107,   2,  89,  26, 219,  24,  42,   6, 188,  95,
+	153, 124,  81, 202, 251,  37,   3, 249, 101, 188, 120, 114, 148, 223, 219,
+	197, 212,  56, 208, 123, 240, 245, 129, 167,   3,  19,   3, 163,  42,   6,
+	172,  11, 234,  36,  92,  43, 242, 105,  32, 250, 227, 161,  89,  44,  45,
+	98, 196, 139,  14, 178, 146, 112,  27, 210, 179,  23, 178,   7, 203, 240,
+	248, 156, 152, 251,  15,  38, 221, 146, 138, 181, 212,  73, 216,  46, 214,
+	112,  11,  82, 180, 103, 138,  71, 237,  40, 145,  52,  29, 216, 221, 194,
+	220,  41,  49,   0, 103,  36, 129, 185, 152, 158, 116, 101,   9, 171,  29,
+	178,  85, 245, 121, 213, 235, 184,  90, 215, 229, 248,  89, 172, 112, 190,
+	62,  83, 112, 209, 145,  85, 226, 229, 147, 105, 188, 142,  43, 172, 220,
+	155, 179,  40,  29, 201,  85,   6, 239, 204, 153, 155, 243, 117,  47, 216,
+	222, 216,  38, 229, 188, 146,  51, 188, 162, 119,  81, 194,  82, 205, 130,
+	178, 189,  24, 120, 173,  97, 108,  80,  34, 102, 111,  73,  87, 182, 123,
+	2, 107,   2, 231, 133, 184, 213,  89,  96,  69, 194,  56,  57,  47,  91,
+	222,  57, 100, 253,  68, 130,  92, 175,  94, 148, 254, 129,  15, 240, 176,
+	88,   7, 116,  39,  77, 226, 181, 187,  68, 172, 146, 154,  69,  78, 101,
+	98,  77,  57,  91,  99,  81, 250,  82, 215, 138, 202, 178, 188,  44,  78,
+	37,  67, 254, 196, 143, 201, 152, 141,  98, 217,  86, 224,  60,  92, 149,
+	64, 207, 175,   0, 151, 178,  66, 119, 101, 249, 243,  61, 184, 163, 254,
+	99, 210, 218,  48,  94,  94,   5, 101,  13, 162,   1, 176, 100, 251,  97,
+	167, 249,  49, 233, 115, 179, 250, 111,  78,  23, 109, 115, 193, 178, 130,
+	62,   5, 151,  20,  52,  23, 241,  76, 200,  10, 106, 149, 103, 173,  50,
+	158,  21,  28,  45, 120, 174,  96, 110, 193,  71,  61, 232, 151,  61, 219,
+	115,   4, 170,  82, 254, 156, 206,  16,  47, 197, 127, 231, 231, 244, 153,
+	222,  27, 240, 159, 200,  63, 153, 185,  24, 191, 162, 246,  71, 153,   0,
+	0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130
+};
diff --git a/backends/cloud/cloudmanager.cpp b/backends/cloud/cloudmanager.cpp
index 3456b99..5f7d694 100644
--- a/backends/cloud/cloudmanager.cpp
+++ b/backends/cloud/cloudmanager.cpp
@@ -45,6 +45,8 @@ const char *const CloudManager::kStoragePrefix = "storage_";
 CloudManager::CloudManager() : _currentStorageIndex(0), _activeStorage(nullptr) {}
 
 CloudManager::~CloudManager() {
+	g_system->getEventManager()->getEventDispatcher()->unregisterSource(this);
+
 	delete _activeStorage;
 	freeStorages();
 }
@@ -108,6 +110,8 @@ void CloudManager::init() {
 		_currentStorageIndex = ConfMan.getInt("current_storage", ConfMan.kCloudDomain);
 
 	loadStorage();
+
+	g_system->getEventManager()->getEventDispatcher()->registerSource(this, false);
 }
 
 void CloudManager::save() {
@@ -383,6 +387,10 @@ void CloudManager::setSyncTarget(GUI::CommandReceiver *target) const {
 		storage->setSyncTarget(target);
 }
 
+void CloudManager::showCloudDisabledIcon() {
+	_icon.show(CloudIcon::kDisabled, 3000);
+}
+
 ///// DownloadFolderRequest-related /////
 
 bool CloudManager::startDownload(Common::String remotePath, Common::String localPath) const {
@@ -453,4 +461,20 @@ Common::String CloudManager::getDownloadLocalDirectory() const {
 	return "";
 }
 
+bool CloudManager::pollEvent(Common::Event &event) {
+	if (_icon.needsUpdate()) {
+		if (_icon.getShownType() != CloudIcon::kDisabled) {
+			if (isWorking()) {
+				_icon.show(CloudIcon::kSyncing);
+			} else {
+				_icon.show(CloudIcon::kNone);
+			}
+		}
+
+		_icon.update();
+	}
+
+	return false;
+}
+
 } // End of namespace Cloud
diff --git a/backends/cloud/cloudmanager.h b/backends/cloud/cloudmanager.h
index 8a99d5b..f58ea83 100644
--- a/backends/cloud/cloudmanager.h
+++ b/backends/cloud/cloudmanager.h
@@ -24,9 +24,12 @@
 #define CLOUD_CLOUDMANAGER_H
 
 #include "backends/cloud/storage.h"
+#include "backends/cloud/cloudicon.h"
+
 #include "common/array.h"
 #include "common/singleton.h"
 #include "common/str-array.h"
+#include "common/events.h"
 
 namespace GUI {
 
@@ -47,7 +50,7 @@ enum StorageID {
 	kStorageTotal
 };
 
-class CloudManager : public Common::Singleton<CloudManager> {
+class CloudManager : public Common::Singleton<CloudManager>, public Common::EventSource {
 	static const char *const kStoragePrefix;
 
 	struct StorageConfig {
@@ -61,6 +64,8 @@ class CloudManager : public Common::Singleton<CloudManager> {
 	Storage *_activeStorage;
 	Common::Array<Storage *> _storagesToRemove;
 
+	CloudIcon _icon;
+
 	void loadStorage();
 
 	Common::String getStorageConfigName(uint32 index) const;
@@ -71,6 +76,18 @@ class CloudManager : public Common::Singleton<CloudManager> {
 	/** Calls the error callback with a special "no storage connected" message. */
 	void passNoStorageConnected(Networking::ErrorCallback errorCallback) const;
 
+	/**
+	 * Common::EventSource interface
+	 *
+	 * The cloud manager registers itself as an event source even if does not
+	 * actually produce events as a mean to be polled periodically by the GUI
+	 * or engine code.
+	 *
+	 * The periodical polling is used to update the OSD icon indicating
+	 * background sync activity.
+	 */
+	virtual bool pollEvent(Common::Event &event) override;
+
 public:
 	CloudManager();
 	virtual ~CloudManager();
@@ -233,6 +250,9 @@ public:
 	/** Sets SavesSyncRequest's target to given CommandReceiver. */
 	void setSyncTarget(GUI::CommandReceiver *target) const;
 
+	/** Shows a "cloud disabled" icon for three seconds. */
+	void showCloudDisabledIcon();
+
 	///// DownloadFolderRequest-related /////
 
 	/** Starts a folder download. */
diff --git a/backends/module.mk b/backends/module.mk
index 9ee61ea..10dde0b 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -21,6 +21,7 @@ MODULE_OBJS := \
 
 ifdef USE_LIBCURL
 MODULE_OBJS += \
+	cloud/cloudicon.o \
 	cloud/cloudmanager.o \
 	cloud/iso8601.o \
 	cloud/storage.o \
@@ -54,7 +55,6 @@ MODULE_OBJS += \
 	cloud/onedrive/onedriveuploadrequest.o \
 	networking/curl/connectionmanager.o \
 	networking/curl/networkreadstream.o \
-	networking/curl/cloudicon.o \
 	networking/curl/curlrequest.o \
 	networking/curl/curljsonrequest.o \
 	networking/curl/request.o
diff --git a/backends/networking/curl/cloudicon.cpp b/backends/networking/curl/cloudicon.cpp
deleted file mode 100644
index 9aa08af..0000000
--- a/backends/networking/curl/cloudicon.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "backends/networking/curl/cloudicon.h"
-#include "backends/cloud/cloudmanager.h"
-#include "common/memstream.h"
-#include "gui/ThemeEngine.h"
-#include "gui/gui-manager.h"
-#include "image/png.h"
-
-namespace Networking {
-
-const float CloudIcon::ALPHA_STEP = 0.025;
-const float CloudIcon::ALPHA_MAX = 1;
-const float CloudIcon::ALPHA_MIN = 0.6;
-
-CloudIcon::CloudIcon():
-	_wasVisible(false), _iconsInited(false), _showingDisabled(false),
-	_currentAlpha(0), _alphaRising(true), _disabledFrames(0) {
-	initIcons();
-}
-
-CloudIcon::~CloudIcon() {
-	_icon.free();
-	_disabledIcon.free();
-	_alphaIcon.free();
-}
-
-bool CloudIcon::draw() {
-	bool stop = false;
-	initIcons();
-
-	if (CloudMan.isWorking() || _disabledFrames > 0) {
-		if (g_system) {
-			if (!_wasVisible) {
-				_wasVisible = true;
-			}
-			--_disabledFrames;
-			if (_alphaRising) {
-				if (_currentAlpha < ALPHA_MIN)
-					_currentAlpha += 5 * ALPHA_STEP;
-				else
-					_currentAlpha += ALPHA_STEP;
-				if (_currentAlpha > ALPHA_MAX) {
-					_currentAlpha = ALPHA_MAX;
-					_alphaRising = false;
-				}
-			} else {
-				_currentAlpha -= ALPHA_STEP;
-				if (_currentAlpha < ALPHA_MIN) {
-					_currentAlpha = ALPHA_MIN;
-					_alphaRising = true;
-				}
-			}
-		} else {
-			_wasVisible = false;
-		}
-	} else {
-		_wasVisible = false;
-		_currentAlpha -= 5 * ALPHA_STEP;
-		if (_currentAlpha <= 0) {
-			_currentAlpha = 0;
-			stop = true;
-		}
-	}
-
-	if (g_system) {
-		if (!stop) {
-			makeAlphaIcon((_showingDisabled ? _disabledIcon : _icon), _currentAlpha);
-			g_system->displayActivityIconOnOSD(&_alphaIcon);
-		} else {
-			g_system->displayActivityIconOnOSD(nullptr);
-		}
-	}
-
-	if (stop)
-		_showingDisabled = false;
-	return stop;
-}
-
-void CloudIcon::showDisabled() {
-	_showingDisabled = true;
-	_disabledFrames = 20 * 3; //3 seconds 20 fps
-}
-
-#include "backends/networking/curl/cloudicon_data.h"
-#include "backends/networking/curl/cloudicon_disabled_data.h"
-
-void CloudIcon::initIcons() {
-	if (_iconsInited)
-		return;
-	loadIcon(_icon, cloudicon_data, ARRAYSIZE(cloudicon_data));
-	loadIcon(_disabledIcon, cloudicon_disabled_data, ARRAYSIZE(cloudicon_disabled_data));
-	_iconsInited = true;
-}
-
-void CloudIcon::loadIcon(Graphics::Surface &icon, byte *data, uint32 size) {
-	Image::PNGDecoder decoder;
-	Common::MemoryReadStream stream(data, size);
-	if (!decoder.loadStream(stream))
-		error("CloudIcon::loadIcon: error decoding PNG");
-
-	const Graphics::Surface *s = decoder.getSurface();
-	return icon.copyFrom(*s);
-}
-
-void CloudIcon::makeAlphaIcon(Graphics::Surface &icon, float alpha) {
-	_alphaIcon.copyFrom(icon);
-
-	byte *pixels = (byte *)_alphaIcon.getPixels();
-	for (int y = 0; y < _alphaIcon.h; y++) {
-		byte *row = pixels + y * _alphaIcon.pitch;
-		for (int x = 0; x < _alphaIcon.w; x++) {
-			uint32 srcColor;
-			if (_alphaIcon.format.bytesPerPixel == 2)
-				srcColor = READ_UINT16(row);
-			else if (_alphaIcon.format.bytesPerPixel == 3)
-				srcColor = READ_UINT24(row);
-			else
-				srcColor = READ_UINT32(row);
-
-			// Update color's alpha
-			byte r, g, b, a;
-			_alphaIcon.format.colorToARGB(srcColor, a, r, g, b);
-			a = (byte)(a * alpha);
-			uint32 color = _alphaIcon.format.ARGBToColor(a, r, g, b);
-
-			if (_alphaIcon.format.bytesPerPixel == 2)
-				*((uint16 *)row) = color;
-			else
-				*((uint32 *)row) = color;
-
-			row += _alphaIcon.format.bytesPerPixel;
-		}
-	}
-}
-
-} // End of namespace Networking
diff --git a/backends/networking/curl/cloudicon.h b/backends/networking/curl/cloudicon.h
deleted file mode 100644
index d6ea60b..0000000
--- a/backends/networking/curl/cloudicon.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef BACKENDS_NETWORKING_CURL_CLOUDICON_H
-#define BACKENDS_NETWORKING_CURL_CLOUDICON_H
-
-#include "graphics/surface.h"
-
-namespace Networking {
-
-class CloudIcon {
-	static const float ALPHA_STEP, ALPHA_MAX, ALPHA_MIN;
-
-	bool _wasVisible, _iconsInited, _showingDisabled;
-	Graphics::Surface _icon, _disabledIcon, _alphaIcon;
-	float _currentAlpha;
-	bool _alphaRising;
-	int _disabledFrames;
-
-	void initIcons();
-	void loadIcon(Graphics::Surface &icon, byte *data, uint32 size);
-	void makeAlphaIcon(Graphics::Surface &icon, float alpha);
-
-public:
-	CloudIcon();
-	~CloudIcon();
-
-	/**
-	 * This method is called from ConnectionManager every time
-	 * its own timer calls the handle() method. The primary
-	 * responsibility of this draw() method is to draw cloud icon
-	 * on ScummVM's OSD when current cloud Storage is working.
-	 *
-	 * As we don't want ConnectionManager to work when no
-	 * Requests are running, we'd like to stop the timer. But then
-	 * this icon wouldn't have time to disappear smoothly. So,
-	 * in order to do that, ConnectionManager stop its timer
-	 * only when this draw() method returns true, indicating that
-	 * the CloudIcon has disappeared and the timer could be stopped.
-	 *
-	 * @return true if ConnMan's timer could be stopped.
-	 */
-	bool draw();
-
-	/** Draw a "cloud disabled" icon instead of "cloud syncing" one. */
-	void showDisabled();
-};
-
-} // End of namespace Networking
-
-#endif
diff --git a/backends/networking/curl/cloudicon_data.h b/backends/networking/curl/cloudicon_data.h
deleted file mode 100644
index 21d8818..0000000
--- a/backends/networking/curl/cloudicon_data.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-// This is a PNG file dumped into array.
-// $ recode data..d1 <dists/cloudicon.png >cloudicon_data.h
-// The tool is from https://github.com/pinard/Recode
-
-byte cloudicon_data[] = {
-	137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68,
-	82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115,
-	122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8,
-	124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11,
-	18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116,
-	69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109,
-	101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0,
-	0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101,
-	0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107,
-	115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4,  50,  73,  68,
-	65,  84,  88, 133, 197, 151, 109, 104, 150, 101,  20, 199, 127, 247, 227,
-	179, 105,  51,  23,  65, 181, 150, 224, 154, 214, 132, 194, 249,  33, 165,
-	22, 189, 231, 194, 210, 250,  16, 171, 180,  55,  42, 152,  68,  65, 100,
-	52, 233,   5, 146, 144, 144,  26, 249, 169,  62, 164,  80,  89, 152,  25,
-	18, 226,  42,  49,  87,  88, 180,  94,  96,  96, 246, 234, 180,  70,  50,
-	66, 214,  55, 247,  22, 133, 247, 255, 244, 225,  58, 247, 158, 107, 143,
-	219, 243,  60, 186, 192,   3, 135, 251, 220, 215, 117, 223, 231, 127, 238,
-	235, 252, 239, 235,  58,  39, 105, 250, 206,  56, 147, 146,  55,  85, 252,
-	108,  13, 112,  59, 176,  12,  88,   2, 204,   7, 230, 248, 220,  48, 208,
-	15, 244,   2, 221,  64,  23,  48,  86, 137, 211, 228, 146, 158, 178,  43,
-	80,   7, 172,   3, 218, 129, 179,  43, 241,   9, 140,   0, 155, 129,  87,
-	128, 193, 146,  15,  47, 248, 178, 100,   0, 237,  64,  39, 112,  14,  96,
-	174,  20, 217, 153, 228, 162,   0,  50,  25,   2,  58, 128,  45,  83,   1,
-	228,  53, 121,  10, 170, 129, 183, 128, 213, 126,  47, 215,  49, 224,  39,
-	224,  19, 160,   7,  56,   2, 204,   0, 154, 128,  27, 128, 229, 110, 215,
-	120,  64, 181, 132, 149, 184,  30, 120,   4, 248, 183,  24,  40, 185, 248,
-	243, 147,  86, 160, 154, 144, 195,  91, 252,  43,   5, 140,   2,  31,   2,
-	27, 129, 195,  83, 125, 141,  75,  19, 240,   2, 129,  47, 179,  61, 144,
-	4, 216,   7, 172,  44,  14,  34, 105, 232,  62,  41, 128, 109, 192, 189,
-	14, 126,   2,  24,   0,  30,   3, 246, 150,   1,  46, 150,  54,  15, 184,
-	1, 200, 251, 216, 123, 192, 253,  19,   2, 152, 183, 119,  66,   0, 237,
-	192,  27, 110, 159,   0, 250, 128, 187, 128,  67, 167,   8, 158, 201,  98,
-	224,   3, 160, 209, 131,  72, 128,  53,  68, 156, 200, 153, 192, 181, 206,
-	68, 167, 219,  50,  49,  96, 226,  78,  19, 135, 162, 103, 138, 117, 169,
-	137,  46,  19, 163,  38,  82,  19,  63, 152, 120, 220, 196,  12, 159,  63,
-	104,  98, 149, 137,  99, 238, 211,  28, 163,  46, 243, 145, 147, 192, 117,
-	157,  68, 173, 219, 195,  18, 143,  74,  28, 137, 230, 139, 181,  77, 162,
-	71,  98, 165,  68, 141,  68,  78,  98, 145, 196, 107,  18,  59, 252,  30,
-	137,   3,  18, 207,  72, 140, 249, 125, 173,  99,  33,  65, 114, 209, 110,
-	131, 192, 218,  65,   2, 105,   4, 108, 245, 165,  74, 125, 165, 206,   5,
-	214,   2, 151,   3,   7, 128, 119, 128,  95, 253, 189, 169, 228, 105, 224,
-	85, 183, 171, 128,  29, 192,  29,   4,  82, 142,  18, 246, 151, 177, 164,
-	126, 151,   1, 220,   3, 188,  79,  32, 222,  40,  97, 167, 235, 243, 151,
-	207,   2, 190,   5, 154,  35, 231, 223,   0,  45, 101, 242, 127,  12, 152,
-	75,  97, 191,  88,  12, 124, 237, 254,  18,  96,  21, 176,  35, 227, 192,
-	50, 207,  15,  38, 126,  49, 113,  56, 202, 243, 221,  38, 154, 139, 114,
-	223,  82, 130,  23, 153, 214, 155,  88,  20, 221, 255, 104, 226, 104, 116,
-	223, 106,  42, 144, 112, 169, 137, 196, 131, 248,  56,  10, 166, 222, 196,
-	141,  21, 128,  77, 165, 223, 155, 120,  42,  34, 246, 158, 200, 247,  18,
-	19, 228,  21, 178,  60, 223, 151,  41,   1, 190, 112, 251,  60, 224, 171,
-	104, 238, 116,  36,  33, 240, 224,  32, 240,  25, 176,  31, 120, 194, 199,
-	27, 161, 112,  26, 102, 167, 154,   1, 127, 186, 253,  98,   9, 240,  81,
-	2,  97,  43, 149, 231,  61, 128, 129, 104, 108,  78,  28,  64,  44,  25,
-	105, 218,  74,  56, 156,  13, 252,  76, 248,  43,  42, 145, 140, 176, 249,
-	226, 137, 188, 133,  20,  12, 123,  68,   9, 225, 171, 127,   7,  46,  40,
-	227, 180,  82, 112, 128, 153, 126, 189, 148, 194, 105,  57,  12,   5,  18,
-	246,  71,  68, 185, 214, 237, 191, 166,  65, 190,  98, 237, 243, 235, 205,
-	209,  88, 127, 188,  19, 246, 250,  53,  39, 177, 194, 237, 157,  37, 118,
-	193,  83, 213, 183,  37, 102,  73,  92,  39, 145, 196, 152,  57,  75, 193,
-	82, 246, 249,  21,  75,  89, 104,  41, 205, 150, 178, 222,  82, 250, 163,
-	241, 211, 213, 253, 150, 178, 201,  82, 174, 180, 148, 185, 150, 146, 248,
-	120, 183, 165, 133,  20, 116, 153,  24, 113, 123, 150, 137, 103,  77,  28,
-	55, 113, 141, 137, 173,  38, 134,  60,  61, 167, 178, 236,   3,  38,  54,
-	152, 184, 213, 255, 253,  39, 221,  55, 142, 213, 101,  42, 252,   5,  99,
-	132, 202, 101,  45,  97, 175,  94,  14, 172,   0, 118,   1,  15, 185,  78,
-	71,  86,  19, 138, 217, 196, 117, 179,  99, 146, 204, 126, 125, 188,  30,
-	168,  35, 236, 255, 181, 132,   3, 233,  15, 224,  54, 202,  87,  64, 229,
-	164,   5, 216,   9,  92, 232, 224,  67, 192,  66, 188,  88, 205,  69, 185,
-	26, 180, 148,  14, 207,  81, 206,  82, 230,  89, 202, 110,  75, 185, 108,
-	26, 249, 191, 202,  82, 222, 181, 148, 243, 163, 220, 119,  56,  22, 150,
-	78, 172,   7, 144, 216,  34, 177, 205, 237, 188, 196,   2, 137,  61,  18,
-	15, 158,   6, 243,  31, 144, 216,  37, 209, 224, 190,  18, 137, 237, 142,
-	49, 254,  92,  50, 115, 211, 164,  69, 233,  71,  64,  43, 140,  23, 165,
-	127,  19,  26, 142, 231,   8, 117, 192,  84,  82,  69,  56, 118, 215,   3,
-	55,  17,  54, 160, 172,  40, 253, 148,  80, 168,  78,  44,  74, 171,  59,
-	39, 237,  11, 170, 129,  55, 129, 251,  40, 108, 205,   2, 254,   1, 126,
-	243,  96, 122, 129, 163,  62, 223,   0,  92, 237, 160, 141,  17, 112,  38,
-	219, 129, 135, 139, 193,   1, 146, 170, 151,  43, 106,  76, 106, 139, 198,
-	229, 192,  73,  20,  96,  12, 152, 177, 253,  56, 101,  26, 147,  36, 191,
-	177, 226, 214, 108,  13, 133, 214, 172, 220,  75,  35,  14,  90, 190,  53,
-	203, 189,  84, 113, 119, 156,  53, 167, 173, 192,  21, 252,  95, 205, 105,
-	178, 225, 204, 182, 231, 255,   1, 200,  91, 112, 221, 160, 249,  68,  42,
-	0,   0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130
-};
diff --git a/backends/networking/curl/cloudicon_disabled_data.h b/backends/networking/curl/cloudicon_disabled_data.h
deleted file mode 100644
index 4340a8a..0000000
--- a/backends/networking/curl/cloudicon_disabled_data.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-// This is a PNG file dumped into array.
-// $ recode data..d1 <dists/cloudicon_disabled.png >cloudicon_disabled_data.h
-// The tool is from https://github.com/pinard/Recode
-
-byte cloudicon_disabled_data[] = {
-	137,  80,  78,  71,  13,  10,  26,  10,   0,   0,   0,  13,  73,  72,  68,
-	82,   0,   0,   0,  32,   0,   0,   0,  32,   8,   6,   0,   0,   0, 115,
-	122, 122, 244,   0,   0,   0,   4, 115,  66,  73,  84,   8,   8,   8,   8,
-	124,   8, 100, 136,   0,   0,   0,   9, 112,  72,  89, 115,   0,   0,  11,
-	18,   0,   0,  11,  18,   1, 210, 221, 126, 252,   0,   0,   0,  22, 116,
-	69,  88, 116,  67, 114, 101,  97, 116, 105, 111, 110,  32,  84, 105, 109,
-	101,   0,  48,  54,  47,  48,  51,  47,  49,  54, 159, 192, 233, 192,   0,
-	0,   0,  28, 116,  69,  88, 116,  83, 111, 102, 116, 119,  97, 114, 101,
-	0,  65, 100, 111,  98, 101,  32,  70, 105, 114, 101, 119, 111, 114, 107,
-	115,  32,  67,  83,  54, 232, 188, 178, 140,   0,   0,   4, 139,  73,  68,
-	65,  84,  88, 133, 197, 215,  91, 168,  86,  69,  20,   7, 240, 223, 254,
-	244, 120, 236, 120,  57,  26,  94,  10,  31,  34,  35,  11,  36, 203,  74,
-	212, 160, 204, 212, 110, 166, 248, 208, 205, 172, 151, 144, 136, 158,  82,
-	80, 168,  32, 233, 165, 160,  32, 130, 236, 165,  34, 204,  74,  18,  52,
-	36, 169, 232,  34,  24, 221, 243, 218, 133,  74,  77, 195,  44, 200,  91,
-	122, 188, 156, 172, 102, 159, 221, 195, 204, 246, 219, 126, 231, 226,  17,
-	138,  22,  12, 123, 246, 236, 153, 245,  95, 107, 205, 127, 205, 172, 157,
-	21, 254,  95, 233,  27, 122,  63, 183,   5, 179,  48,  13,  87,  98,  52,
-	6, 167, 111,  71, 176,  11,  27, 177,  14, 107, 209, 222,  27, 165, 217,
-	137, 211, 207,  25, 137, 197, 152, 143,  65, 189, 209, 137, 163, 120,   1,
-	79,  98, 111, 143, 147, 143, 247, 172, 108,  62, 158, 194,  16,  20, 169,
-	105, 232, 151,  82, 171,  24,  80,  74,  27,  22, 225, 197, 110,  13, 104,
-	235, 122, 188,  31,  94, 194,  93,  21, 192,  14,  49, 172, 223, 226, 109,
-	124, 130,  29, 232, 131,  49, 184,  22,  55, 166, 126,  75, 131,  65, 175,
-	225,  94, 252, 213, 201, 128, 131,  93, 131, 191, 137,  27,  42, 192, 199,
-	241,   6, 158, 192, 246, 238, 188,  73,  50,   6, 143,  98,  78,  50, 164,
-	140, 200, 123,  34, 135,  78,  49,  34, 219, 215,  89, 193, 171, 152, 151,
-	192,   3, 246, 224,   1, 188, 123,  26, 224, 170,  92, 134, 143,  49, 160,
-	50,  86,  96,   5, 238, 174,  78, 108, 204, 130, 249,  98, 216,  75, 240,
-	109, 184,  13,  63, 156,   1, 248,  68,  44,  21, 189,  47, 165,  67, 140,
-	196,  60, 172,  87, 225,  68, 182, 167,  62, 105, 100,   2, 106,  77,  11,
-	118, 139, 123, 186, 163,  59, 164,  53,  76,  16, 195, 125,  29, 250,  15,
-	227, 167,  73,  12, 237,  27,  73,  91,  75, 142,  28,  21, 185,  51,  60,
-	141, 181, 225,  98,  41,  59, 106,  33, 185,  26,  88,  28, 104,  77, 253,
-	163, 129, 251,   3,  59,  42, 223,  79, 105, 171, 184,  53, 240,  73, 224,
-	150,  64, 203,  32, 106,  99, 185, 160, 224, 236,  16, 245, 118,   4,  54,
-	5, 166,   4,  22,   6, 218, 211, 218, 214, 132,  37,  32,  75, 238, 181,
-	224,  55,  12,  76, 222, 191, 140, 251, 144,  39,  79, 135,  98,   1, 198,
-	98,  11, 150, 227, 251,  50, 204,  67, 113, 121,  90, 156,  57, 185, 127,
-	135, 154, 184,   9,  95, 160,   9,  43,  49,  59,  69, 225,  24, 206,  65,
-	123, 150,  54, 247,  14, 188, 158, 214,  30,  23,  79, 186, 109,   9, 252,
-	44, 124, 142, 113, 149, 232, 127, 134, 201, 196,  88,  79,  66, 115,   5,
-	252,  24, 182, 114, 224,  32,  35, 230, 212, 207, 139,  75, 241, 169, 168,
-	47, 195, 157,  88,  89, 110, 193, 180,  64, 145, 250, 223,   5, 182,  87,
-	194, 125, 123,  96,  92, 195,  22,  76,  14, 201, 227, 177, 226,  65, 144,
-	227, 111,  28, 198, 151, 113, 131, 135,   5,  46, 169, 172, 249,  38, 176,
-	187, 242,  62,  35, 160, 150, 199, 197,  19, 114, 178, 156,  34, 231, 173,
-	244, 180, 154, 115, 115, 166, 166,  57, 167, 180, 193,  34,   3,   7, 165,
-	61,  11, 137, 105,  27, 112, 160,  62, 111, 235, 106,  22, 166, 126,  71,
-	206,  59, 165, 238, 156,  43, 114, 100, 155,  98, 120, 218, 146, 206,   2,
-	83, 241, 225,  26, 134, 165, 253,  27, 173,  65, 134, 138, 137, 222, 154,
-	222, 139, 228, 249,  87, 233, 217, 133,  76, 159,  19,  47, 169,  89, 226,
-	129, 214,  71, 188, 192, 134, 148, 231,  64, 121, 171,  21, 248,  85, 244,
-	232, 177,  30, 192,  59,  90,  82,   6, 193,   9, 108, 234,  30,  28,  30,
-	9, 209, 128,  74, 214,  71, 204, 190, 121, 231, 201,   5, 228, 220, 218,
-	248,  97, 136, 200, 246, 102, 106,  29, 234,  73, 190,   5, 135, 186,   7,
-	135, 201,   9, 167, 111, 227, 135,  50,   2,  71, 146,  69, 153, 232, 245,
-	206, 192, 136, 234, 196,  86,  49,  13, 154, 162, 113,  39, 211, 101,  51,
-	126, 239,  25,  28, 154,  19, 206, 133, 234, 119, 195,  17, 234,  36, 220,
-	85,  33, 202, 213, 169, 191, 175,  36,  92, 139, 152, 106,   3, 212,   9,
-	119,  76, 100, 251, 126, 157,   9, 218,  69, 219, 150, 158, 211,  42,  99,
-	187, 114, 245, 147, 112,  83, 122, 214,   2,  51,  83, 127,  85,  16,  89,
-	62,  94,  60,  61, 202,  20,  58,  36,  38, 244, 126,  93, 159, 146,  93,
-	180, 101, 129, 254, 129, 107,   2,  89,  26, 219,  24,  42,   6, 188,  95,
-	153, 124,  81, 202, 251,  37,   3, 249, 101, 188, 120, 114, 148, 223, 219,
-	197, 212,  56, 208, 123, 240, 245, 129, 167,   3,  19,   3, 163,  42,   6,
-	172,  11, 234,  36,  92,  43, 242, 105,  32, 250, 227, 161,  89,  44,  45,
-	98, 196, 139,  14, 178, 146, 112,  27, 210, 179,  23, 178,   7, 203, 240,
-	248, 156, 152, 251,  15,  38, 221, 146, 138, 181, 212,  73, 216,  46, 214,
-	112,  11,  82, 180, 103, 138,  71, 237,  40, 145,  52,  29, 216, 221, 194,
-	220,  41,  49,   0, 103,  36, 129, 185, 152, 158, 116, 101,   9, 171,  29,
-	178,  85, 245, 121, 213, 235, 184,  90, 215, 229, 248,  89, 172, 112, 190,
-	62,  83, 112, 209, 145,  85, 226, 229, 147, 105, 188, 142,  43, 172, 220,
-	155, 179,  40,  29, 201,  85,   6, 239, 204, 153, 155, 243, 117,  47, 216,
-	222, 216,  38, 229, 188, 146,  51, 188, 162, 119,  81, 194,  82, 205, 130,
-	178, 189,  24, 120, 173,  97, 108,  80,  34, 102, 111,  73,  87, 182, 123,
-	2, 107,   2, 231, 133, 184, 213,  89,  96,  69, 194,  56,  57,  47,  91,
-	222,  57, 100, 253,  68, 130,  92, 175,  94, 148, 254, 129,  15, 240, 176,
-	88,   7, 116,  39,  77, 226, 181, 187,  68, 172, 146, 154,  69,  78, 101,
-	98,  77,  57,  91,  99,  81, 250,  82, 215, 138, 202, 178, 188,  44,  78,
-	37,  67, 254, 196, 143, 201, 152, 141,  98, 217,  86, 224,  60,  92, 149,
-	64, 207, 175,   0, 151, 178,  66, 119, 101, 249, 243,  61, 184, 163, 254,
-	99, 210, 218,  48,  94,  94,   5, 101,  13, 162,   1, 176, 100, 251,  97,
-	167, 249,  49, 233, 115, 179, 250, 111,  78,  23, 109, 115, 193, 178, 130,
-	62,   5, 151,  20,  52,  23, 241,  76, 200,  10, 106, 149, 103, 173,  50,
-	158,  21,  28,  45, 120, 174,  96, 110, 193,  71,  61, 232, 151,  61, 219,
-	115,   4, 170,  82, 254, 156, 206,  16,  47, 197, 127, 231, 231, 244, 153,
-	222,  27, 240, 159, 200,  63, 153, 185,  24, 191, 162, 246,  71, 153,   0,
-	0,   0,   0,  73,  69,  78,  68, 174,  66,  96, 130
-};
diff --git a/backends/networking/curl/connectionmanager.cpp b/backends/networking/curl/connectionmanager.cpp
index 2b2c84f..e1761bd 100644
--- a/backends/networking/curl/connectionmanager.cpp
+++ b/backends/networking/curl/connectionmanager.cpp
@@ -78,11 +78,6 @@ Request *ConnectionManager::addRequest(Request *request, RequestCallback callbac
 	return request;
 }
 
-void ConnectionManager::showCloudDisabledIcon() {
-	_icon.showDisabled();
-	startTimer();
-}
-
 Common::String ConnectionManager::urlEncode(Common::String s) const {
 	if (!_multi)
 		return "";
@@ -137,7 +132,7 @@ void ConnectionManager::handle() {
 	if (_frame % CURL_PERIOD == 0)
 		processTransfers();
 
-	if (_icon.draw() && _requests.empty() && !hasAddedRequests())
+	if (_requests.empty() && !hasAddedRequests())
 		stopTimer();
 	_handleMutex.unlock();
 }
diff --git a/backends/networking/curl/connectionmanager.h b/backends/networking/curl/connectionmanager.h
index fd90b63..f6a9fcb 100644
--- a/backends/networking/curl/connectionmanager.h
+++ b/backends/networking/curl/connectionmanager.h
@@ -23,7 +23,6 @@
 #ifndef BACKENDS_NETWORKING_CURL_CONNECTIONMANAGER_H
 #define BACKENDS_NETWORKING_CURL_CONNECTIONMANAGER_H
 
-#include "backends/networking/curl/cloudicon.h"
 #include "backends/networking/curl/request.h"
 #include "common/str.h"
 #include "common/singleton.h"
@@ -79,7 +78,6 @@ class ConnectionManager : public Common::Singleton<ConnectionManager> {
 	bool _timerStarted;
 	Common::Array<RequestWithCallback> _requests, _addedRequests;
 	Common::Mutex _handleMutex, _addedRequestsMutex;
-	CloudIcon _icon;
 	uint32 _frame;
 
 	void startTimer(int interval = TIMER_INTERVAL);
@@ -115,9 +113,6 @@ public:
 	 */
 	Request *addRequest(Request *request, RequestCallback callback = nullptr);
 
-	/** Shows a "cloud disabled" icon for a three seconds. */
-	void showCloudDisabledIcon();
-
 	/** Return URL-encoded version of given string. */
 	Common::String urlEncode(Common::String s) const;
 
diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp
index cadd3e9..4ae8732 100644
--- a/gui/saveload-dialog.cpp
+++ b/gui/saveload-dialog.cpp
@@ -229,7 +229,7 @@ void SaveLoadChooserDialog::handleCommand(CommandSender *sender, uint32 cmd, uin
 void SaveLoadChooserDialog::runSaveSync(bool hasSavepathOverride) {
 	if (!CloudMan.isSyncing()) {
 		if (hasSavepathOverride) {
-			ConnMan.showCloudDisabledIcon();
+			CloudMan.showCloudDisabledIcon();
 		} else {
 			Cloud::SavesSyncRequest *request = CloudMan.syncSaves();
 			if (request)


Commit: 75599a4c25ae4d56a86c42f890c378223d6935a1
    https://github.com/scummvm/scummvm/commit/75599a4c25ae4d56a86c42f890c378223d6935a1
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-09-18T17:55:09+02:00

Commit Message:
OPENGL: Remove multithread support from displayActivityIconOnOSD

It is no longer being called by another thread.

Changed paths:
    backends/graphics/opengl/opengl-graphics.cpp
    backends/graphics/opengl/opengl-graphics.h



diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index e4df94c..4c74b77 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -58,7 +58,7 @@ OpenGLGraphicsManager::OpenGLGraphicsManager()
       _forceRedraw(false), _scissorOverride(3)
 #ifdef USE_OSD
       , _osdMessageChangeRequest(false), _osdMessageAlpha(0), _osdMessageFadeStartTime(0), _osdMessageSurface(nullptr),
-      _osdIconChangeRequest(false), _osdIconSurface(nullptr)
+      _osdIconSurface(nullptr)
 #endif
     {
 	memset(_gamePalette, 0, sizeof(_gamePalette));
@@ -72,7 +72,6 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() {
 #ifdef USE_OSD
 	delete _osdMessageSurface;
 	delete _osdIconSurface;
-	_osdIconNextData.free();
 #endif
 #if !USE_FORCED_GLES
 	ShaderManager::destroy();
@@ -368,14 +367,13 @@ void OpenGLGraphicsManager::updateScreen() {
 #ifdef USE_OSD
 	{
 		Common::StackLock lock(_osdMutex);
-
 		if (_osdMessageChangeRequest) {
 			osdMessageUpdateSurface();
 		}
+	}
 
-		if (_osdIconChangeRequest) {
-			osdIconUpdateSurface();
-		}
+	if (_osdIconSurface) {
+		_osdIconSurface->updateGLTexture();
 	}
 #endif
 
@@ -810,30 +808,11 @@ void OpenGLGraphicsManager::osdMessageUpdateSurface() {
 
 void OpenGLGraphicsManager::displayActivityIconOnOSD(const Graphics::Surface *icon) {
 #ifdef USE_OSD
-	// HACK: Actually no client code should use graphics functions from
-	// another thread. But the MT-32 emulator and network synchronization still do,
-	// thus we need to make sure this doesn't happen while a updateScreen call is done.
-	// HACK: We can't make OpenGL calls outside of the main thread. This method
-	// stores a copy of the icon. The main thread will pick up the changed icon,
-	// and copy it to an OpenGL texture.
-	Common::StackLock lock(_osdMutex);
-
-	_osdIconChangeRequest = true;
-
-	_osdIconNextData.free();
-	if (icon)
-		_osdIconNextData.copyFrom(*icon);
-#endif
-}
-
-#ifdef USE_OSD
-void OpenGLGraphicsManager::osdIconUpdateSurface() {
 	delete _osdIconSurface;
 	_osdIconSurface = nullptr;
 
-	if (_osdIconNextData.getPixels()) {
-		Graphics::Surface *converted = _osdIconNextData.convertTo(_defaultFormatAlpha);
-		_osdIconNextData.free();
+	if (icon) {
+		Graphics::Surface *converted = icon->convertTo(_defaultFormatAlpha);
 
 		_osdIconSurface = createSurface(_defaultFormatAlpha);
 		assert(_osdIconSurface);
@@ -851,13 +830,9 @@ void OpenGLGraphicsManager::osdIconUpdateSurface() {
 
 		converted->free();
 		delete converted;
-
-		_osdIconSurface->updateGLTexture();
 	}
-
-	_osdIconChangeRequest = false;
-}
 #endif
+}
 
 void OpenGLGraphicsManager::setPalette(const byte *colors, uint start, uint num) {
 	assert(_gameScreen->hasPalette());
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index 366ad48..7900f06 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -587,24 +587,6 @@ private:
 	};
 
 	/**
-	 * Request for the OSD icon surface to be updated.
-	 */
-	bool _osdIconChangeRequest;
-
-	/**
-	 * The next OSD background activity icon.
-	 *
-	 * The OSD icon will be updated with this data on the next frame.
-	 * Can be an unallocated surface if the OSD icon should not be displayed.
-	 */
-	Graphics::Surface _osdIconNextData;
-
-	/**
-	 * Set the OSD icon surface with the value of the next OSD icon.
-	 */
-	void osdIconUpdateSurface();
-
-	/**
 	 * The OSD background activity icon's contents.
 	 */
 	Surface *_osdIconSurface;


Commit: 0f9583e4ca7069b5a978ef52c97426072c93e2f4
    https://github.com/scummvm/scummvm/commit/0f9583e4ca7069b5a978ef52c97426072c93e2f4
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-09-18T17:55:09+02:00

Commit Message:
SDL: Make sure the cloud icon is cleared immediatly after it is hidden

Changed paths:
    backends/graphics/surfacesdl/surfacesdl-graphics.cpp



diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
index cd89440..adb84bf 100644
--- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
+++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp
@@ -2175,6 +2175,12 @@ void SurfaceSdlGraphicsManager::displayActivityIconOnOSD(const Graphics::Surface
 
 	Common::StackLock lock(_graphicsMutex);	// Lock the mutex until this function ends
 
+	if (_osdIconSurface && !icon) {
+		// Add a dirty rect to clear the icon on the next update
+		SDL_Rect dstRect = getOSDIconRect();
+		addDirtyRect(dstRect.x, dstRect.y, dstRect.w, dstRect.h, true);
+	}
+
 	if (_osdIconSurface) {
 		SDL_FreeSurface(_osdIconSurface);
 		_osdIconSurface = nullptr;


Commit: 5e133cdd344de7224edb260bd2c5531ab689e64a
    https://github.com/scummvm/scummvm/commit/5e133cdd344de7224edb260bd2c5531ab689e64a
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-09-18T17:55:09+02:00

Commit Message:
OPENGL: Make sure the cloud icon is cleared immediatly after it is hidden

Changed paths:
    backends/graphics/opengl/opengl-graphics.cpp



diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index 4c74b77..41f35e2 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -808,8 +808,13 @@ void OpenGLGraphicsManager::osdMessageUpdateSurface() {
 
 void OpenGLGraphicsManager::displayActivityIconOnOSD(const Graphics::Surface *icon) {
 #ifdef USE_OSD
-	delete _osdIconSurface;
-	_osdIconSurface = nullptr;
+	if (_osdIconSurface) {
+		delete _osdIconSurface;
+		_osdIconSurface = nullptr;
+
+		// Make sure the icon is cleared on the next update
+		_forceRedraw = true;
+	}
 
 	if (icon) {
 		Graphics::Surface *converted = icon->convertTo(_defaultFormatAlpha);





More information about the Scummvm-git-logs mailing list