From fdfcc34621ba05819e4d2550fd7ec72227aad42c Mon Sep 17 00:00:00 2001 From: slava Date: Sat, 25 Mar 2006 00:26:06 +0000 Subject: [PATCH] Simplifying UI code dealing with worlds --- library/bootstrap/boot-stage1.factor | 3 +- library/cocoa/ui.factor | 7 +- library/ui/backend.factor | 2 +- library/ui/browser.factor | 4 +- library/ui/environment.factor | 39 ++++++++ library/ui/gestures.factor | 115 +++++++++++++++++++++- library/ui/hand.factor | 142 --------------------------- library/ui/hierarchy.factor | 2 - library/ui/labels.factor | 6 +- library/ui/launchpad.factor | 6 +- library/ui/layouts.factor | 9 -- library/ui/listener.factor | 21 ++-- library/ui/world.factor | 18 ++-- library/x11/ui.factor | 3 +- 14 files changed, 183 insertions(+), 194 deletions(-) create mode 100644 library/ui/environment.factor delete mode 100644 library/ui/hand.factor diff --git a/library/bootstrap/boot-stage1.factor b/library/bootstrap/boot-stage1.factor index b8f4bb8db0..81b1fe88f2 100644 --- a/library/bootstrap/boot-stage1.factor +++ b/library/bootstrap/boot-stage1.factor @@ -169,9 +169,8 @@ vectors words ; "/library/ui/world.factor" "/library/ui/paint.factor" "/library/ui/theme.factor" - "/library/ui/gestures.factor" "/library/ui/labels.factor" - "/library/ui/hand.factor" + "/library/ui/gestures.factor" "/library/ui/frames.factor" "/library/ui/borders.factor" "/library/ui/buttons.factor" diff --git a/library/cocoa/ui.factor b/library/cocoa/ui.factor index 876857f178..97ce62cea3 100644 --- a/library/cocoa/ui.factor +++ b/library/cocoa/ui.factor @@ -166,16 +166,13 @@ H{ } clone views set-global FactorView over rect-dim [ over set-world-handle dup add-notify register-view ] keep ; -: ( gadget title -- window ) - >r r> dup [contentView] [release] ; - IN: gadgets : redraw-world ( handle -- ) world-handle 1 [setNeedsDisplay:] ; -: in-window ( gadget status dim title -- ) - >r r> drop ; +: in-window ( world title -- ) + >r r> [contentView] [release] ; : select-gl-context ( handle -- ) [openGLContext] [makeCurrentContext] ; diff --git a/library/ui/backend.factor b/library/ui/backend.factor index aeee02ea47..a67acc5853 100644 --- a/library/ui/backend.factor +++ b/library/ui/backend.factor @@ -5,7 +5,7 @@ DEFER: draw-world ! defined in world.factor : redraw-world ( world -- ) draw-world ; -DEFER: in-window ( gadget status dim title -- ) +DEFER: in-window ( world title -- ) DEFER: select-gl-context ( handle -- ) diff --git a/library/ui/browser.factor b/library/ui/browser.factor index b1bba63953..2bf4f3f694 100644 --- a/library/ui/browser.factor +++ b/library/ui/browser.factor @@ -72,12 +72,12 @@ C: browser ( obj -- browser ) TUPLE: browser-button object ; -: in-browser ( obj -- ) +: browser-window ( obj -- ) "Browser" simple-window ; : browser-button-action ( button -- ) [ browser-button-object ] keep find-browser - [ dup save-current browse ] [ in-browser ] if* ; + [ dup save-current browse ] [ browser-window ] if* ; C: browser-button ( gadget object -- button ) [ set-browser-button-object ] keep diff --git a/library/ui/environment.factor b/library/ui/environment.factor new file mode 100644 index 0000000000..c4fe354b81 --- /dev/null +++ b/library/ui/environment.factor @@ -0,0 +1,39 @@ +! Copyright (C) 2006 Slava Pestov. +! See http://factor.sf.net/license.txt for BSD license. +IN: gadgets +USING: gadgets gadgets-labels gadgets-layouts gadgets-theme +hashtables kernel math namespaces queues sequences threads ; + +: layout-queued ( -- ) + invalid dup queue-empty? [ + drop + ] [ + deque dup layout + find-world [ dup world-handle set ] when* + layout-queued + ] if ; + +: init-ui ( -- ) + H{ } clone \ timers set-global + \ invalid set-global ; + +: ui-step ( -- ) + do-timers + [ layout-queued ] make-hash hash-values + [ dup world-handle [ draw-world ] [ drop ] if ] each + 10 sleep ; + +: close-global ( world global -- ) + dup get-global find-world rot eq? + [ f swap set-global ] [ drop ] if ; + +: close-world ( world -- ) + dup hand-clicked close-global + dup hand-gadget close-global + f over request-focus* dup remove-notify + dup free-fonts f swap set-world-handle ; + +: ( -- gadget ) ""