Ported to 0.79
parent
288f987f12
commit
9df7d54982
|
@ -1,12 +1,28 @@
|
||||||
|
|
||||||
IN: factory
|
IN: factory
|
||||||
|
|
||||||
USING: kernel namespaces generic math sequences hashtables io vectors words
|
USING: kernel namespaces generic math sequences hashtables io arrays words
|
||||||
prettyprint lists concurrency
|
prettyprint lists concurrency
|
||||||
xlib x concurrent-widgets simple-error-handler ;
|
xlib x concurrent-widgets simple-error-handler ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
DEFER: workspace-menu
|
||||||
|
DEFER: wm-frame?
|
||||||
|
DEFER: manage-window
|
||||||
|
DEFER: window-list
|
||||||
|
DEFER: refresh-window-list
|
||||||
|
DEFER: layout-frame
|
||||||
|
DEFER: mapped-windows
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
: popup-window ( -- ) mouse-sensor move-window raise-window map-window ;
|
||||||
|
|
||||||
|
: popup-window% [ popup-window ] with-window-object ;
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
SYMBOL: root-menu
|
SYMBOL: root-menu
|
||||||
|
|
||||||
: setup-root-menu ( -- )
|
: setup-root-menu ( -- )
|
||||||
|
@ -16,7 +32,9 @@ SYMBOL: root-menu
|
||||||
"xlogo" [ "launch program..." print ] root-menu get add-popup-menu-item
|
"xlogo" [ "launch program..." print ] root-menu get add-popup-menu-item
|
||||||
"xclock" [ "launch program..." print ] root-menu get add-popup-menu-item
|
"xclock" [ "launch program..." print ] root-menu get add-popup-menu-item
|
||||||
"xload" [ "launch program..." print ] root-menu get add-popup-menu-item
|
"xload" [ "launch program..." print ] root-menu get add-popup-menu-item
|
||||||
"emacs" [ "launch program..." print ] root-menu get add-popup-menu-item ;
|
"emacs" [ "launch program..." print ] root-menu get add-popup-menu-item
|
||||||
|
"Workspaces"
|
||||||
|
[ workspace-menu get popup-window% ] root-menu get add-popup-menu-item ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -97,13 +115,10 @@ TUPLE: wm-root ;
|
||||||
dup
|
dup
|
||||||
[ swap drop ]
|
[ swap drop ]
|
||||||
[ drop >r dpy get r> <window> ]
|
[ drop >r dpy get r> <window> ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
DEFER: wm-frame?
|
|
||||||
DEFER: manage-window
|
|
||||||
|
|
||||||
M: wm-root handle-map-request-event ( event <wm-root> -- )
|
M: wm-root handle-map-request-event ( event <wm-root> -- )
|
||||||
drop XMapRequestEvent-window id>obj ! obj
|
drop XMapRequestEvent-window id>obj ! obj
|
||||||
|
|
||||||
|
@ -155,17 +170,17 @@ M: wm-root move-request-x ( event wm-root -- x )
|
||||||
dup move-request-x?
|
dup move-request-x?
|
||||||
[ XConfigureRequestEvent-x ]
|
[ XConfigureRequestEvent-x ]
|
||||||
[ XConfigureRequestEvent-window [ window-x ] with-win ]
|
[ XConfigureRequestEvent-window [ window-x ] with-win ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-root move-request-y ( event wm-root -- y )
|
M: wm-root move-request-y ( event wm-root -- y )
|
||||||
drop
|
drop
|
||||||
dup move-request-y?
|
dup move-request-y?
|
||||||
[ XConfigureRequestEvent-y ]
|
[ XConfigureRequestEvent-y ]
|
||||||
[ XConfigureRequestEvent-window [ window-y ] with-win ]
|
[ XConfigureRequestEvent-window [ window-y ] with-win ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-root move-request-position ( event wm-root -- { x y } )
|
M: wm-root move-request-position ( event wm-root -- { x y } )
|
||||||
2dup move-request-x -rot move-request-y 2vector ;
|
2dup move-request-x -rot move-request-y 2array ;
|
||||||
|
|
||||||
M: wm-root execute-move-request ( event wm-root -- )
|
M: wm-root execute-move-request ( event wm-root -- )
|
||||||
dupd move-request-position swap XConfigureRequestEvent-window move-window+ ;
|
dupd move-request-position swap XConfigureRequestEvent-window move-window+ ;
|
||||||
|
@ -177,17 +192,17 @@ M: wm-root size-request-width ( event wm-root -- width )
|
||||||
dup size-request-width?
|
dup size-request-width?
|
||||||
[ XConfigureRequestEvent-width ]
|
[ XConfigureRequestEvent-width ]
|
||||||
[ XConfigureRequestEvent-window [ window-width ] with-win ]
|
[ XConfigureRequestEvent-window [ window-width ] with-win ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-root size-request-height ( event wm-root -- height )
|
M: wm-root size-request-height ( event wm-root -- height )
|
||||||
drop
|
drop
|
||||||
dup size-request-height?
|
dup size-request-height?
|
||||||
[ XConfigureRequestEvent-height ]
|
[ XConfigureRequestEvent-height ]
|
||||||
[ XConfigureRequestEvent-window [ window-height ] with-win ]
|
[ XConfigureRequestEvent-window [ window-height ] with-win ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-root size-request-size ( event wm-root -- { width height } )
|
M: wm-root size-request-size ( event wm-root -- { width height } )
|
||||||
2dup size-request-width -rot size-request-height 2vector ;
|
2dup size-request-width -rot size-request-height 2array ;
|
||||||
|
|
||||||
M: wm-root execute-size-request ( event wm-root -- )
|
M: wm-root execute-size-request ( event wm-root -- )
|
||||||
dupd size-request-size swap XConfigureRequestEvent-window resize-window+ ;
|
dupd size-request-size swap XConfigureRequestEvent-window resize-window+ ;
|
||||||
|
@ -203,9 +218,6 @@ M: wm-root handle-configure-request-event ( event wm-root -- )
|
||||||
! M: wm-root handle-button-press-event
|
! M: wm-root handle-button-press-event
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
DEFER: window-list
|
|
||||||
DEFER: refresh-window-list
|
|
||||||
|
|
||||||
M: wm-root handle-button-press-event ( event wm-root -- )
|
M: wm-root handle-button-press-event ( event wm-root -- )
|
||||||
drop ! event
|
drop ! event
|
||||||
|
|
||||||
|
@ -215,7 +227,7 @@ M: wm-root handle-button-press-event ( event wm-root -- )
|
||||||
root-menu get raise-window%
|
root-menu get raise-window%
|
||||||
root-menu get map-window% ]
|
root-menu get map-window% ]
|
||||||
[ root-menu get unmap-window% ]
|
[ root-menu get unmap-window% ]
|
||||||
ifte ] }
|
if ] }
|
||||||
|
|
||||||
{ [ dup XButtonEvent-button Button2 = ]
|
{ [ dup XButtonEvent-button Button2 = ]
|
||||||
[ window-list get window-map-state% IsUnmapped =
|
[ window-list get window-map-state% IsUnmapped =
|
||||||
|
@ -224,7 +236,7 @@ M: wm-root handle-button-press-event ( event wm-root -- )
|
||||||
window-list get refresh-window-list
|
window-list get refresh-window-list
|
||||||
window-list get map-window% ]
|
window-list get map-window% ]
|
||||||
[ window-list get unmap-window% ]
|
[ window-list get unmap-window% ]
|
||||||
ifte ] } }
|
if ] } }
|
||||||
|
|
||||||
cond ;
|
cond ;
|
||||||
|
|
||||||
|
@ -332,7 +344,7 @@ TUPLE: wm-frame child ;
|
||||||
|
|
||||||
M: wm-frame handle-destroy-window-event ( event <wm-frame> -- )
|
M: wm-frame handle-destroy-window-event ( event <wm-frame> -- )
|
||||||
2dup destroy-window-event-match?
|
2dup destroy-window-event-match?
|
||||||
[ destroy-window% drop ] [ drop drop ] ifte ;
|
[ destroy-window% drop ] [ drop drop ] if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -341,7 +353,7 @@ M: wm-frame handle-destroy-window-event ( event <wm-frame> -- )
|
||||||
|
|
||||||
M: wm-frame handle-map-request-event ( event <wm-frame> -- )
|
M: wm-frame handle-map-request-event ( event <wm-frame> -- )
|
||||||
2dup map-request-event-match? ! event frame ?
|
2dup map-request-event-match? ! event frame ?
|
||||||
[ dup wm-frame-child map-window% map-window% drop ] [ drop drop ] ifte ;
|
[ dup wm-frame-child map-window% map-window% drop ] [ drop drop ] if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -350,7 +362,7 @@ M: wm-frame handle-map-request-event ( event <wm-frame> -- )
|
||||||
|
|
||||||
M: wm-frame handle-map-event ( event <wm-frame> -- )
|
M: wm-frame handle-map-event ( event <wm-frame> -- )
|
||||||
2dup map-event-match?
|
2dup map-event-match?
|
||||||
[ dup map-window% raise-window% drop ] [ drop drop ] ifte ;
|
[ dup map-window% raise-window% drop ] [ drop drop ] if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! M: wm-frame handle-configure-request-event ( event frame )
|
! M: wm-frame handle-configure-request-event ( event frame )
|
||||||
|
@ -360,16 +372,16 @@ M: wm-frame move-request-x ( event frame -- x )
|
||||||
over move-request-x?
|
over move-request-x?
|
||||||
[ drop XConfigureRequestEvent-x ]
|
[ drop XConfigureRequestEvent-x ]
|
||||||
[ nip window-x% ]
|
[ nip window-x% ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-frame move-request-y ( event frame -- y )
|
M: wm-frame move-request-y ( event frame -- y )
|
||||||
over move-request-y?
|
over move-request-y?
|
||||||
[ drop XConfigureRequestEvent-y ]
|
[ drop XConfigureRequestEvent-y ]
|
||||||
[ nip window-y% ]
|
[ nip window-y% ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-frame move-request-position ( event frame -- { x y } )
|
M: wm-frame move-request-position ( event frame -- { x y } )
|
||||||
2dup move-request-x -rot move-request-y 2vector ;
|
2dup move-request-x -rot move-request-y 2array ;
|
||||||
|
|
||||||
M: wm-frame execute-move-request ( event frame )
|
M: wm-frame execute-move-request ( event frame )
|
||||||
dup -rot move-request-position swap move-window% ;
|
dup -rot move-request-position swap move-window% ;
|
||||||
|
@ -380,16 +392,16 @@ M: wm-frame size-request-width ( event frame -- width )
|
||||||
over size-request-width?
|
over size-request-width?
|
||||||
[ drop XConfigureRequestEvent-width ]
|
[ drop XConfigureRequestEvent-width ]
|
||||||
[ nip wm-frame-child window-width% ]
|
[ nip wm-frame-child window-width% ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-frame size-request-height ( event frame -- height )
|
M: wm-frame size-request-height ( event frame -- height )
|
||||||
over size-request-height?
|
over size-request-height?
|
||||||
[ drop XConfigureRequestEvent-height ]
|
[ drop XConfigureRequestEvent-height ]
|
||||||
[ nip wm-frame-child window-height% ]
|
[ nip wm-frame-child window-height% ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
M: wm-frame size-request-size ( event frame -- size )
|
M: wm-frame size-request-size ( event frame -- size )
|
||||||
2dup size-request-width -rot size-request-height 2vector ;
|
2dup size-request-width -rot size-request-height 2array ;
|
||||||
|
|
||||||
: execute-size-request/child ( event frame )
|
: execute-size-request/child ( event frame )
|
||||||
dup wm-frame-child -rot size-request-size swap resize-window% ;
|
dup wm-frame-child -rot size-request-size swap resize-window% ;
|
||||||
|
@ -413,12 +425,10 @@ M: wm-frame handle-configure-request-event ( event frame )
|
||||||
wm-frame-child window-id swap XUnmapEvent-window = ;
|
wm-frame-child window-id swap XUnmapEvent-window = ;
|
||||||
|
|
||||||
M: wm-frame handle-unmap-event ( event frame )
|
M: wm-frame handle-unmap-event ( event frame )
|
||||||
2dup unmap-event-match? [ unmap-window% drop ] [ drop drop ] ifte ;
|
2dup unmap-event-match? [ unmap-window% drop ] [ drop drop ] if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
DEFER: layout-frame
|
|
||||||
|
|
||||||
: drag-move-frame ( frame -- ) drag-move-window% ;
|
: drag-move-frame ( frame -- ) drag-move-window% ;
|
||||||
|
|
||||||
: drag-resize-frame ( frame -- ) dup drag-resize-window% layout-frame ;
|
: drag-resize-frame ( frame -- ) dup drag-resize-window% layout-frame ;
|
||||||
|
@ -437,7 +447,7 @@ M: wm-frame handle-enter-window-event ( event frame )
|
||||||
nip dup wm-frame-child valid-window?%
|
nip dup wm-frame-child valid-window?%
|
||||||
[ wm-frame-child >r RevertToPointerRoot CurrentTime r> set-input-focus% ]
|
[ wm-frame-child >r RevertToPointerRoot CurrentTime r> set-input-focus% ]
|
||||||
[ destroy-window% ]
|
[ destroy-window% ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -454,6 +464,52 @@ M: wm-frame handle-property-event ( event frame )
|
||||||
swap resize-window% ! frame
|
swap resize-window% ! frame
|
||||||
drop ;
|
drop ;
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
! Workspaces
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
GENERIC: switch-to
|
||||||
|
|
||||||
|
SYMBOL: current-workspace
|
||||||
|
|
||||||
|
TUPLE: workspace windows ;
|
||||||
|
|
||||||
|
: create-workspace [ ] <workspace> ;
|
||||||
|
|
||||||
|
M: workspace switch-to ( workspace -- )
|
||||||
|
mapped-windows dup current-workspace get set-workspace-windows
|
||||||
|
[ unmap-window+ ] each
|
||||||
|
dup workspace-windows [ map-window+ ] each
|
||||||
|
current-workspace set ;
|
||||||
|
|
||||||
|
SYMBOL: workspace-1
|
||||||
|
SYMBOL: workspace-2
|
||||||
|
SYMBOL: workspace-3
|
||||||
|
SYMBOL: workspace-4
|
||||||
|
|
||||||
|
create-workspace workspace-1 set
|
||||||
|
create-workspace workspace-2 set
|
||||||
|
create-workspace workspace-3 set
|
||||||
|
create-workspace workspace-4 set
|
||||||
|
|
||||||
|
workspace-1 get current-workspace set
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
SYMBOL: workspace-menu
|
||||||
|
|
||||||
|
: setup-workspace-menu ( -- )
|
||||||
|
create-menu workspace-menu set
|
||||||
|
"black" lookup-color workspace-menu get set-window-background%
|
||||||
|
"Workspace 1"
|
||||||
|
[ workspace-1 get switch-to ] workspace-menu get add-popup-menu-item
|
||||||
|
"Workspace 2"
|
||||||
|
[ workspace-2 get switch-to ] workspace-menu get add-popup-menu-item
|
||||||
|
"Workspace 3"
|
||||||
|
[ workspace-3 get switch-to ] workspace-menu get add-popup-menu-item
|
||||||
|
"Workspace 4"
|
||||||
|
[ workspace-4 get switch-to ] workspace-menu get add-popup-menu-item ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! window-list
|
! window-list
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
@ -471,7 +527,7 @@ SYMBOL: window-list
|
||||||
wm-frame-child ! window-list frame child
|
wm-frame-child ! window-list frame child
|
||||||
fetch-name% ! window-list frame name-or-f
|
fetch-name% ! window-list frame name-or-f
|
||||||
dup ! window-list frame name-or-f name-or-f
|
dup ! window-list frame name-or-f name-or-f
|
||||||
[ ] [ drop "*untitled*" ] ifte ! window-list frame name
|
[ ] [ drop "*untitled*" ] if ! window-list frame name
|
||||||
swap ! window-list name frame
|
swap ! window-list name frame
|
||||||
[ map-window% ] ! window-list name frame [ map-window% ]
|
[ map-window% ] ! window-list name frame [ map-window% ]
|
||||||
cons ! window-list name action
|
cons ! window-list name action
|
||||||
|
@ -505,5 +561,6 @@ SYMBOL: window-list
|
||||||
root get create-wm-root
|
root get create-wm-root
|
||||||
setup-root-menu
|
setup-root-menu
|
||||||
setup-window-list
|
setup-window-list
|
||||||
|
setup-workspace-menu
|
||||||
manage-existing-windows
|
manage-existing-windows
|
||||||
[ concurrent-event-loop ] spawn ;
|
[ concurrent-event-loop ] spawn ;
|
|
@ -3,7 +3,7 @@
|
||||||
IN: automata
|
IN: automata
|
||||||
|
|
||||||
USING: parser kernel hashtables namespaces sequences lists math io
|
USING: parser kernel hashtables namespaces sequences lists math io
|
||||||
threads strings vectors prettyprint xlib x ;
|
threads strings arrays prettyprint xlib x ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! set-rule
|
! set-rule
|
||||||
|
@ -11,6 +11,8 @@ USING: parser kernel hashtables namespaces sequences lists math io
|
||||||
|
|
||||||
SYMBOL: rule
|
SYMBOL: rule
|
||||||
|
|
||||||
|
8 <hashtable> rule set
|
||||||
|
|
||||||
SYMBOL: char-0
|
SYMBOL: char-0
|
||||||
|
|
||||||
48 char-0 set
|
48 char-0 set
|
||||||
|
@ -27,7 +29,7 @@ SYMBOL: char-0
|
||||||
|
|
||||||
: rule-values ( n -- { ... } )
|
: rule-values ( n -- { ... } )
|
||||||
>bin 8 char-0 get pad-left
|
>bin 8 char-0 get pad-left
|
||||||
>vector
|
>array
|
||||||
[ 48 - ] map ;
|
[ 48 - ] map ;
|
||||||
|
|
||||||
: set-rule ( n -- )
|
: set-rule ( n -- )
|
||||||
|
@ -40,15 +42,15 @@ SYMBOL: char-0
|
||||||
: 3nth ( n seq -- slice ) >r dup 3 + r> <slice> ;
|
: 3nth ( n seq -- slice ) >r dup 3 + r> <slice> ;
|
||||||
|
|
||||||
: next-chunk ( << slice: a b c >> - value )
|
: next-chunk ( << slice: a b c >> - value )
|
||||||
>vector rule get hash ;
|
>array rule get hash ;
|
||||||
|
|
||||||
|
: (step) ( line -- new-line )
|
||||||
|
dup length 2 - [ swap 3nth next-chunk ] map-with ;
|
||||||
|
|
||||||
: step-line ( line -- new-line )
|
: step-line ( line -- new-line )
|
||||||
>r { 0 } r> { 0 } append append
|
>r { 0 } r> { 0 } append append
|
||||||
(step) ;
|
(step) ;
|
||||||
|
|
||||||
: (step) ( line -- new-line )
|
|
||||||
dup length 2 - [ swap 3nth next-chunk ] map-with ;
|
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! Display the rule
|
! Display the rule
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
@ -64,7 +66,7 @@ SYMBOL: char-0
|
||||||
|
|
||||||
: random-line ( -- line )
|
: random-line ( -- line )
|
||||||
0 400 <range>
|
0 400 <range>
|
||||||
[ drop 0 1 random-int ]
|
[ drop 2 random-int ]
|
||||||
map ;
|
map ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
@ -72,13 +74,13 @@ SYMBOL: char-0
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
: show-point ( { x y } p -- )
|
: show-point ( { x y } p -- )
|
||||||
1 = [ draw-point ] [ drop ] ifte ;
|
1 = [ draw-point ] [ drop ] if ;
|
||||||
|
|
||||||
: (show-line) ( { x y } line -- )
|
: (show-line) ( { x y } line -- )
|
||||||
[ >r dup r> show-point { 1 0 } v+ ] each drop ;
|
[ >r dup r> show-point { 1 0 } v+ ] each drop ;
|
||||||
|
|
||||||
: show-line ( y line -- )
|
: show-line ( y line -- )
|
||||||
>r >r 0 r> 2vector r> (show-line) ;
|
>r >r 0 r> 2array r> (show-line) ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! Go
|
! Go
|
||||||
|
@ -95,7 +97,7 @@ SYMBOL: char-0
|
||||||
flush-dpy ;
|
flush-dpy ;
|
||||||
|
|
||||||
: random-gallery
|
: random-gallery
|
||||||
1 255 random-int
|
255 random-int 1 +
|
||||||
dup unparse print
|
dup unparse print
|
||||||
set-rule
|
set-rule
|
||||||
run-rule
|
run-rule
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
IN: boids
|
IN: boids
|
||||||
|
|
||||||
USING: namespaces math kernel sequences vectors xlib x ;
|
USING: namespaces math kernel sequences arrays xlib x ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -38,18 +38,22 @@ SYMBOL: time-slice 0.5 time-slice set
|
||||||
! random-boid and random-boids
|
! random-boid and random-boids
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
: random-n ( n -- random-0-to-n-1 )
|
! : random-range dupd swap - random-int + ;
|
||||||
1 - 0 swap random-int ;
|
|
||||||
|
: random-range ( a b -- n ) 1 + dupd swap - random-int + ;
|
||||||
|
|
||||||
|
! : random-n ( n -- random-0-to-n-1 )
|
||||||
|
! 1 - 0 swap random-int ;
|
||||||
|
|
||||||
: random-pos ( -- pos )
|
: random-pos ( -- pos )
|
||||||
world-size get [ random-n ] map ;
|
world-size get [ random-int ] map ;
|
||||||
|
|
||||||
: random-vel ( -- vel )
|
: random-vel ( -- vel )
|
||||||
2 >vector [ drop -10 10 random-int ] map ;
|
2 >array [ drop -10 10 random-range ] map ;
|
||||||
|
|
||||||
: random-boid ( -- boid ) random-pos random-vel <boid> ;
|
: random-boid ( -- boid ) random-pos random-vel <boid> ;
|
||||||
|
|
||||||
: random-boids ( n -- boids ) >vector [ drop random-boid ] map ;
|
: random-boids ( n -- boids ) >array [ drop random-boid ] map ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -179,7 +183,7 @@ SYMBOL: boids
|
||||||
normalize
|
normalize
|
||||||
separation-weight get
|
separation-weight get
|
||||||
v*n ]
|
v*n ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -192,7 +196,7 @@ SYMBOL: boids
|
||||||
normalize
|
normalize
|
||||||
alignment-weight get
|
alignment-weight get
|
||||||
v*n ]
|
v*n ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -207,7 +211,7 @@ SYMBOL: boids
|
||||||
normalize
|
normalize
|
||||||
cohesion-weight get
|
cohesion-weight get
|
||||||
v*n ]
|
v*n ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -248,7 +252,7 @@ SYMBOL: boids
|
||||||
|
|
||||||
: wrap-pos ( pos -- pos )
|
: wrap-pos ( pos -- pos )
|
||||||
[ ] each
|
[ ] each
|
||||||
wrap-y swap wrap-x swap 2vector ;
|
wrap-y swap wrap-x swap 2array ;
|
||||||
|
|
||||||
: iterate-boid ( self -- self )
|
: iterate-boid ( self -- self )
|
||||||
dup >r new-pos wrap-pos r> new-vel <boid> ;
|
dup >r new-pos wrap-pos r> new-vel <boid> ;
|
||||||
|
|
|
@ -229,7 +229,7 @@ TUPLE: menu item-width item-height space ;
|
||||||
! dup ! event obj-or-f obj-or-f
|
! dup ! event obj-or-f obj-or-f
|
||||||
! [ handle-event ]
|
! [ handle-event ]
|
||||||
! [ drop drop ] ! event obj-or-f obj-or-f [ handle-event ] [ drop drop ]
|
! [ drop drop ] ! event obj-or-f obj-or-f [ handle-event ] [ drop drop ]
|
||||||
! ifte
|
! if
|
||||||
! event-loop ;
|
! event-loop ;
|
||||||
|
|
||||||
! It's possible to have multiple displays open simultaneously.
|
! It's possible to have multiple displays open simultaneously.
|
||||||
|
@ -241,7 +241,7 @@ TUPLE: menu item-width item-height space ;
|
||||||
QueuedAfterFlush events-queued 0 >
|
QueuedAfterFlush events-queued 0 >
|
||||||
[ next-event ]
|
[ next-event ]
|
||||||
[ 100 sleep concurrent-next-event ]
|
[ 100 sleep concurrent-next-event ]
|
||||||
ifte ;
|
if ;
|
||||||
|
|
||||||
: concurrent-event-loop ( -- )
|
: concurrent-event-loop ( -- )
|
||||||
concurrent-next-event ! event
|
concurrent-next-event ! event
|
||||||
|
@ -252,7 +252,7 @@ TUPLE: menu item-width item-height space ;
|
||||||
dup ! event obj-or-f obj-or-f
|
dup ! event obj-or-f obj-or-f
|
||||||
[ handle-event ]
|
[ handle-event ]
|
||||||
[ drop drop ] ! event obj-or-f obj-or-f [ handle-event ] [ drop drop ]
|
[ drop drop ] ! event obj-or-f obj-or-f [ handle-event ] [ drop drop ]
|
||||||
ifte
|
if
|
||||||
concurrent-event-loop ;
|
concurrent-event-loop ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
@ -294,3 +294,7 @@ TUPLE: menu item-width item-height space ;
|
||||||
: vertical-layout% [ vertical-layout ] with-window-object ;
|
: vertical-layout% [ vertical-layout ] with-window-object ;
|
||||||
|
|
||||||
: draw-string% [ draw-string ] with-window-object ;
|
: draw-string% [ draw-string ] with-window-object ;
|
||||||
|
|
||||||
|
: get-transient-for-hint% [ get-transient-for-hint ] with-window-object ;
|
||||||
|
|
||||||
|
: fetch-name% [ fetch-name ] with-window-object ;
|
|
@ -1,20 +1,20 @@
|
||||||
|
|
||||||
IN: x
|
IN: x
|
||||||
|
|
||||||
USING: kernel math vectors namespaces sequences xlib x rectangle ;
|
USING: kernel math arrays namespaces sequences xlib x rectangle ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
: text-width ( string -- width ) font get swap dup length XTextWidth ;
|
: text-width ( string -- width ) font get swap dup length XTextWidth ;
|
||||||
|
|
||||||
: string-size ( string -- size ) text-width font get font-height 2vector ;
|
: string-size ( string -- size ) text-width font get font-height 2array ;
|
||||||
|
|
||||||
: string-rect ( string -- rect ) string-size { 0 0 } swap <rect> ;
|
: string-rect ( string -- rect ) string-size { 0 0 } swap <rect> ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
: base-point ( rect -- )
|
: base-point ( rect -- )
|
||||||
top-left font get XFontStruct-ascent 0 swap 2vector v+ ;
|
top-left font get XFontStruct-ascent 0 swap 2array v+ ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
IN: x USING: namespaces kernel math vectors alien sequences xlib ;
|
IN: x USING: namespaces kernel math arrays alien sequences xlib ;
|
||||||
|
|
||||||
SYMBOL: dpy
|
SYMBOL: dpy
|
||||||
SYMBOL: scr
|
SYMBOL: scr
|
||||||
|
@ -72,10 +72,10 @@ DEFER: with-win
|
||||||
>r dpy get win get r> [ ] each XResizeWindow drop ;
|
>r dpy get win get r> [ ] each XResizeWindow drop ;
|
||||||
|
|
||||||
: set-window-width ( width -- )
|
: set-window-width ( width -- )
|
||||||
window-height 2vector resize-window ;
|
window-height 2array resize-window ;
|
||||||
|
|
||||||
: set-window-height ( height -- )
|
: set-window-height ( height -- )
|
||||||
window-width swap 2vector resize-window ;
|
window-width swap 2array resize-window ;
|
||||||
|
|
||||||
: set-window-border-width ( width -- )
|
: set-window-border-width ( width -- )
|
||||||
>r dpy get win get r> XSetWindowBorderWidth drop ;
|
>r dpy get win get r> XSetWindowBorderWidth drop ;
|
||||||
|
@ -112,7 +112,7 @@ DEFER: with-win
|
||||||
|
|
||||||
: window-size ( -- { width height } )
|
: window-size ( -- { width height } )
|
||||||
dpy get win get 0 <Window> 0 <int> 0 <int>
|
dpy get win get 0 <Window> 0 <int> 0 <int>
|
||||||
0 <uint> 0 <uint> 2dup 2vector >r
|
0 <uint> 0 <uint> 2dup 2array >r
|
||||||
0 <uint> 0 <uint>
|
0 <uint> 0 <uint>
|
||||||
XGetGeometry drop r> [ *uint ] map ;
|
XGetGeometry drop r> [ *uint ] map ;
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ DEFER: with-win
|
||||||
|
|
||||||
: window-position ( -- { x y } )
|
: window-position ( -- { x y } )
|
||||||
dpy get win get 0 <Window>
|
dpy get win get 0 <Window>
|
||||||
0 <int> 0 <int> 2dup 2vector >r
|
0 <int> 0 <int> 2dup 2array >r
|
||||||
0 <uint> 0 <uint> 0 <uint> 0 <uint>
|
0 <uint> 0 <uint> 0 <uint> 0 <uint>
|
||||||
XGetGeometry drop r> [ *int ] map ;
|
XGetGeometry drop r> [ *int ] map ;
|
||||||
|
|
||||||
|
@ -218,6 +218,18 @@ DEFER: with-win
|
||||||
: ungrab-pointer ( time -- )
|
: ungrab-pointer ( time -- )
|
||||||
>r dpy get r> XUngrabPointer drop ;
|
>r dpy get r> XUngrabPointer drop ;
|
||||||
|
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
! 14 - Inter-Client Communication Functions
|
||||||
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
: fetch-name ( -- name-or-f )
|
||||||
|
dpy get win get 0 <int> <void*> dup >r XFetchName drop r>
|
||||||
|
dup *void* alien-address 0 = [ drop f ] [ *char* ] if ;
|
||||||
|
|
||||||
|
: get-transient-for-hint ( -- win-or-f )
|
||||||
|
dpy get win get 0 <Window> dup >r XGetTransientForHint r>
|
||||||
|
swap 0 = [ drop f ] [ *Window ] if ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! Not Categorized Yet
|
! Not Categorized Yet
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
@ -232,6 +244,9 @@ DEFER: with-win
|
||||||
: center-window-horizontally+ [ center-window-horizontally ] with-win ;
|
: center-window-horizontally+ [ center-window-horizontally ] with-win ;
|
||||||
: window-children+ [ window-children ] with-win ;
|
: window-children+ [ window-children ] with-win ;
|
||||||
: window-map-state+ [ window-map-state ] with-win ;
|
: window-map-state+ [ window-map-state ] with-win ;
|
||||||
|
: destroy-window+ [ destroy-window ] with-win ;
|
||||||
|
: map-window+ [ map-window ] with-win ;
|
||||||
|
: unmap-window+ [ unmap-window ] with-win ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
@ -284,7 +299,7 @@ DEFER: with-win
|
||||||
|
|
||||||
: mouse-sensor ( -- { root-x root-y } )
|
: mouse-sensor ( -- { root-x root-y } )
|
||||||
dpy get win get 0 <Window> 0 <Window> 0 <int> 0 <int> 2dup >r >r
|
dpy get win get 0 <Window> 0 <Window> 0 <int> 0 <int> 2dup >r >r
|
||||||
0 <int> 0 <int> 0 <uint> XQueryPointer drop r> *int r> *int 2vector ;
|
0 <int> 0 <int> 0 <uint> XQueryPointer drop r> *int r> *int 2array ;
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
! Windows and their children
|
! Windows and their children
|
||||||
|
|
Loading…
Reference in New Issue