Removed extra/timers, superceded by alarms
parent
217ca36756
commit
b7ba2d77a2
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2006, 2007 Slava Pestov.
|
||||
! Copyright (C) 2006, 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: generic kernel math sequences timers arrays assocs ;
|
||||
USING: generic kernel math sequences arrays assocs alarms ;
|
||||
IN: models
|
||||
|
||||
TUPLE: model value connections dependencies ref locked? ;
|
||||
|
@ -174,7 +174,7 @@ TUPLE: history back forward ;
|
|||
dup history-forward delete-all
|
||||
dup history-back (add-history) ;
|
||||
|
||||
TUPLE: delay model timeout ;
|
||||
TUPLE: delay model timeout alarm ;
|
||||
|
||||
: update-delay-model ( delay -- )
|
||||
dup delay-model model-value swap set-model ;
|
||||
|
@ -185,12 +185,18 @@ TUPLE: delay model timeout ;
|
|||
[ set-delay-model ] 2keep
|
||||
[ add-dependency ] keep ;
|
||||
|
||||
M: delay model-changed nip 0 over delay-timeout add-timer ;
|
||||
: cancel-delay ( delay -- )
|
||||
delay-model-alarm [ cancel-alarm ] when* ;
|
||||
|
||||
: start-delay ( delay -- )
|
||||
now over delay-model-timeout dt+ f
|
||||
pick [ f over set-delay-alarm update-delay-model ] curry
|
||||
add-alarm swap set-delay-model-alarm ;
|
||||
|
||||
M: delay model-changed nip start-delay ;
|
||||
|
||||
M: delay model-activated update-delay-model ;
|
||||
|
||||
M: delay tick dup remove-timer update-delay-model ;
|
||||
|
||||
GENERIC: range-value ( model -- value )
|
||||
GENERIC: range-page-value ( model -- value )
|
||||
GENERIC: range-min-value ( model -- value )
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Slava Pestov
|
|
@ -1 +0,0 @@
|
|||
Simple low-resolution timers
|
|
@ -1,36 +0,0 @@
|
|||
USING: help.syntax help.markup classes kernel ;
|
||||
IN: timers
|
||||
|
||||
HELP: init-timers
|
||||
{ $description "Initializes the timer code." }
|
||||
{ $notes "This word is automatically called when the UI is initialized, and it should only be called manually if timers are being used outside of the UI." } ;
|
||||
|
||||
HELP: tick
|
||||
{ $values { "object" object } }
|
||||
{ $description "Called to notify an object registered with a timer that the timer has fired." } ;
|
||||
|
||||
HELP: add-timer
|
||||
{ $values { "object" object } { "delay" "a positive integer" } { "initial" "a positive integer" } }
|
||||
{ $description "Registers a timer. Every " { $snippet "delay" } " milliseconds, " { $link tick } " will be called on the object. The initial delay from the time " { $link add-timer } " is called to when " { $link tick } " is first called is " { $snippet "initial" } " milliseconds." } ;
|
||||
|
||||
HELP: remove-timer
|
||||
{ $values { "object" object } }
|
||||
{ $description "Unregisters a timer." } ;
|
||||
|
||||
HELP: do-timers
|
||||
{ $description "Fires all registered timers which are due to fire." }
|
||||
{ $notes "This word is automatically called from the UI event loop, and it should only be called manually if timers are being used outside of the UI." } ;
|
||||
|
||||
{ init-timers add-timer remove-timer tick do-timers } related-words
|
||||
|
||||
ARTICLE: "timers" "Timers"
|
||||
"Timers can be added and removed:"
|
||||
{ $subsection add-timer }
|
||||
{ $subsection remove-timer }
|
||||
"Classes must implement a generic word so that their instances can handle timer ticks:"
|
||||
{ $subsection tick }
|
||||
"Timers can be used outside of the UI, however they must be initialized with an explicit call, and fired manually:"
|
||||
{ $subsection init-timers }
|
||||
{ $subsection do-timers } ;
|
||||
|
||||
ABOUT: "timers"
|
|
@ -1,30 +0,0 @@
|
|||
! Copyright (C) 2005, 2006 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: assocs kernel math namespaces sequences system ;
|
||||
IN: timers
|
||||
|
||||
TUPLE: timer object delay next ;
|
||||
|
||||
: <timer> ( object delay initial -- timer )
|
||||
millis + timer construct-boa ;
|
||||
|
||||
GENERIC: tick ( object -- )
|
||||
|
||||
: timers \ timers get-global ;
|
||||
|
||||
: init-timers ( -- ) H{ } clone \ timers set-global ;
|
||||
|
||||
: add-timer ( object delay initial -- )
|
||||
pick >r <timer> r> timers set-at ;
|
||||
|
||||
: remove-timer ( object -- ) timers delete-at ;
|
||||
|
||||
: advance-timer ( ms timer -- )
|
||||
[ timer-delay + ] keep set-timer-next ;
|
||||
|
||||
: do-timer ( ms timer -- )
|
||||
dup timer-next pick <=
|
||||
[ [ advance-timer ] keep timer-object tick ] [ 2drop ] if ;
|
||||
|
||||
: do-timers ( -- )
|
||||
millis timers values [ do-timer ] with each ;
|
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2005, 2007 Slava Pestov.
|
||||
! Copyright (C) 2005, 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays hashtables kernel models math namespaces sequences
|
||||
timers quotations math.vectors combinators sorting vectors
|
||||
dlists models ;
|
||||
quotations math.vectors combinators sorting vectors dlists
|
||||
models ;
|
||||
IN: ui.gadgets
|
||||
|
||||
TUPLE: rect loc dim ;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays assocs kernel math models namespaces
|
||||
sequences words strings system hashtables math.parser
|
||||
math.vectors tuples classes ui.gadgets timers combinators.lib ;
|
||||
math.vectors tuples classes ui.gadgets combinators.lib ;
|
||||
IN: ui.gestures
|
||||
|
||||
: set-gestures ( class hash -- ) "gestures" set-word-prop ;
|
||||
|
@ -107,20 +107,19 @@ SYMBOL: double-click-timeout
|
|||
: drag-gesture ( -- )
|
||||
hand-buttons get-global first <drag> button-gesture ;
|
||||
|
||||
TUPLE: drag-timer ;
|
||||
SYMBOL: drag-timer
|
||||
|
||||
M: drag-timer tick drop drag-gesture ;
|
||||
|
||||
drag-timer construct-empty drag-timer set-global
|
||||
<box> drag-timer set-global
|
||||
|
||||
: start-drag-timer ( -- )
|
||||
hand-buttons get-global empty? [
|
||||
drag-timer get-global 100 300 add-timer
|
||||
now 300 milliseconds dt+ 100 milliseconds
|
||||
[ drag-gesture ] add-alarm drag-timer get-global >box
|
||||
] when ;
|
||||
|
||||
: stop-drag-timer ( -- )
|
||||
hand-buttons get-global empty? [
|
||||
drag-timer get-global remove-timer
|
||||
drag-timer get-global box> cancel-alarm
|
||||
] when ;
|
||||
|
||||
: fire-motion ( -- )
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
USING: continuations documents ui.tools.interactor
|
||||
ui.tools.listener hashtables kernel namespaces parser sequences
|
||||
timers tools.test ui.commands ui.gadgets ui.gadgets.editors
|
||||
tools.test ui.commands ui.gadgets ui.gadgets.editors
|
||||
ui.gadgets.panes vocabs words tools.test.ui slots.private
|
||||
threads ;
|
||||
IN: temporary
|
||||
|
||||
timers [ init-timers ] unless
|
||||
|
||||
[ f ] [ "word" source-editor command-map empty? ] unit-test
|
||||
|
||||
[ ] [ <listener-gadget> [ ] with-grafted-gadget ] unit-test
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
USING: assocs ui.tools.search help.topics io.files io.styles
|
||||
kernel namespaces sequences source-files threads timers
|
||||
kernel namespaces sequences source-files threads
|
||||
tools.test ui.gadgets ui.gestures vocabs
|
||||
vocabs.loader words tools.test.ui debugger ;
|
||||
IN: temporary
|
||||
|
||||
timers get [ init-timers ] unless
|
||||
|
||||
[ f ] [
|
||||
"no such word with this name exists, certainly"
|
||||
f f <definition-search>
|
||||
|
@ -16,7 +14,7 @@ timers get [ init-timers ] unless
|
|||
|
||||
: update-live-search ( search -- seq )
|
||||
dup [
|
||||
300 sleep do-timers
|
||||
300 sleep
|
||||
live-search-list control-value
|
||||
] with-grafted-gadget ;
|
||||
|
||||
|
@ -33,7 +31,6 @@ timers get [ init-timers ] unless
|
|||
dup [
|
||||
{ "set-word-prop" } over live-search-field set-control-value
|
||||
300 sleep
|
||||
do-timers
|
||||
search-value \ set-word-prop eq?
|
||||
] with-grafted-gadget
|
||||
] unit-test
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
USING: ui.tools ui.tools.interactor ui.tools.listener
|
||||
ui.tools.search ui.tools.workspace kernel models namespaces
|
||||
sequences timers tools.test ui.gadgets ui.gadgets.buttons
|
||||
sequences tools.test ui.gadgets ui.gadgets.buttons
|
||||
ui.gadgets.labelled ui.gadgets.presentations
|
||||
ui.gadgets.scrollers vocabs tools.test.ui ui ;
|
||||
IN: temporary
|
||||
|
@ -12,8 +12,6 @@ IN: temporary
|
|||
] unit-test
|
||||
] with-scope
|
||||
|
||||
timers get [ init-timers ] unless
|
||||
|
||||
[ ] [ <workspace> "w" set ] unit-test
|
||||
[ ] [ "w" get com-scroll-up ] unit-test
|
||||
[ ] [ "w" get com-scroll-down ] unit-test
|
||||
|
|
|
@ -167,7 +167,7 @@ ARTICLE: "ui-backend-init" "UI initialization and the event loop"
|
|||
{ $subsection start-ui }
|
||||
"The " { $link ui } " word must not return until the event loop has stopped and the UI has been shut down."
|
||||
$nl
|
||||
"The event loop must not block. Instead, it should poll for pending events, then call " { $link ui-step } ", which performs pending layout, runs timers and sleeps for 10 milliseconds, or until a Factor thread wakes up." ;
|
||||
"The event loop must not block, since otherwise other Factor threads and I/O will not run. Instead, it should poll for pending events, then call " { $link ui-step } ", which performs pending layout and sleeps for 10 milliseconds." ;
|
||||
|
||||
ARTICLE: "ui-backend-windows" "UI backend window management"
|
||||
"The high-level " { $link open-window } " word eventually calls a low-level word which you must implement:"
|
||||
|
@ -368,7 +368,6 @@ $nl
|
|||
{ $subsection "ui-paint" }
|
||||
{ $subsection "ui-control-impl" }
|
||||
{ $subsection "clipboard-protocol" }
|
||||
{ $subsection "timers" }
|
||||
{ $see-also "ui-layout-impl" } ;
|
||||
|
||||
ARTICLE: "ui" "UI framework"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays assocs io kernel math models namespaces
|
||||
prettyprint dlists sequences threads sequences words
|
||||
timers debugger ui.gadgets ui.gadgets.worlds ui.gadgets.tracks
|
||||
debugger ui.gadgets ui.gadgets.worlds ui.gadgets.tracks
|
||||
ui.gestures ui.backend ui.render continuations init combinators
|
||||
hashtables ;
|
||||
IN: ui
|
||||
|
@ -131,8 +131,7 @@ SYMBOL: ui-hook
|
|||
graft-queue [ notify ] dlist-slurp ;
|
||||
|
||||
: ui-step ( -- )
|
||||
[ do-timers notify-queued layout-queued redraw-worlds ]
|
||||
assert-depth ;
|
||||
[ notify-queued layout-queued redraw-worlds ] assert-depth ;
|
||||
|
||||
: open-world-window ( world -- )
|
||||
dup pref-dim over set-gadget-dim dup relayout graft ui-step ;
|
||||
|
@ -156,7 +155,6 @@ M: object close-window
|
|||
find-world [ ungraft ] when* ;
|
||||
|
||||
: start-ui ( -- )
|
||||
init-timers
|
||||
restore-windows? [
|
||||
restore-windows
|
||||
] [
|
||||
|
|
|
@ -5,9 +5,8 @@ ui.backend ui.clipboards ui.gadgets.worlds ui.gestures io kernel
|
|||
math math.vectors namespaces prettyprint sequences strings
|
||||
vectors words windows.kernel32 windows.gdi32 windows.user32
|
||||
windows.opengl32 windows.messages windows.types windows.nt
|
||||
windows threads timers libc combinators
|
||||
continuations command-line shuffle opengl ui.render unicode.case
|
||||
ascii math.bitfields ;
|
||||
windows threads libc combinators continuations command-line
|
||||
shuffle opengl ui.render unicode.case ascii math.bitfields ;
|
||||
IN: ui.windows
|
||||
|
||||
TUPLE: windows-ui-backend ;
|
||||
|
|
Loading…
Reference in New Issue