From 65d35e51ec44a6bd42cdfeb2beeab82778569ffe Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 18 Jul 2005 22:14:13 +0000 Subject: [PATCH] graphical tutorial --- library/ui/books.factor | 53 ++++++ library/ui/borders.factor | 6 + library/ui/buttons.factor | 6 +- library/ui/init-world.factor | 4 +- library/ui/load.factor | 2 + library/ui/paint.factor | 43 ++++- library/ui/scrolling.factor | 7 +- library/ui/tutorial.factor | 323 +++++++++++++++++++++++++++++++++++ 8 files changed, 437 insertions(+), 7 deletions(-) create mode 100644 library/ui/books.factor create mode 100644 library/ui/tutorial.factor diff --git a/library/ui/books.factor b/library/ui/books.factor new file mode 100644 index 0000000000..382bbc4d1d --- /dev/null +++ b/library/ui/books.factor @@ -0,0 +1,53 @@ +! Copyright (C) 2005 Slava Pestov. +! See http://factor.sf.net/license.txt for BSD license. +IN: gadgets +USING: generic kernel lists math matrices sequences ; + +TUPLE: book page ; + +C: book ( pages -- book ) + over set-delegate + 0 over set-book-page + swap [ over add-gadget ] each ; + +M: book pref-dim ( book -- dim ) + gadget-children { 0 0 0 } [ pref-dim vmax ] reduce ; + +M: book layout* ( book -- ) + dup shape-dim over gadget-children [ + f over set-gadget-visible? + { 0 0 0 } over set-shape-loc + set-gadget-dim + ] each-with + dup book-page swap gadget-children nth + t swap set-gadget-visible? ; + +: show-page ( n book -- ) + [ gadget-children length rem ] keep + [ set-book-page ] keep relayout ; + +: first-page ( book -- ) + 0 swap show-page ; + +: prev-page ( book -- ) + [ book-page 1 - ] keep show-page ; + +: next-page ( book -- ) + [ book-page 1 + ] keep show-page ; + +: last-page ( book -- ) + -1 swap show-page ; + +: book-buttons ( book -- gadget ) + swap [ + [ "|<" first-page drop ] + [ "<" prev-page drop ] + [ ">" next-page drop ] + [ ">|" last-page drop ] + ] [ + uncons swapd cons