X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=gtk-glext%2Fdemo.lisp;fp=gtk-glext%2Fdemo.lisp;h=2a9e8934c570ca30a37ab798a12a2abeaf5c148d;hb=abf0a60a3ad24f0241af6cc94f8cb1d39f3b727a;hp=0000000000000000000000000000000000000000;hpb=8db173e3df82074b8ca96d00304c4e63b499f598;p=cl-gtk2.git diff --git a/gtk-glext/demo.lisp b/gtk-glext/demo.lisp new file mode 100644 index 0000000..2a9e893 --- /dev/null +++ b/gtk-glext/demo.lisp @@ -0,0 +1,58 @@ +(defpackage :gtk-glext-demo + (:use :cl :gtk :gtkglext :gobject :glib) + (:export :run)) + +(in-package :gtk-glext-demo) + +(defvar *theta* 30) + +(defun draw (widget event) + (declare (ignore event)) + (with-gl-context (widget) + (gl:clear-color 0 0 0 0) + (gl:cull-face :back) + (gl:depth-func :less) + (gl:disable :dither) + (gl:shade-model :smooth) + (gl:light-model :light-model-local-viewer 1) + (gl:color-material :front :ambient-and-diffuse) + (gl:enable :light0 :lighting :cull-face :depth-test) + (gl:load-identity) + (gl:translate 0 0 -5) + (gl:rotate *theta* 1 1 0) + (gl:light :light0 :position '(0 1 1 0)) + (gl:light :light0 :diffuse '(0.2 0.4 0.6 0)) + (gl:clear :color-buffer-bit :depth-buffer-bit) + (gl:color 1 1 1) + (gl:front-face :cw) + (glut:solid-teapot 1.5) + (gl:front-face :ccw) + (gl:flush))) + +(defun run () + (with-main-loop + (setf *theta* 30) + (let ((window (make-instance 'gtk-window + :type :toplevel + :window-position :center + :title "Hello world!" + :default-width 320 + :default-height 240)) + (v-box (make-instance 'v-box)) + (label (make-instance 'label :label "Click me!")) + (drawing (make-instance 'gl-drawing-area :on-draw #'draw))) + (box-pack-start v-box drawing) + (box-pack-start v-box label :expand nil) + (container-add window v-box) + (let ((source-id (gtk-main-add-timeout 100 (lambda () + (setf *theta* + (mod (+ *theta* 0.5) 360)) + (widget-queue-draw drawing) + (setf (label-label label) + (format nil "Theta = ~A" *theta*)) + t)))) + (connect-signal window "delete-event" (lambda (w e) + (declare (ignore w e)) + (g-source-remove source-id) + nil))) + (widget-show window :all t))))