Sat Jan 23 23:18:27 CET 2010 Tobias Rautenkranz * Qt example: Analog Clock diff -rN -u old-qt.examples/cl-smoke.qt.examples.asd new-qt.examples/cl-smoke.qt.examples.asd --- old-qt.examples/cl-smoke.qt.examples.asd 2014-10-30 07:36:08.000000000 +0100 +++ new-qt.examples/cl-smoke.qt.examples.asd 2014-10-30 07:36:08.000000000 +0100 @@ -2,7 +2,7 @@ :name :cl-smoke.qt.examples :version (0 0 1) :author "Tobias Rautenkranz" - :license "X11" + :license "X11 & GPL" :description "Qt examples." :depends-on (:cl-smoke.qt.gui :cl-smoke.qt.webkit :cl-smoke.qt.uitools :cl-smoke.qt.phonon) @@ -20,7 +20,11 @@ (:file "launcher" :depends-on ("package")) (:file "ui" :depends-on ("package")) (:file "repl" :depends-on ("package")) - (:file "class-browser" :depends-on ("package")))))) + (:file "class-browser" :depends-on ("package")) + (:module "qt" + :depends-on ("package") + :components + ((:file "analog-clock"))))))) ;;(:module "origami" ;; :depends-on ("package") ;; :components diff -rN -u old-qt.examples/src/package.lisp new-qt.examples/src/package.lisp --- old-qt.examples/src/package.lisp 2014-10-30 07:36:08.000000000 +0100 +++ new-qt.examples/src/package.lisp 2014-10-30 07:36:08.000000000 +0100 @@ -16,6 +16,8 @@ ;;#:origami #:launcher + + #:analog-clock #:load-ui-file)) diff -rN -u old-qt.examples/src/qt/analog-clock.lisp new-qt.examples/src/qt/analog-clock.lisp --- old-qt.examples/src/qt/analog-clock.lisp 1970-01-01 01:00:00.000000000 +0100 +++ new-qt.examples/src/qt/analog-clock.lisp 2014-10-30 07:36:08.000000000 +0100 @@ -0,0 +1,108 @@ +;;; Copyright (c) 2010 Tobias Rautenkranz +;;; Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +;;; Contact: Qt Software Information (qt-info@nokia.com) +;;; +;;; This file is part of the examples of the Qt Toolkit. +;;; +;;; $QT_BEGIN_LICENSE:LGPL$ +;;; Commercial Usage +;;; Licensees holding valid Qt Commercial licenses may use this file in +;;; accordance with the Qt Commercial License Agreement provided with the +;;; Software or, alternatively, in accordance with the terms contained in +;;; a written agreement between you and Nokia. +;;; +;;; GNU Lesser General Public License Usage +;;; Alternatively, this file may be used under the terms of the GNU Lesser +;;; General Public License version 2.1 as published by the Free Software +;;; Foundation and appearing in the file LICENSE.LGPL included in the +;;; packaging of this file. Please review the following information to +;;; ensure the GNU Lesser General Public License version 2.1 requirements +;;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +;;; +;;; In addition, as a special exception, Nokia gives you certain +;;; additional rights. These rights are described in the Nokia Qt LGPL +;;; Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +;;; package. +;;; +;;; GNU General Public License Usage +;;; Alternatively, this file may be used under the terms of the GNU +;;; General Public License version 3.0 as published by the Free Software +;;; Foundation and appearing in the file LICENSE.GPL included in the +;;; packaging of this file. Please review the following information to +;;; ensure the GNU General Public License version 3.0 requirements will be +;;; met: http://www.gnu.org/copyleft/gpl.html. +;;; +;;; If you are unsure which license is appropriate for your use, please +;;; contact the sales department at qt-sales@nokia.com. +;;; $QT_END_LICENSE$ + +(in-package :qt.examples) + +(defclass analog-clock (qt:widget) + () + (:metaclass cxx:class)) + +(defmethod initialize-instance :after ((clock analog-clock) &rest initargs) + (declare (ignore initargs)) + (let ((timer (make-instance 'qt:timer :arg0 clock))) + (qt:connect (qt:get-signal timer "timeout()") + (qt:get-slot clock "update()")) + (cxx:start timer)) + (setf (cxx:window-title clock) "Analog Clock") + (cxx:resize clock 200 200)) + +(defun make-polygon (points) + (make-instance 'qt:polygon :arg0 + (map 'vector #'(lambda (coords) + (make-instance 'qt:point + :arg0 (first coords) + :arg1 (rest coords))) + points))) + +(let ((hour-hand (make-polygon '((7 . 8) (-7 . 8) (0 . -40)))) + (minute-hand (make-polygon '((7 . 8) (-7 . 8) (0 . -70))))) + (defmethod cxx:paint-event ((clock analog-clock) paint-event) + (let ((hour-color (make-instance 'qt:color :args '(127 0 127))) + (minute-color (make-instance 'qt:color :args '(0 127 127 191))) + (side (min (cxx:width clock) (cxx:height clock))) + (time (qt:time.current-time))) + (qt:with-painter (painter clock) + (cxx:set-render-hint painter qt:painter.+antialiasing+) + (cxx:translate painter + (/ (cxx:width clock) 2) (/ (cxx:height clock) 2)) + (cxx:scale painter (/ side 200.0) (/ side 200.0)) + (cxx:set-pen painter qt:+no-pen+) + (cxx:set-brush painter hour-color) + + (qt:with-painter (painter) + (cxx:rotate painter (* 30.0 (+ (cxx:hour time) + (/ (cxx:minute time) 60.0)))) + (cxx:draw-convex-polygon painter hour-hand)) + + (cxx:set-pen painter hour-color) + + (dotimes (i 12) + (cxx:draw-line painter 88 0 96 0) + (cxx:rotate painter 30.0)) + + (cxx:set-pen painter qt:+no-pen+) + (cxx:set-brush painter minute-color) + + (qt:with-painter (painter) + (cxx:rotate painter (* 6.0 (+ (cxx:minute time) + (/ (cxx:second time) 60.0)))) + (cxx:draw-convex-polygon painter minute-hand)) + + (cxx:set-pen painter minute-color) + + (dotimes (i 60) + (unless (zerop (mod i 5)) + (cxx:draw-line painter 92 0 96 0)) + (cxx:rotate painter 6.0)))))) + +(defun analog-clock () + "Analog Clock" + (qt:with-app () + (let ((clock (make-instance 'analog-clock))) + (cxx:show clock) + (qt:exec))))