diff options
author | Alexander Tkachev | 2016-06-04 16:02:20 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 4874fafb153a21de5e6ab573c50de7fbf3c46729 (patch) | |
tree | 7727dcc271867d9edb3c48ab92af0d492bb5beaf | |
parent | 1b9987ddc9ff7a69d0de5bbbbd4aee42fff08b42 (diff) | |
download | scummvm-rg350-4874fafb153a21de5e6ab573c50de7fbf3c46729.tar.gz scummvm-rg350-4874fafb153a21de5e6ab573c50de7fbf3c46729.tar.bz2 scummvm-rg350-4874fafb153a21de5e6ab573c50de7fbf3c46729.zip |
CLOUD: Fix CloudIcon
Now it loads the surface once.
-rw-r--r-- | backends/networking/curl/cloudicon.cpp | 49 | ||||
-rw-r--r-- | backends/networking/curl/cloudicon.h | 7 |
2 files changed, 49 insertions, 7 deletions
diff --git a/backends/networking/curl/cloudicon.cpp b/backends/networking/curl/cloudicon.cpp index e8c92592bf..ec89c12dc9 100644 --- a/backends/networking/curl/cloudicon.cpp +++ b/backends/networking/curl/cloudicon.cpp @@ -24,14 +24,48 @@ #include "backends/cloud/cloudmanager.h" #include "gui/ThemeEngine.h" #include "gui/gui-manager.h" +#include "image/png.h" +#include <common/file.h> +#include <backends/graphics/surfacesdl/surfacesdl-graphics.h> namespace Networking { -CloudIcon::CloudIcon(): _frame(0), _wasVisible(false) {} +CloudIcon::CloudIcon(): _frame(0), _wasVisible(false), _iconsInited(false) { + initIcons(); +} CloudIcon::~CloudIcon() {} -void CloudIcon::draw() { +void CloudIcon::initIcons() { + if (_iconsInited) return; + + Image::PNGDecoder decoder; + Common::ArchiveMemberList members; + Common::File file; + if (!file.open("cloudicon.png")) warning("failed"); + Common::SeekableReadStream *stream = &file; + if (stream) { + if (!decoder.loadStream(*stream)) + error("Error decoding PNG"); + + Graphics::TransparentSurface *s = new Graphics::TransparentSurface(*decoder.getSurface(), true); + if (s) { + Graphics::PixelFormat f = g_system->getOSDFormat(); + //f.bytesPerPixel = 4; + debug("%d in osd vs %d in s", f.bytesPerPixel, s->format.bytesPerPixel); + Graphics::TransparentSurface *s2 = s->convertTo(f); + if (s2) _icon.copyFrom(*s2); + else warning("failed converting"); + } + else warning("failed reading"); + } + _iconsInited = true; +} + +void CloudIcon::draw() { + initIcons(); + _frame++; + Cloud::Storage *storage = CloudMan.getCurrentStorage(); if (storage && storage->isWorking()) { if (g_system) { @@ -39,16 +73,19 @@ void CloudIcon::draw() { g_system->clearOSD(); _wasVisible = true; } - - const Graphics::Surface *s = g_gui.theme()->getImageSurface(GUI::ThemeEngine::kImageLogoSmall); - int x = g_system->getOverlayWidth() - s->w - 10, y = 10; - g_system->copyRectToOSD(s->getPixels(), s->pitch, x, y, s->w, s->h); } else { _wasVisible = false; } } else { _wasVisible = false; } + + if (g_system) { + if (_icon.getPixels()) { + int x = g_system->getOverlayWidth() - _icon.w - 10, y = 10; + g_system->copyRectToOSD(_icon.getPixels(), _icon.pitch, x, y, _icon.w, _icon.h); + } + } } } // End of namespace Networking diff --git a/backends/networking/curl/cloudicon.h b/backends/networking/curl/cloudicon.h index 24c1fd6f71..7cecf3acde 100644 --- a/backends/networking/curl/cloudicon.h +++ b/backends/networking/curl/cloudicon.h @@ -23,11 +23,16 @@ #ifndef BACKENDS_NETWORKING_CURL_CLOUDICON_H #define BACKENDS_NETWORKING_CURL_CLOUDICON_H +#include "graphics/transparent_surface.h" + namespace Networking { class CloudIcon { int _frame; - bool _wasVisible; + bool _wasVisible, _iconsInited; + Graphics::TransparentSurface _icon; + + void initIcons(); public: CloudIcon(); |