From 26e0d2232734e893983975b68d3a760b147e8e8c Mon Sep 17 00:00:00 2001 From: Javier Sancho Date: Mon, 7 Oct 2019 10:25:26 +0200 Subject: [PATCH] Some GUI functions --- .gitignore | 1 + Makefile.am | 5 +++- include/IGUIEnvironment.h | 44 +++++++++++++++++++++++++++++ include/IrrlichtDevice.h | 1 + include/cirrlicht.h | 1 + include/rect.h | 33 ++++++++++++++++++++++ src/IGUIEnvironment.cpp | 58 +++++++++++++++++++++++++++++++++++++++ src/IrrlichtDevice.cpp | 5 ++++ 8 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 include/IGUIEnvironment.h create mode 100644 include/rect.h create mode 100644 src/IGUIEnvironment.cpp diff --git a/.gitignore b/.gitignore index bae4827..7ab70be 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ install-sh libCIrrlicht.la libtool ltmain.sh +m4/ missing src/.deps/ src/.dirstamp diff --git a/Makefile.am b/Makefile.am index 6c1972b..c4cd821 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,11 +2,14 @@ ACLOCAL_AMFLAGS = -I m4 lib_LTLIBRARIES = libCIrrlicht.la libCIrrlicht_la_SOURCES = \ src/CIrrlicht.cpp \ + src/IGUIEnvironment.cpp \ src/IrrlichtDevice.cpp libCIrrlicht_la_CPPFLAGS = -I$(top_srcdir)/include libCIrrlicht_la_LDFLAGS = -version-info 0:1 include_HEADERS = \ include/EDriverTypes.h \ + include/IGUIEnvironment.h \ include/IrrlichtDevice.h \ include/cirrlicht.h \ - include/dimension2d.h + include/dimension2d.h \ + include/rect.h diff --git a/include/IGUIEnvironment.h b/include/IGUIEnvironment.h new file mode 100644 index 0000000..f20eb5c --- /dev/null +++ b/include/IGUIEnvironment.h @@ -0,0 +1,44 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht 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 Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#ifndef __C_GUI_ENVIRONMENT_H_INCLUDED__ +#define __C_GUI_ENVIRONMENT_H_INCLUDED__ + +#include "rect.h" + +#ifdef __cplusplus +extern "C" { +#endif + + void* irr_gui_IGUIEnvironment_addStaticText(void* guienv, + const char* text, + const irr_core_rect_s32* rectangle, + bool border, + bool wordWrap, + void* parent, + int32_t id, + bool fillBackground); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/IrrlichtDevice.h b/include/IrrlichtDevice.h index e389d35..b6a459e 100644 --- a/include/IrrlichtDevice.h +++ b/include/IrrlichtDevice.h @@ -26,6 +26,7 @@ extern "C" { #endif + void* irr_IrrlichtDevice_getGUIEnvironment(void* device); void* irr_IrrlichtDevice_getSceneManager(void* device); void* irr_IrrlichtDevice_getVideoDriver(void* device); void irr_IrrlichtDevice_setWindowCaption(void* device, const char* text); diff --git a/include/cirrlicht.h b/include/cirrlicht.h index 3541f2c..9a07368 100644 --- a/include/cirrlicht.h +++ b/include/cirrlicht.h @@ -23,6 +23,7 @@ #define __C_IRRLICHT_H_INCLUDED__ #include "EDriverTypes.h" +#include "IGUIEnvironment.h" #include "IrrlichtDevice.h" #include "dimension2d.h" diff --git a/include/rect.h b/include/rect.h new file mode 100644 index 0000000..195281d --- /dev/null +++ b/include/rect.h @@ -0,0 +1,33 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht 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 Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#ifndef __C_IRR_RECT_H_INCLUDED__ +#define __C_IRR_RECT_H_INCLUDED__ + +typedef struct +{ + int32_t x; + int32_t y; + int32_t x2; + int32_t y2; +} irr_core_rect_s32; + +#endif diff --git a/src/IGUIEnvironment.cpp b/src/IGUIEnvironment.cpp new file mode 100644 index 0000000..b5bc9e1 --- /dev/null +++ b/src/IGUIEnvironment.cpp @@ -0,0 +1,58 @@ +/* c-irrlicht --- C bindings for Irrlicht Engine + + Copyright (C) 2019 Javier Sancho + + This file is part of c-irrlicht. + + c-irrlicht is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + c-irrlicht 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 Lesser General Public + License along with guile-irrlicht. If not, see + . +*/ + +#include +#include +#include "IGUIEnvironment.h" + +extern "C" { + void* irr_gui_IGUIEnvironment_addStaticText(void* guienv, + const char* text, + const irr_core_rect_s32* rectangle, + bool border, + bool wordWrap, + void* parent, + int32_t id, + bool fillBackground) + { + // Convert to wide char text + wchar_t *wtext = (wchar_t*)malloc((strlen(text) + 1) * sizeof(wchar_t)); + mbsrtowcs(wtext, &text, strlen(text) + 1, NULL); + + // Make rectangle + irr::core::rect rect = \ + irr::core::rect(rectangle->x, + rectangle->y, + rectangle->x2, + rectangle->y2); + + // Add static text + irr::gui::IGUIStaticText *staticText = \ + ((irr::gui::IGUIEnvironment*)guienv)->addStaticText(wtext, + rect, + border, + wordWrap, + (irr::gui::IGUIElement*)parent, + id, + fillBackground); + return staticText; + } +} diff --git a/src/IrrlichtDevice.cpp b/src/IrrlichtDevice.cpp index e032edb..57fefdf 100644 --- a/src/IrrlichtDevice.cpp +++ b/src/IrrlichtDevice.cpp @@ -24,6 +24,11 @@ #include "IrrlichtDevice.h" extern "C" { + void* irr_IrrlichtDevice_getGUIEnvironment(void* device) + { + return ((irr::IrrlichtDevice*)device)->getGUIEnvironment(); + } + void* irr_IrrlichtDevice_getSceneManager(void* device) { return ((irr::IrrlichtDevice*)device)->getSceneManager(); -- 2.39.5