show OTC icon in the window bar on linux
This commit is contained in:
parent
18c122c71e
commit
8f2ad83756
Binary file not shown.
After Width: | Height: | Size: 248 B |
|
@ -45,6 +45,7 @@ public:
|
||||||
void sleep(ulong ms);
|
void sleep(ulong ms);
|
||||||
|
|
||||||
bool createWindow(int x, int y, int width, int height, int minWidth, int minHeight, bool maximized);
|
bool createWindow(int x, int y, int width, int height, int minWidth, int minHeight, bool maximized);
|
||||||
|
void setWindowIcon(const std::string& pngIcon);
|
||||||
void destroyWindow();
|
void destroyWindow();
|
||||||
void showWindow();
|
void showWindow();
|
||||||
void hideWindow();
|
void hideWindow();
|
||||||
|
|
|
@ -34,6 +34,9 @@
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
|
|
||||||
|
#include <framework/thirdparty/apngloader.h>
|
||||||
|
#include <framework/core/resourcemanager.h>
|
||||||
|
|
||||||
struct X11PlatformPrivate {
|
struct X11PlatformPrivate {
|
||||||
Display *display;
|
Display *display;
|
||||||
XVisualInfo *visual;
|
XVisualInfo *visual;
|
||||||
|
@ -695,6 +698,28 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Platform::setWindowIcon(const std::string& pngIcon)
|
||||||
|
{
|
||||||
|
apng_data apng;
|
||||||
|
std::stringstream fin;
|
||||||
|
g_resources.loadFile(pngIcon, fin);
|
||||||
|
if(load_apng(fin, &apng) == 0) {
|
||||||
|
int n = apng.width * apng.height;
|
||||||
|
std::vector<unsigned long int> iconData(n + 2);
|
||||||
|
iconData[0] = apng.width;
|
||||||
|
iconData[1] = apng.height;
|
||||||
|
for(int i=0; i < n;++i)
|
||||||
|
iconData[2 + i] = *(uint32_t*)(apng.pdata + (i * 4));
|
||||||
|
|
||||||
|
Atom property = XInternAtom(x11.display, "_NET_WM_ICON", 0);
|
||||||
|
if(!XChangeProperty(x11.display, x11.window, property, XA_CARDINAL, 32, PropModeReplace, (const unsigned char*)&iconData[0], iconData.size()))
|
||||||
|
logError("could not set app icon");
|
||||||
|
|
||||||
|
free_apng(&apng);
|
||||||
|
} else
|
||||||
|
logError("could not load app icon");
|
||||||
|
}
|
||||||
|
|
||||||
void Platform::destroyWindow()
|
void Platform::destroyWindow()
|
||||||
{
|
{
|
||||||
if(x11.glxContext) {
|
if(x11.glxContext) {
|
||||||
|
|
|
@ -64,6 +64,7 @@ void OTClient::init(std::vector<std::string> args)
|
||||||
loadConfigurations();
|
loadConfigurations();
|
||||||
|
|
||||||
// create the client window
|
// create the client window
|
||||||
|
//TODO: bind these functions and move to otclient module
|
||||||
int minWidth = 550;
|
int minWidth = 550;
|
||||||
int minHeight = 450;
|
int minHeight = 450;
|
||||||
int windowX = Fw::fromstring(g_configs.get("window x"), 0);
|
int windowX = Fw::fromstring(g_configs.get("window x"), 0);
|
||||||
|
@ -73,6 +74,7 @@ void OTClient::init(std::vector<std::string> args)
|
||||||
bool maximized = Fw::fromstring(g_configs.get("window maximized"), false);
|
bool maximized = Fw::fromstring(g_configs.get("window maximized"), false);
|
||||||
g_platform.createWindow(windowX, windowY, windowWidth, windowHeight, minWidth, minHeight, maximized);
|
g_platform.createWindow(windowX, windowY, windowWidth, windowHeight, minWidth, minHeight, maximized);
|
||||||
g_platform.setWindowTitle(Otc::AppName);
|
g_platform.setWindowTitle(Otc::AppName);
|
||||||
|
g_platform.setWindowIcon("otclient/otcicon.png");
|
||||||
|
|
||||||
// initialize graphics
|
// initialize graphics
|
||||||
g_graphics.init();
|
g_graphics.init();
|
||||||
|
|
Loading…
Reference in New Issue