05bcf3c72a27

Add `print`
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Mon, 06 Mar 2017 11:47:47 +0000
parents 7d9a9d2a4af2
children 4f41215153a8
branches/tags (none)
files examples/terrain.lisp src/high-level/bearlibterminal.lisp src/low-level/bearlibterminal.lisp src/low-level/bearlibterminal.swig

Changes

--- a/examples/terrain.lisp	Sat Feb 11 17:14:03 2017 +0000
+++ b/examples/terrain.lisp	Mon Mar 06 11:47:47 2017 +0000
@@ -114,7 +114,12 @@
     (setf
       (blt:color) (blt:rgbaf height height height 1.0)
       (blt:cell-char x y) (terrain-char height)))
-  ; (blt:print 1 1 "Demo!")
+  (setf (blt:color) (blt:rgbaf 1.0 0.0 0.0 1.0))
+  (pr (multiple-value-list (blt:print 1 1 (format nil "Demo!~%There is a lot of text in this line, will BLT manage to word wrap everything properly?  We'll see!")
+                                      :width 50
+                                      :height 10
+                                      :halign :center
+                                      :valign :center)))
   (blt:refresh))
 
 (defun config ()
--- a/src/high-level/bearlibterminal.lisp	Sat Feb 11 17:14:03 2017 +0000
+++ b/src/high-level/bearlibterminal.lisp	Mon Mar 06 11:47:47 2017 +0000
@@ -85,6 +85,21 @@
   (code-char code-point))
 
 
+(defun horizontal-alignment (alignment-keyword)
+  (ccase alignment-keyword
+    (:default          blt/ll:+tk-align-default+)
+    (:left             blt/ll:+tk-align-left+)
+    (:right            blt/ll:+tk-align-right+)
+    ((:middle :center) blt/ll:+tk-align-center+)))
+
+(defun vertical-alignment (alignment-keyword)
+  (ccase alignment-keyword
+    (:default          blt/ll:+tk-align-default+)
+    (:top              blt/ll:+tk-align-top+)
+    (:bottom           blt/ll:+tk-align-bottom+)
+    ((:middle :center) blt/ll:+tk-align-middle+)))
+
+
 ;;;; Error Checking -----------------------------------------------------------
 (define-condition bearlibterminal-error (error) ())
 
@@ -197,6 +212,25 @@
   (blt/ll:terminal-pick-bkcolor x y))
 
 
+(defun print (x y string &key
+              width
+              height
+              (halign :default)
+              (valign :default))
+  (cffi:with-foreign-objects ((measured-width :int)
+                              (measured-height :int))
+    (blt/ll:terminal-print-ext-8 x y
+                                 (or width 0)
+                                 (or height 0)
+                                 (logior (horizontal-alignment halign)
+                                         (vertical-alignment valign))
+                                 string
+                                 measured-width
+                                 measured-height)
+    (values (cffi:mem-ref measured-width :int)
+            (cffi:mem-ref measured-height :int))))
+
+
 ;;;; Higher-Level API ---------------------------------------------------------
 (defmacro defuck-floats (&body body)
   #+sbcl
--- a/src/low-level/bearlibterminal.lisp	Sat Feb 11 17:14:03 2017 +0000
+++ b/src/low-level/bearlibterminal.lisp	Mon Mar 06 11:47:47 2017 +0000
@@ -719,7 +719,7 @@
   (w :int)
   (h :int)
   (align :int)
-  (s :pointer)
+  (s :string)
   (out_w :pointer)
   (out_h :pointer))
 
@@ -752,7 +752,7 @@
 (cffi:defcfun ("terminal_measure_ext8" #.(swig-lispify "terminal_measure_ext8" 'function)) :void
   (w :int)
   (h :int)
-  (s :pointer)
+  (s :string)
   (out_w :pointer)
   (out_h :pointer))
 
@@ -792,7 +792,7 @@
 (cffi:defcfun ("terminal_read_str8" #.(swig-lispify "terminal_read_str8" 'function)) :int
   (x :int)
   (y :int)
-  (buffer :pointer)
+  (buffer :string)
   (max :int))
 
 (cl:export '#.(swig-lispify "terminal_read_str8" 'function))
@@ -822,9 +822,9 @@
 
 (cl:export '#.(swig-lispify "terminal_delay" 'function))
 
-(cffi:defcfun ("terminal_get8" #.(swig-lispify "terminal_get8" 'function)) :pointer
-  (key :pointer)
-  (default_ :pointer))
+(cffi:defcfun ("terminal_get8" #.(swig-lispify "terminal_get8" 'function)) :string
+  (key :string)
+  (default_ :string))
 
 (cl:export '#.(swig-lispify "terminal_get8" 'function))
 
@@ -841,7 +841,7 @@
 (cl:export '#.(swig-lispify "terminal_get32" 'function))
 
 (cffi:defcfun ("color_from_name8" #.(swig-lispify "color_from_name8" 'function)) color
-  (name :pointer))
+  (name :string))
 
 (cl:export '#.(swig-lispify "color_from_name8" 'function))
 
--- a/src/low-level/bearlibterminal.swig	Sat Feb 11 17:14:03 2017 +0000
+++ b/src/low-level/bearlibterminal.swig	Mon Mar 06 11:47:47 2017 +0000
@@ -14,7 +14,10 @@
 %feature("intern_function","1");
 %feature("export");
 
-%typemap(cin) color_t "color";
+%typemap(cin)  color_t "color";
 %typemap(cout) color_t "color";
 
+%typemap(cin)  int8_t* ":string";
+%typemap(cout) int8_t* ":string";
+
 %include "src/low-level/include/BearLibTerminal.h"