From a9b0245c19f7a5fadde00f38ca42a18e907bb734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Sun, 26 May 2019 13:02:49 +0300 Subject: [PATCH] libgui|GLWindow: Setting window icon --- doomsday/libs/gui/include/de/graphics/glwindow.h | 2 ++ doomsday/libs/gui/src/graphics/glwindow.cpp | 12 ++++++++++++ doomsday/libs/gui/src/graphics/image.cpp | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doomsday/libs/gui/include/de/graphics/glwindow.h b/doomsday/libs/gui/include/de/graphics/glwindow.h index 3b303b4ae1..cc5ffcb97b 100644 --- a/doomsday/libs/gui/include/de/graphics/glwindow.h +++ b/doomsday/libs/gui/include/de/graphics/glwindow.h @@ -39,6 +39,7 @@ namespace de { class GLTimer; +class Image; /** * Top-level window that contains an OpenGL drawing surface. @ingroup gui @@ -83,6 +84,7 @@ class LIBGUI_PUBLIC GLWindow : public Asset GLWindow(); void setTitle(const String &title); + void setIcon(const Image &image); void setMinimumSize(const Size &minSize); void setGeometry(const Rectanglei &rect); inline void setGeometry(dint x, dint y, duint width, duint height) diff --git a/doomsday/libs/gui/src/graphics/glwindow.cpp b/doomsday/libs/gui/src/graphics/glwindow.cpp index 5ad308caa8..52ca8c3344 100644 --- a/doomsday/libs/gui/src/graphics/glwindow.cpp +++ b/doomsday/libs/gui/src/graphics/glwindow.cpp @@ -24,6 +24,7 @@ #include "de/ElapsedTimer" #include "de/EventLoop" #include "de/CoreEvent" +#include "de/Image" #include #include @@ -372,6 +373,17 @@ void GLWindow::setTitle(const String &title) SDL_SetWindowTitle(d->window, title); } +void GLWindow::setIcon(const Image &image) +{ + const Image rgba = image.convertToFormat(Image::RGBA_8888); + SDL_Surface *icon = SDL_CreateRGBSurfaceWithFormatFrom(const_cast(image.bits()), + image.width(), image.height(), + 32, image.stride(), + SDL_PIXELFORMAT_ABGR8888); + SDL_SetWindowIcon(d->window, icon); + SDL_FreeSurface(icon); +} + void GLWindow::setMinimumSize(const Size &minSize) { SDL_SetWindowMinimumSize(d->window, minSize.x, minSize.y); diff --git a/doomsday/libs/gui/src/graphics/image.cpp b/doomsday/libs/gui/src/graphics/image.cpp index 4df63826a0..7e3b13a888 100644 --- a/doomsday/libs/gui/src/graphics/image.cpp +++ b/doomsday/libs/gui/src/graphics/image.cpp @@ -606,7 +606,7 @@ bool Image::hasAlphaChannel() const Image Image::convertToFormat(Format toFormat) const { if (d->format == toFormat) -{ + { // No conversion necessary. return *this; }