aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2019-03-15 18:39:23 +0000
committerrubenwardy <rw@rubenwardy.com>2019-08-03 19:36:30 +0100
commitd1a1c5cbf055e7eacbc4aeaa53174749d4c64d87 (patch)
tree3cbc94b9dd827f01b33575acd0faa58ea7f44dd3 /src/client
parent41ad0f4f202b47daab0841a56bf27c3990670344 (diff)
downloadminetest-d1a1c5cbf055e7eacbc4aeaa53174749d4c64d87.tar.gz
minetest-d1a1c5cbf055e7eacbc4aeaa53174749d4c64d87.tar.bz2
minetest-d1a1c5cbf055e7eacbc4aeaa53174749d4c64d87.zip
Add custom colorable GUIButton implementation
Diffstat (limited to 'src/client')
-rw-r--r--src/client/renderingengine.cpp64
1 files changed, 47 insertions, 17 deletions
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index b18e91f6e..e56367afe 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "render/factory.h"
#include "inputhandler.h"
#include "gettext.h"
+#include "../gui/guiSkin.h"
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__ANDROID__) && \
!defined(SERVER) && !defined(__HAIKU__)
@@ -44,6 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
+
#endif
#ifdef __ANDROID__
@@ -52,6 +54,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
RenderingEngine *RenderingEngine::s_singleton = nullptr;
+
+static gui::GUISkin* createSkin(gui::IGUIEnvironment *environment,
+ gui::EGUI_SKIN_TYPE type, video::IVideoDriver *driver)
+{
+ gui::GUISkin* skin = new gui::GUISkin(type, driver);
+
+ gui::IGUIFont* builtinfont = environment->getBuiltInFont();
+ gui::IGUIFontBitmap* bitfont = 0;
+ if (builtinfont && builtinfont->getType() == gui::EGFT_BITMAP)
+ bitfont = (gui::IGUIFontBitmap*)builtinfont;
+
+ gui::IGUISpriteBank* bank = 0;
+ skin->setFont(builtinfont);
+
+ if (bitfont)
+ bank = bitfont->getSpriteBank();
+
+ skin->setSpriteBank(bank);
+
+ return skin;
+}
+
+
RenderingEngine::RenderingEngine(IEventReceiver *receiver)
{
sanity_check(!s_singleton);
@@ -112,6 +137,11 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
driver = m_device->getVideoDriver();
s_singleton = this;
+
+ auto skin = createSkin(m_device->getGUIEnvironment(),
+ gui::EGST_WINDOWS_METALLIC, driver);
+ m_device->getGUIEnvironment()->setSkin(skin);
+ skin->drop();
}
RenderingEngine::~RenderingEngine()
@@ -193,7 +223,7 @@ bool RenderingEngine::setupTopLevelWindow(const std::string &name)
// sort here that would call the correct toplevel setup methods for
// the environment Minetest is running in but for now not deviating
// from the original pattern.
-
+
/* Setting Xorg properties for the top level window */
setupTopLevelXorgWindow(name);
/* Done with Xorg properties */
@@ -211,7 +241,7 @@ bool RenderingEngine::setupTopLevelWindow(const std::string &name)
/* Done with general properties */
// FIXME: setWindowIcon returns a bool result but it is unused.
- // For now continue to return this result.
+ // For now continue to return this result.
return result;
}
@@ -223,7 +253,7 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
Display *x11_dpl = reinterpret_cast<Display *>(exposedData.OpenGLLinux.X11Display);
if (x11_dpl == NULL) {
warningstream << "Client: Could not find X11 Display in ExposedVideoData"
- << std::endl;
+ << std::endl;
return;
}
@@ -244,30 +274,30 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
// FIXME: In the future WMNormalHints should be set ... e.g see the
// gtk/gdk code (gdk/x11/gdksurface-x11.c) for the setup_top_level
- // method. But for now (as it would require some significant changes)
- // leave the code as is.
-
+ // method. But for now (as it would require some significant changes)
+ // leave the code as is.
+
// The following is borrowed from the above gdk source for setting top
// level windows. The source indicates and the Xlib docs suggest that
- // this will set the WM_CLIENT_MACHINE and WM_LOCAL_NAME. This will not
- // set the WM_CLIENT_MACHINE to a Fully Qualified Domain Name (FQDN) which is
+ // this will set the WM_CLIENT_MACHINE and WM_LOCAL_NAME. This will not
+ // set the WM_CLIENT_MACHINE to a Fully Qualified Domain Name (FQDN) which is
// required by the Extended Window Manager Hints (EWMH) spec when setting
// the _NET_WM_PID (see further down) but running Minetest in an env
// where the window manager is on another machine from Minetest (therefore
// making the PID useless) is not expected to be a problem. Further
// more, using gtk/gdk as the model it would seem that not using a FQDN is
// not an issue for modern Xorg window managers.
-
+
verbosestream << "Client: Setting Xorg window manager Properties"
<< std::endl;
XSetWMProperties (x11_dpl, x11_win, NULL, NULL, NULL, 0, NULL, NULL, NULL);
- // Set the _NET_WM_PID window property according to the EWMH spec. _NET_WM_PID
- // (in conjunction with WM_CLIENT_MACHINE) can be used by window managers to
- // force a shutdown of an application if it doesn't respond to the destroy
- // window message.
-
+ // Set the _NET_WM_PID window property according to the EWMH spec. _NET_WM_PID
+ // (in conjunction with WM_CLIENT_MACHINE) can be used by window managers to
+ // force a shutdown of an application if it doesn't respond to the destroy
+ // window message.
+
verbosestream << "Client: Setting Xorg _NET_WM_PID extened window manager property"
<< std::endl;
@@ -277,12 +307,12 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
infostream << "Client: PID is '" << static_cast<long>(pid) << "'"
<< std::endl;
- XChangeProperty(x11_dpl, x11_win, NET_WM_PID,
- XA_CARDINAL, 32, PropModeReplace,
+ XChangeProperty(x11_dpl, x11_win, NET_WM_PID,
+ XA_CARDINAL, 32, PropModeReplace,
reinterpret_cast<unsigned char *>(&pid),1);
// Set the WM_CLIENT_LEADER window property here. Minetest has only one
- // window and that window will always be the leader.
+ // window and that window will always be the leader.
verbosestream << "Client: Setting Xorg WM_CLIENT_LEADER property"
<< std::endl;