]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
add-static-text!
authorJavier Sancho <jsf@jsancho.org>
Fri, 6 Mar 2020 16:11:58 +0000 (17:11 +0100)
committerJavier Sancho <jsf@jsancho.org>
Fri, 6 Mar 2020 16:11:58 +0000 (17:11 +0100)
16 files changed:
Makefile.am
irrlicht.scm
irrlicht/device.scm
irrlicht/gui.scm [new file with mode: 0644]
src/GuileIrrlicht.cpp
src/IGUIElement.cpp [new file with mode: 0644]
src/IGUIElement.h [new file with mode: 0644]
src/IGUIEnvironment.cpp
src/IGUIEnvironment.h
src/IGUIStaticText.cpp [new file with mode: 0644]
src/IGUIStaticText.h [new file with mode: 0644]
src/IrrlichtDevice.cpp
src/rect.cpp [new file with mode: 0644]
src/rect.h [new file with mode: 0644]
src/util.cpp [new file with mode: 0644]
src/util.h

index 88b52686c401e6f3593e07fd35a1f7337119c4d2..485bc3704efea2391ec32cc375bed1fc9af73d7e 100644 (file)
@@ -4,10 +4,14 @@ libguile_irrlicht_la_SOURCES = \
   src/dimension2d.cpp \
   src/EDriverTypes.cpp \
   src/GuileIrrlicht.cpp \
+  src/IGUIElement.cpp \
   src/IGUIEnvironment.cpp \
+  src/IGUIStaticText.cpp \
   src/IrrlichtDevice.cpp \
   src/ISceneManager.cpp \
-  src/IVideoDriver.cpp
+  src/IVideoDriver.cpp \
+  src/rect.cpp \
+  src/util.cpp
 libguile_irrlicht_la_CPPFLAGS = @GUILE_CFLAGS@
 libguile_irrlicht_la_LDFLAGS = \
   -version-info 0:1 \
index 97bad7e51d7bf1814381553e8f614337c2a5c14f..6c4025f59b40a6e4c9766716a80541b8fe8582bc 100644 (file)
@@ -23,7 +23,8 @@
 (eval-when (eval load compile)
   ;; load public symbols into current module
   (let ((public-modules
-         '((irrlicht device)))
+         '((irrlicht device)
+           (irrlicht gui)))
         (current-interface
          (module-public-interface (current-module))))
     (for-each
index f5f8b6144d518f162182601c1f5ca43c3107680e..e07a812d2e0b6818473e2af7278f17dbb34dda9b 100644 (file)
@@ -27,7 +27,7 @@
 
 (load-extension "libguile-irrlicht" "init_guile_irrlicht")
 
-(define irrlicht-create-device create-device)
+(define irr-create-device create-device)
 (define* (create-device #:key
                         (device-type 'software)
                         (window-size '(640 480))
                         (stencilbuffer #f)
                         (vsync #f)
                         (receiver 0))
-  (irrlicht-create-device device-type
-                          window-size
-                          bits
-                          fullscreen
-                          stencilbuffer
-                          vsync
-                          receiver))
+  (irr-create-device device-type
+                     window-size
+                     bits
+                     fullscreen
+                     stencilbuffer
+                     vsync
+                     receiver))
diff --git a/irrlicht/gui.scm b/irrlicht/gui.scm
new file mode 100644 (file)
index 0000000..2299574
--- /dev/null
@@ -0,0 +1,41 @@
+;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
+;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
+;;;
+;;; This file is part of guile-irrlicht.
+;;;
+;;; Guile-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.
+;;;
+;;; Guile-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
+;;; <http://www.gnu.org/licenses/>.
+
+
+(define-module (irrlicht gui)
+  #:export (add-static-text!))
+
+(load-extension "libguile-irrlicht" "init_guile_irrlicht")
+
+(define irr-add-static-text! add-static-text!)
+(define* (add-static-text! guienv text rectangle
+                           #:key
+                           (border #f)
+                           (word-wrap #t)
+                           (parent #f)
+                           (id -1)
+                           (fill-background #f))
+  (irr-add-static-text! guienv
+                        text
+                        rectangle
+                        border
+                        word-wrap
+                        parent
+                        id
+                        fill-background))
index 5f8691cd1c0c1244f9832371dee5e2824f41bde1..32fd4ac993ee7929d5d7df2deae5c62df5bb165f 100644 (file)
@@ -20,7 +20,9 @@
 */
 
 #include <libguile.h>
+#include "IGUIElement.h"
 #include "IGUIEnvironment.h"
+#include "IGUIStaticText.h"
 #include "IrrlichtDevice.h"
 #include "ISceneManager.h"
 #include "IVideoDriver.h"
@@ -31,7 +33,9 @@ extern "C" {
   init_guile_irrlicht (void)
   {
     init_device ();
+    init_gui_element ();
     init_gui_environment ();
+    init_gui_static_text ();
     init_scene_manager ();
     init_video_driver ();
   }
diff --git a/src/IGUIElement.cpp b/src/IGUIElement.cpp
new file mode 100644 (file)
index 0000000..80d7676
--- /dev/null
@@ -0,0 +1,39 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "IGUIElement.h"
+#include "util.h"
+
+extern "C" {
+
+  void
+  init_gui_element (void)
+  {
+    init_gui_element_type ();
+  }
+
+  DEFINE_WRAPPED_TYPE (irr::gui::IGUIElement*, "gui-element",
+                       init_gui_element_type,
+                       wrap_gui_element, unwrap_gui_element);
+
+}
diff --git a/src/IGUIElement.h b/src/IGUIElement.h
new file mode 100644 (file)
index 0000000..659dcbc
--- /dev/null
@@ -0,0 +1,38 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GUILE_I_GUI_ELEMENT_INCLUDED__
+#define __GUILE_I_GUI_ELEMENT_INCLUDED__
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "util.h"
+
+extern "C" {
+
+  void
+  init_gui_element (void);
+
+  DECLARE_WRAPPED_TYPE (irr::gui::IGUIElement*, init_gui_element_type,
+                        wrap_gui_element, unwrap_gui_element);
+}
+
+#endif
index c0a2a06a5ccd5f55ce96c5a1fa9cb7b1be6bbdf9..de4f9f6ad0c58707144ea1d19bfed8482d984ed6 100644 (file)
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
+#include "IGUIElement.h"
 #include "IGUIEnvironment.h"
+#include "IGUIStaticText.h"
+#include "rect.h"
 #include "util.h"
 
 extern "C" {
@@ -30,10 +33,33 @@ extern "C" {
   init_gui_environment (void)
   {
     init_gui_environment_type ();
+    scm_c_define_gsubr ("add-static-text!", 8, 0, 0, (scm_t_subr)irr_gui_addStaticText);
   }
 
   DEFINE_WRAPPED_TYPE (irr::gui::IGUIEnvironment*, "gui-environment",
                        init_gui_environment_type,
                        wrap_gui_environment, unwrap_gui_environment);
 
+  SCM
+  irr_gui_addStaticText (SCM wrappedGUIEnvironment,
+                         SCM text,
+                         SCM rectangle,
+                         SCM border,
+                         SCM wordWrap,
+                         SCM parent,
+                         SCM id,
+                         SCM fillBackground)
+  {
+    irr::gui::IGUIEnvironment* guienv = unwrap_gui_environment (wrappedGUIEnvironment);
+    irr::gui::IGUIStaticText* staticText =
+      guienv->addStaticText (scm_to_wide_char_string (text),
+                             scm_to_rect_s32 (rectangle),
+                             scm_to_bool (border),
+                             scm_to_bool (wordWrap),
+                             scm_is_false (parent) ? 0 : unwrap_gui_element (parent),
+                             scm_to_int32 (id),
+                             scm_to_bool (fillBackground));
+    return wrap_gui_static_text (staticText);
+  }
+
 }
index 2ce45e57664aa3dc5c01f5e20d330e83806609a6..6e28bfe77e626dd5c1c956f2f5392a354f3cb995 100644 (file)
@@ -33,6 +33,17 @@ extern "C" {
 
   DECLARE_WRAPPED_TYPE (irr::gui::IGUIEnvironment*, init_gui_environment_type,
                         wrap_gui_environment, unwrap_gui_environment);
+
+  SCM
+  irr_gui_addStaticText (SCM guienv,
+                         SCM text,
+                         SCM rectangle,
+                         SCM border,
+                         SCM wordWrap,
+                         SCM parent,
+                         SCM id,
+                         SCM fillBackground);
+
 }
 
 #endif
diff --git a/src/IGUIStaticText.cpp b/src/IGUIStaticText.cpp
new file mode 100644 (file)
index 0000000..4a66db5
--- /dev/null
@@ -0,0 +1,39 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "IGUIStaticText.h"
+#include "util.h"
+
+extern "C" {
+
+  void
+  init_gui_static_text (void)
+  {
+    init_gui_static_text_type ();
+  }
+
+  DEFINE_WRAPPED_TYPE (irr::gui::IGUIStaticText*, "gui-static-text",
+                       init_gui_static_text_type,
+                       wrap_gui_static_text, unwrap_gui_static_text);
+
+}
diff --git a/src/IGUIStaticText.h b/src/IGUIStaticText.h
new file mode 100644 (file)
index 0000000..39e2fbd
--- /dev/null
@@ -0,0 +1,38 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GUILE_I_GUI_STATIC_TEXT_INCLUDED__
+#define __GUILE_I_GUI_STATIC_TEXT_INCLUDED__
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "util.h"
+
+extern "C" {
+
+  void
+  init_gui_static_text (void);
+
+  DECLARE_WRAPPED_TYPE (irr::gui::IGUIStaticText*, init_gui_static_text_type,
+                        wrap_gui_static_text, unwrap_gui_static_text);
+}
+
+#endif
index 026df21fa8c889118db96aee51462d323c07fb43..82b729d040e5f2f580f2d2c47ef7808808a0648f 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <irrlicht/irrlicht.h>
 #include <libguile.h>
-#include <wchar.h>
 
 #include "dimension2d.h"
 #include "EDriverTypes.h"
@@ -95,14 +94,7 @@ extern "C" {
                         SCM text)
   {
     irr::IrrlichtDevice* device = unwrap_device (device_obj);
-    char* ctext;
-    wchar_t* wtext;
-
-    ctext = scm_to_utf8_stringn (text, NULL);
-    wtext = (wchar_t*)malloc ((strlen (ctext) + 1) * sizeof (wchar_t));
-    mbstowcs (wtext, ctext, strlen (ctext) + 1);
-
-    device->setWindowCaption (wtext);
+    device->setWindowCaption (scm_to_wide_char_string (text));
     return SCM_UNSPECIFIED;
   }
 
diff --git a/src/rect.cpp b/src/rect.cpp
new file mode 100644 (file)
index 0000000..9da526b
--- /dev/null
@@ -0,0 +1,38 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+#include "rect.h"
+
+extern "C" {
+
+  irr::core::rect<irr::s32>
+  scm_to_rect_s32 (SCM rect)
+  {
+    return irr::core::rect<irr::s32>
+      (scm_to_int32 (scm_car (rect)),
+       scm_to_int32 (scm_cadr (rect)),
+       scm_to_int32 (scm_caddr (rect)),
+       scm_to_int32 (scm_cadddr (rect)));
+  }
+
+}
diff --git a/src/rect.h b/src/rect.h
new file mode 100644 (file)
index 0000000..bad7aae
--- /dev/null
@@ -0,0 +1,35 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __GUILE_IRRLICHT_RECT_INCLUDED__
+#define __GUILE_IRRLICHT_RECT_INCLUDED__
+
+#include <irrlicht/irrlicht.h>
+#include <libguile.h>
+
+extern "C" {
+
+  irr::core::rect<irr::s32>
+  scm_to_rect_s32 (SCM rect);
+
+}
+
+#endif
diff --git a/src/util.cpp b/src/util.cpp
new file mode 100644 (file)
index 0000000..eb5b8a8
--- /dev/null
@@ -0,0 +1,33 @@
+/* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
+
+   Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+
+   This file is part of guile-irrlicht.
+
+   guile-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.
+
+   guile-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
+   <http://www.gnu.org/licenses/>.
+*/
+
+#include <libguile.h>
+#include <wchar.h>
+#include "util.h"
+
+wchar_t*
+scm_to_wide_char_string (SCM text)
+{
+  char* ctext = scm_to_utf8_stringn (text, NULL);
+  wchar_t* wtext = (wchar_t*)malloc ((strlen (ctext) + 1) * sizeof (wchar_t));
+  mbstowcs (wtext, ctext, strlen (ctext) + 1);
+  return wtext;
+}
index 6397b3763c615cc86ba6e095960ea55893bb25e0..3ce84a48be2a927fa80d6757cf3ad1c44bca660d 100644 (file)
@@ -19,6 +19,8 @@
    <http://www.gnu.org/licenses/>.
 */
 
+#include <libguile.h>
+#include <wchar.h>
 
 #define DECLARE_WRAPPED_TYPE(TYPE, INIT, WRAP, UNWRAP)                  \
   void                                                                  \
@@ -60,3 +62,6 @@
     scm_assert_foreign_object_type (wrapped_type, wrapped_obj);         \
     return (TYPE)scm_foreign_object_ref (wrapped_obj, 0);               \
   }
+
+wchar_t*
+scm_to_wide_char_string (SCM text);