#include <irrlicht/irrlicht.h>
#include <libguile.h>
-
-#include "gui-button.h"
+#include "gsubr.h"
#include "gui-toolbar.h"
-#include "texture.h"
-#include "wchar.h"
#include "wrapped.h"
-extern "C" {
-
- void
- init_gui_toolbar (void)
- {
- init_gui_toolbar_type ();
- }
-
- DEFINE_WRAPPED_TYPE (irr::gui::IGUIToolBar*, "gui-toolbar",
- init_gui_toolbar_type, gui_toolbar_p,
- wrap_gui_toolbar, unwrap_gui_toolbar);
-
- SCM
- irr_gui_IGUIToolBar_addButton (SCM wrapped_gui_toolbar,
- SCM rest)
- {
- SCM id = scm_from_int32 (-1);
- SCM text = SCM_BOOL_F;
- SCM tooltiptext = SCM_BOOL_F;
- SCM img = SCM_BOOL_F;
- SCM pressedimg = SCM_BOOL_F;
- SCM is_push_button = SCM_BOOL_F;
- SCM use_alpha_channel = SCM_BOOL_F;
-
- scm_c_bind_keyword_arguments ("add-button!", rest, (scm_t_keyword_arguments_flags)0,
- scm_from_utf8_keyword ("id"), &id,
- scm_from_utf8_keyword ("text"), &text,
- scm_from_utf8_keyword ("tooltiptext"), &tooltiptext,
- scm_from_utf8_keyword ("img"), &img,
- scm_from_utf8_keyword ("pressedimg"), &pressedimg,
- scm_from_utf8_keyword ("is_push_button"), &is_push_button,
- scm_from_utf8_keyword ("use_alpha_channel"), &use_alpha_channel,
- SCM_UNDEFINED);
-
- irr::gui::IGUIToolBar* toolbar = unwrap_gui_toolbar (wrapped_gui_toolbar);
- irr::gui::IGUIButton* button =
- toolbar->addButton (scm_to_int32 (id),
- scm_is_false (text) ? 0 : scm_to_wide_char_string (text),
- scm_is_false (tooltiptext) ? 0 : scm_to_wide_char_string (tooltiptext),
- scm_is_false (img) ? 0 : unwrap_texture (img),
- scm_is_false (pressedimg) ? 0 : unwrap_texture (pressedimg),
- scm_to_bool (is_push_button),
- scm_to_bool (use_alpha_channel));
- return wrap_gui_button (button);
- }
+using namespace irr;
+
+SCM
+IGUIToolBar_addButton (SCM gui_toolbar,
+ SCM id,
+ SCM text,
+ SCM tooltiptext,
+ SCM img,
+ SCM pressedimg,
+ SCM is_push_button,
+ SCM use_alpha_channel)
+{
+ gui::IGUIToolBar* toolbar = (gui::IGUIToolBar*) scm_to_irr_pointer (gui_toolbar);
+ wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
+ wchar_t* wtooltiptext = (wchar_t*) scm_to_utf32_string (tooltiptext);
+
+ gui::IGUIButton* button =
+ toolbar->addButton (scm_to_int32 (id),
+ wtext,
+ wtooltiptext,
+ (video::ITexture*) scm_to_irr_pointer (img),
+ (video::ITexture*) scm_to_irr_pointer (pressedimg),
+ scm_to_bool (is_push_button),
+ scm_to_bool (use_alpha_channel));
+
+ free (wtext);
+ free (wtooltiptext);
+ return scm_from_irr_pointer ("<gui-button>", (void*) button);
+}
+void
+init_gui_toolbar (void)
+{
+ DEFINE_GSUBR ("IGUIToolBar_addButton", 8, 0, 0, IGUIToolBar_addButton);
}