;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
-;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
;;;
;;; This file is part of guile-irrlicht.
;;;
(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))
+ #:use-module (oop goops)
+ #:use-module (ice-9 optargs)
+ #:use-module (irrlicht base)
+ #:use-module (irrlicht foreign)
+ #:use-module (irrlicht io)
+ #:use-module (irrlicht irr))
+
+
+;; IGUIElement
+(define-class <gui-element> (<attribute-exchanging-object> <event-receiver>))
+
+(export <gui-element>)
+
+
+;; IGUIEnvironment
+(define-class <gui-environment> (<reference-counted>))
+
+(define-method (add-static-text! (gui-environment <gui-environment>) text rectangle . rest)
+ (let-keywords rest #f
+ ((border #f)
+ (word-wrap #t)
+ (parent (make <gui-element>))
+ (id -1)
+ (fill-background #f))
+ (make <gui-static-text>
+ #:irr-pointer
+ (irr_gui_IGUIEnvironment_addStaticText (irr-pointer gui-environment)
+ text
+ rectangle
+ border
+ word-wrap
+ (irr-pointer parent)
+ id
+ fill-background))))
+
+(export <gui-environment> add-static-text!)
+
+
+;; IGUIStaticText
+(define-class <gui-static-text> (<gui-element>))
+
+(export <gui-static-text>)